diff options
author | Marvin Borner | 2024-12-27 21:56:23 +0100 |
---|---|---|
committer | Marvin Borner | 2024-12-27 21:56:23 +0100 |
commit | 785adecae39cd6d47bb50a37816fca88e608ac46 (patch) | |
tree | f2fe6e24ec3e896fe3f49f4c6b24370c081a8ec4 | |
parent | b41c0d95baf3f311ba562a0d165b5ee0d004d4e7 (diff) |
fac
-rw-r--r-- | lllars/fac.lll | 17 | ||||
-rw-r--r-- | lllars/parser.hs | 13 |
2 files changed, 25 insertions, 5 deletions
diff --git a/lllars/fac.lll b/lllars/fac.lll new file mode 100644 index 0000000..02bf90a --- /dev/null +++ b/lllars/fac.lll @@ -0,0 +1,17 @@ +!!! all rights reserved to lars <3 !!! + +lars initial values: @0 is n, @1 is result +0lars255 +1lars1 + +larslars loop +@lars +lars|sral 0 sral +1larssral1*sral0 +0larssral0-1 +srallars lars + +larslarslars end: print number +@sral +8159larssral1 +larssral diff --git a/lllars/parser.hs b/lllars/parser.hs index 03bbf02..d512290 100644 --- a/lllars/parser.hs +++ b/lllars/parser.hs @@ -93,13 +93,13 @@ write = do return $ Write target source label :: Parser Label -label = char '@' *> (concat <$> some (string "lars" <|> string "sral")) +label = concat <$> some (string "lars" <|> string "sral") namedLabel :: Parser Instr -namedLabel = Label <$> label +namedLabel = Label <$> (char '@' *> label) goto :: Parser Instr -goto = GoTo <$> (string "sralllars " *> label) +goto = GoTo <$> (string "srallars " *> label) branch :: Parser Instr branch = @@ -111,12 +111,15 @@ branch = instr :: Parser Instr instr = comment <|> write <|> call <|> namedLabel <|> goto <|> branch +preamble :: Parser String +preamble = string "!!! all rights reserved to lars <3 !!!\n\n" + program :: Parser Program -program = sepEndBy instr (some $ char '\n') +program = preamble *> sepEndBy instr (some $ char '\n') main :: IO () main = do - f <- readFile "lars.lll" + f <- readFile "fac.lll" case runParser (program <* eof) "" f of Right res -> putStrLn $ "[" <> intercalate "," (show <$> res) <> "]" Left err -> putStrLn $ errorBundlePretty err |