Create line parser

This commit is contained in:
2021-11-04 09:50:42 +01:00
parent 29303e5b5f
commit cf66dbc928

View File

@@ -159,6 +159,7 @@ data AST = EmptyNode
| ParamNode AST | ParamNode AST
| ParamsNode [AST] | ParamsNode [AST]
| InstructionNode AST AST | InstructionNode AST AST
| LineNode AST AST
deriving (Eq, Show) deriving (Eq, Show)
type ConsumedTokens = Int type ConsumedTokens = Int
@@ -200,6 +201,9 @@ parseParam = parseAlt [parseInt, parseLabelRef] ParamNode
parseInstr :: Parser parseInstr :: Parser
parseInstr = parseSeq [parseOperator, parseMany0 parseParam ParamsNode] (\[op, ps] -> InstructionNode op ps) parseInstr = parseSeq [parseOperator, parseMany0 parseParam ParamsNode] (\[op, ps] -> InstructionNode op ps)
parseLine :: Parser
parseLine = parseSeq [parseOptionally parseLabelDef, parseOptionally parseInstr] (\[label, instr] -> LineNode label instr)
mapAST :: Parser -> (AST -> AST) -> Parser mapAST :: Parser -> (AST -> AST) -> Parser
mapAST parser mapper tokens = do mapAST parser mapper tokens = do
(ParseResult ast consumed) <- parser tokens (ParseResult ast consumed) <- parser tokens
@@ -260,5 +264,5 @@ parse tokens = case parsers tokens of
parsers :: Parser parsers :: Parser
parsers = parseAny parsers = parseAny
[ parseInstr [ parseLine
] ]