diff --git a/src/Nand2Tetris/VM.hs b/src/Nand2Tetris/VM.hs index 33fa744..06b24ed 100644 --- a/src/Nand2Tetris/VM.hs +++ b/src/Nand2Tetris/VM.hs @@ -129,7 +129,7 @@ parseInstruction = parseSegmentInt "this" SThis, parseSegmentInt "that" SThat, parseSegmentInt "constant" SConstant, - (string "static" *> space1) *> (SStatic <$> parseId), + (string "static" *> space1) *> (SStatic <$> (try parseId <|> parseStaticOffset)), parseSegmentInt "pointer" SPointer, parseSegmentInt "temp" STemp ] @@ -141,6 +141,10 @@ parseInstruction = hs <- many (alphaNumChar <|> char '.' <|> char '_') return $ T.pack (h : hs) + parseStaticOffset :: Parser T.Text + parseStaticOffset = do + h <- L.decimal + return $ "STATIC_" <> (T.pack . show) h parseSegmentInt :: T.Text -> (Int -> Segment) -> Parser Segment parseSegmentInt sname f = try $ do