diff options
| author | uvok | 2026-01-12 19:36:04 +0100 |
|---|---|---|
| committer | uvok | 2026-01-12 19:36:04 +0100 |
| commit | 3d8c953f57d68b1db169554a22c21819ef4690c1 (patch) | |
| tree | c9ec41f3a564fec08df6e4ab3f803e36985c4862 /nandgame/assembler/experiments/lexer1.py | |
| parent | 126f8afd68fd590ba96d6c94667b6fc29f89bbb2 (diff) | |
Add previous parser experiments
Diffstat (limited to 'nandgame/assembler/experiments/lexer1.py')
| -rw-r--r-- | nandgame/assembler/experiments/lexer1.py | 52 |
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() |
