summaryrefslogtreecommitdiff
path: root/nandgame
diff options
context:
space:
mode:
authoruvok2026-01-16 12:50:27 +0100
committeruvok2026-01-16 12:50:27 +0100
commit63601830da505314839ebe4edbcf6c88af16c69b (patch)
tree1bfec4c20c46cac4d89986f74e077bad167b03a2 /nandgame
parentd7dfbe810354335ca39c8d14013782b7e8152fd3 (diff)
parser: Add support for bin,oct and fix hex nums
Diffstat (limited to 'nandgame')
-rw-r--r--nandgame/assembler/ex2.asm4
-rw-r--r--nandgame/assembler/number_test.txt5
-rwxr-xr-xnandgame/assembler/py_nand_ass/lexer.py25
-rwxr-xr-xnandgame/assembler/py_nand_ass/parser.py4
4 files changed, 32 insertions, 6 deletions
diff --git a/nandgame/assembler/ex2.asm b/nandgame/assembler/ex2.asm
index 50bdc63..c6f8353 100644
--- a/nandgame/assembler/ex2.asm
+++ b/nandgame/assembler/ex2.asm
@@ -7,4 +7,8 @@
and _, #0, A
and _, #0, A
mov A, #123
+ mov A, #0b00010000
+ mov A, #020
+ mov A, #16
+ mov A, #0x20
hlt
diff --git a/nandgame/assembler/number_test.txt b/nandgame/assembler/number_test.txt
new file mode 100644
index 0000000..5735425
--- /dev/null
+++ b/nandgame/assembler/number_test.txt
@@ -0,0 +1,5 @@
+; test number parsing
+0b10
+010
+10
+0x10
diff --git a/nandgame/assembler/py_nand_ass/lexer.py b/nandgame/assembler/py_nand_ass/lexer.py
index 75a3f2f..436119b 100755
--- a/nandgame/assembler/py_nand_ass/lexer.py
+++ b/nandgame/assembler/py_nand_ass/lexer.py
@@ -10,8 +10,10 @@ tokens = (
"COLON",
"SYMBOL",
"SHARP",
- "NUMBER",
+ "BINNUMBER",
+ "OCTNUMBER",
"HEXNUMBER",
+ "DECNUMBER",
"DOT",
"REG",
"NL",
@@ -39,9 +41,16 @@ def t_JUMP(t):
return t
-def t_NUMBER(t):
- r"\d+"
- t.value = int(t.value)
+# order matters! these need to come first!
+def t_BINNUMBER(t):
+ r"0b[01]+"
+ t.value = int(t.value, 2)
+ return t
+
+
+def t_OCTNUMBER(t):
+ r"0[0-9]+"
+ t.value = int(t.value, 8)
return t
@@ -51,8 +60,14 @@ def t_HEXNUMBER(t):
return t
+def t_DECNUMBER(t):
+ r"\d+"
+ t.value = int(t.value)
+ return t
+
+
def t_SYMBOL(t):
- r"[A-Za-z][A-Za-z0-9_]+"
+ r"\b([A-Za-z][A-Za-z0-9_]+)\b"
return t
diff --git a/nandgame/assembler/py_nand_ass/parser.py b/nandgame/assembler/py_nand_ass/parser.py
index 6c7b5eb..0a4aee2 100755
--- a/nandgame/assembler/py_nand_ass/parser.py
+++ b/nandgame/assembler/py_nand_ass/parser.py
@@ -158,8 +158,10 @@ def p_opcode_njmp(p: P) -> None:
def p_number(p: P) -> None:
- """number : SHARP NUMBER
+ """number : SHARP BINNUMBER
+ | SHARP OCTNUMBER
| SHARP HEXNUMBER
+ | SHARP DECNUMBER
"""
p[0] = pt.Immediate(p[2])