summaryrefslogtreecommitdiff
path: root/nandgame/assembler/experiments/lexer1.py
blob: 515a792e6ee71d62d8180b0b241b97443bb2ceed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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()