diff options
| author | uvok | 2026-01-16 12:50:27 +0100 |
|---|---|---|
| committer | uvok | 2026-01-16 12:50:27 +0100 |
| commit | 63601830da505314839ebe4edbcf6c88af16c69b (patch) | |
| tree | 1bfec4c20c46cac4d89986f74e077bad167b03a2 /nandgame/assembler/py_nand_ass | |
| parent | d7dfbe810354335ca39c8d14013782b7e8152fd3 (diff) | |
parser: Add support for bin,oct and fix hex nums
Diffstat (limited to 'nandgame/assembler/py_nand_ass')
| -rwxr-xr-x | nandgame/assembler/py_nand_ass/lexer.py | 25 | ||||
| -rwxr-xr-x | nandgame/assembler/py_nand_ass/parser.py | 4 |
2 files changed, 23 insertions, 6 deletions
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]) |
