From cf66dbc9286dc9dd82da526b47142a30c8032ada Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Thu, 4 Nov 2021 09:50:42 +0100 Subject: [PATCH] Create line parser --- app/Assembler.hs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/Assembler.hs b/app/Assembler.hs index ae59c86..b707740 100644 --- a/app/Assembler.hs +++ b/app/Assembler.hs @@ -159,6 +159,7 @@ data AST = EmptyNode | ParamNode AST | ParamsNode [AST] | InstructionNode AST AST + | LineNode AST AST deriving (Eq, Show) type ConsumedTokens = Int @@ -200,6 +201,9 @@ parseParam = parseAlt [parseInt, parseLabelRef] ParamNode parseInstr :: Parser 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 mapper tokens = do (ParseResult ast consumed) <- parser tokens @@ -260,5 +264,5 @@ parse tokens = case parsers tokens of parsers :: Parser parsers = parseAny - [ parseInstr + [ parseLine ] \ No newline at end of file