diff options
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() |
