Wrote a basic parser
This commit is contained in:
25
app/Main.hs
25
app/Main.hs
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user