summaryrefslogtreecommitdiff
path: root/nandgame/assembler/lexer.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/lexer.py
parent8912777281a8fee34254d2c070d922836660c208 (diff)
py: Reformat files with black
Diffstat (limited to 'nandgame/assembler/lexer.py')
-rwxr-xr-xnandgame/assembler/lexer.py52
1 files changed, 32 insertions, 20 deletions
diff --git a/nandgame/assembler/lexer.py b/nandgame/assembler/lexer.py
index e716af8..d0c9462 100755
--- a/nandgame/assembler/lexer.py
+++ b/nandgame/assembler/lexer.py
@@ -4,68 +4,79 @@ import ply.lex as lex
# List of token names. This is always required
tokens = (
- 'OP',
- 'JUMP',
- 'COMMA',
- 'COLON',
- 'SYMBOL',
- 'NUMBER',
- 'HEXNUMBER',
- 'DOT',
- 'REG',
- 'NL'
+ "OP",
+ "JUMP",
+ "COMMA",
+ "COLON",
+ "SYMBOL",
+ "NUMBER",
+ "HEXNUMBER",
+ "DOT",
+ "REG",
+ "NL",
)
# Regular expression rules for simple tokens
-t_COMMA = r','
-t_COLON = r':'
-t_DOT = r'\.'
+t_COMMA = r","
+t_COLON = r":"
+t_DOT = r"\."
+
def t_OP(t):
r"mov|and|dec|hlt|add|sub|inc"
return t
+
def t_REG(t):
r"\b(AD?M?|DM?|M|_)\b"
return t
+
def t_JUMP(t):
r"jmp|jlt|jgt|jle|jge|jeq|jne"
return t
+
def t_NUMBER(t):
- r'\#\d+'
+ r"\#\d+"
t.value = int(t.value[1:])
return t
+
def t_HEXNUMBER(t):
- r'\#0x[0-9a-fA-F]+'
+ r"\#0x[0-9a-fA-F]+"
t.value = int(t.value[1:], 16)
return t
+
def t_SYMBOL(t):
- r'[a-z][A-Za-z0-9_]+'
+ r"[a-z][A-Za-z0-9_]+"
return t
+
# Define a rule so we can track line numbers
def t_NL(t):
- r'\n+'
+ r"\n+"
t.lexer.lineno += len(t.value)
return t
+
# A string containing ignored characters (spaces and tabs)
-t_ignore = ' \t'
-#t_ignore_COMMENT = r';.*'
+t_ignore = " \t"
+# t_ignore_COMMENT = r';.*'
+
def t_COMMENT(t):
- r';.*'
+ r";.*"
pass
+
# Error handling rule
def t_error(t):
print("!!! Illegal character '%s'" % t.value[0])
t.lexer.skip(1)
+
# EOF handling rule
def t_eof(t):
if not t.lexer.newline_added:
@@ -74,6 +85,7 @@ def t_eof(t):
return t.lexer.token()
return None
+
# Build the lexer
lexer = lex.lex()
lexer.newline_added = False