Wrote a basic parser

This commit is contained in:
2024-02-17 01:09:46 -06:00
parent aa45f47b64
commit f699d59ba8
2 changed files with 30 additions and 1 deletions

View File

@@ -11,5 +11,28 @@ data Statement = Print Var | Assign Var Int | Add Var Var | While Var Code deriv
type Code = [Statement]
-- Part 1: Parser
statementParser :: Parser Statement
statementParser = try printParser <|> try assignParser <|> try addParser <|> whileParser
printParser :: Parser Statement
printParser = Print <$> (string "print" >> many1 space >> many1 letter)
assignParser :: Parser Statement
assignParser = Assign <$> many1 letter <*> (many1 space >> char '=' >> many1 space >> int)
addParser :: Parser Statement
addParser = Add <$> many1 letter <*> (many1 space >> string "+=" >> many1 space >> many1 letter)
whileParser :: Parser Statement
whileParser = While <$> (string "while" >> many1 space >> many1 letter) <*> (many1 space >> string "positive" >> many1 space >> char '{' >> many1 space >> many (statementParser <* many1 space) <* char '}')
codeParser :: Parser Code
codeParser = spaces >> many (statementParser <* many1 space) <* eof
main :: IO ()
main = someFunc
main = do
fileText <- readFile "input.txt"
let parsed = parse codeParser "input.txt" fileText
print parsed

6
input.txt Normal file
View File

@@ -0,0 +1,6 @@
a = 5
b = -1
while a positive {
print a
a += b
}