summaryrefslogtreecommitdiff
path: root/nandgame/assembler/experiments/lexer1.py
diff options
context:
space:
mode:
Diffstat (limited to 'nandgame/assembler/experiments/lexer1.py')
-rw-r--r--nandgame/assembler/experiments/lexer1.py52
1 files changed, 52 insertions, 0 deletions
diff --git a/nandgame/assembler/experiments/lexer1.py b/nandgame/assembler/experiments/lexer1.py
new file mode 100644
index 0000000..515a792
--- /dev/null
+++ b/nandgame/assembler/experiments/lexer1.py
@@ -0,0 +1,52 @@
+# lexer.py
+import ply.lex as lex
+
+tokens = (
+ "MOV",
+ "ADD",
+ "JMP",
+ "REGISTER",
+ "NUMBER",
+ "IDENT",
+ "COMMA",
+ "COLON",
+)
+
+t_COMMA = r","
+t_COLON = r":"
+
+t_MOV = r"mov"
+t_ADD = r"add"
+t_JMP = r"jmp"
+
+
+def t_REGISTER(t):
+ r"[A-Z]"
+ return t
+
+
+def t_NUMBER(t):
+ r"\#[0-9]+"
+ t.value = int(t.value[1:])
+ return t
+
+
+def t_IDENT(t):
+ r"[a-zA-Z_][a-zA-Z0-9_]*"
+ return t
+
+
+t_ignore = " \t"
+
+
+def t_newline(t):
+ r"\n+"
+ lexer.lineno += 1
+ pass
+
+
+def t_error(t):
+ raise SyntaxError(f"Illegal character {t.value[0]!r}")
+
+
+lexer = lex.lex()