diff options
Diffstat (limited to 'nandgame/assembler')
| -rw-r--r-- | nandgame/assembler/ex2.asm | 4 | ||||
| -rw-r--r-- | nandgame/assembler/number_test.txt | 5 | ||||
| -rwxr-xr-x | nandgame/assembler/py_nand_ass/lexer.py | 25 | ||||
| -rwxr-xr-x | nandgame/assembler/py_nand_ass/parser.py | 4 |
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]) |
