summaryrefslogtreecommitdiff
path: root/nandgame/assembler/parser.py
diff options
context:
space:
mode:
authoruvok2026-01-12 19:49:04 +0100
committeruvok2026-01-12 19:52:26 +0100
commit87e878548d475c21999a2be1a0aaa89485d5ede2 (patch)
treeb9be8a85777aadc1593bbc48472dd37e9680de57 /nandgame/assembler/parser.py
parent8912777281a8fee34254d2c070d922836660c208 (diff)
py: Reformat files with black
Diffstat (limited to 'nandgame/assembler/parser.py')
-rwxr-xr-xnandgame/assembler/parser.py64
1 files changed, 40 insertions, 24 deletions
diff --git a/nandgame/assembler/parser.py b/nandgame/assembler/parser.py
index 8925f3f..9e4bf45 100755
--- a/nandgame/assembler/parser.py
+++ b/nandgame/assembler/parser.py
@@ -10,25 +10,30 @@ from lexer import tokens
# Error rule for syntax errors
+
def p_error(p: LexToken):
if p:
print(f"Unexpected {repr(p.value)} on line {p.lineno}")
else:
print("Unexpected end of file.")
+
def p_program(p):
- '''program : instruction_list
- | empty'''
+ """program : instruction_list
+ | empty
+ """
pass
+
def p_empty(p):
- '''empty :'''
+ """empty :"""
pass
+
def p_inss(p):
- '''instruction_list : instruction_list line
+ """instruction_list : instruction_list line
| line
- '''
+ """
if len(p) == 2:
p[0] = [p[1]]
else:
@@ -40,10 +45,11 @@ def p_inss(p):
# print(f" {p[2]}")
pass
+
def p_inss2(p):
- '''instruction_list2 : line instruction_list2
+ """instruction_list2 : line instruction_list2
| line
- '''
+ """
if len(p) == 2:
p[0] = [p[1]]
else:
@@ -55,62 +61,71 @@ def p_inss2(p):
print(f" {p[2]}")
pass
+
def p_line(p):
- '''line : instruction NL
+ """line : instruction NL
| NL
- '''
+ """
if len(p) == 2:
pass
else:
p[0] = p[1]
+
def p_instruction(p):
- '''instruction : noarg
+ """instruction : noarg
| onearg
| twoarg
| jumpdest
| invalid_arg
- '''
- print(f"INS: {p[1]}")
+ """
+ print(f"Item: {p[1]}")
p[0] = p[1]
pass
+
def p_jumpdest(p):
- '''jumpdest : SYMBOL COLON'''
- p[0] = (p[1], )
+ """jumpdest : SYMBOL COLON"""
+ p[0] = (p[1],)
+
def p_twoarg(p):
- '''twoarg : op REG COMMA argument COMMA argument'''
+ """twoarg : op REG COMMA argument COMMA argument"""
p[0] = (*p[1], p[2], p[4], p[6])
pass
+
def p_argument(p):
- '''argument : number
+ """argument : number
| REG
| SYMBOL
- '''
+ """
pass
+
def p_onearg(p):
- '''onearg : op REG COMMA argument'''
+ """onearg : op REG COMMA argument"""
p[0] = (*p[1], p[2], p[4], None)
pass
+
def p_noarg(p):
- '''noarg : op'''
+ """noarg : op"""
p[0] = (*p[1], None, None, None)
pass
+
def p_invalid_arg(p):
- '''invalid_arg : op argument'''
+ """invalid_arg : op argument"""
print(f"Invalid opcode, destination missing: {p[1:]}")
sys.exit(1)
pass
+
def p_op(p):
- '''op : OP DOT JUMP
+ """op : OP DOT JUMP
| OP
- '''
+ """
if len(p) == 2:
p[0] = (p[1], None)
else:
@@ -118,9 +133,10 @@ def p_op(p):
def p_number(p):
- '''number : NUMBER
+ """number : NUMBER
| HEXNUMBER
- '''
+ """
p[0] = p[1]
+
parser = yacc.yacc()