aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarvin Borner2024-12-27 21:56:23 +0100
committerMarvin Borner2024-12-27 21:56:23 +0100
commit785adecae39cd6d47bb50a37816fca88e608ac46 (patch)
treef2fe6e24ec3e896fe3f49f4c6b24370c081a8ec4
parentb41c0d95baf3f311ba562a0d165b5ee0d004d4e7 (diff)
fac
-rw-r--r--lllars/fac.lll17
-rw-r--r--lllars/parser.hs13
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