From c323e84a00de4a709922d57b2cccb5d47dd560aa Mon Sep 17 00:00:00 2001 From: bunny Date: Sun, 7 Sep 2025 18:36:59 +0100 Subject: [PATCH] added examples (fib,69420/fizzbuzz) --- app/Compiler.hs | 27 +++++++++++++++++++++++++++ examples/69420.zorth | 25 +++++++++++++++++++++++++ examples/fib.zorth | 18 ++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 examples/69420.zorth create mode 100644 examples/fib.zorth diff --git a/app/Compiler.hs b/app/Compiler.hs index cacf8ff..65bbabd 100644 --- a/app/Compiler.hs +++ b/app/Compiler.hs @@ -73,6 +73,23 @@ handleSymbol h (ZorthASTWord "-") = do \ push rax\n" return () +handleSymbol h (ZorthASTWord "*") = do + liftIO $ hPutStr h + " pop rbx\n\ + \ pop rax\n\ + \ imul rax, rbx\n\ + \ push rax\n" + return () + +handleSymbol h (ZorthASTWord "/") = do + liftIO $ hPutStr h + " pop rbx\n\ + \ pop rax\n\ + \ cqo\n\ + \ idiv rbx\n\ + \ imul rax, rbx\n" + return () + handleSymbol h (ZorthASTWord "ret") = do liftIO $ hPutStr h " mov rax,60\n\ @@ -87,6 +104,16 @@ handleSymbol h (ZorthASTWord "dup") = do \ push rax\n" return () +handleSymbol h (ZorthASTWord "rot") = do + liftIO $ hPutStr h + " pop rax\n\ + \ pop rbx\n\ + \ pop rcx\n\ + \ push rbx\n\ + \ push rax\n\ + \ push rcx\n" + return () + handleSymbol h (ZorthASTWord "swap") = do liftIO $ hPutStr h " pop rax\n\ diff --git a/examples/69420.zorth b/examples/69420.zorth new file mode 100644 index 0000000..999bb5b --- /dev/null +++ b/examples/69420.zorth @@ -0,0 +1,25 @@ +: over swap dup rot rot ; +: mod over over / * - ; + +1 + +begin + dup 50< +while + dup 15 mod 0 = if + 69420 . + else + dup 3 mod 0 = if + 69 . + else + dup 3 mod 0 = if + 420 . + else + dup . + fi + fi + fi + 1+ +repeat + +ret \ No newline at end of file diff --git a/examples/fib.zorth b/examples/fib.zorth new file mode 100644 index 0000000..84930f3 --- /dev/null +++ b/examples/fib.zorth @@ -0,0 +1,18 @@ +: fib + 0 1 + begin + rot + dup 0> + while + 1- + rot rot + dup + dup . + rot + + + repeat +; + +15 fib + +ret