-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtoken.py
78 lines (59 loc) · 1.22 KB
/
token.py
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
from typing import NamedTuple
tok_types = {
r'[\ \t]+': None,
r'#.*\n': None,
r'\n': 'ENDLINE',
r':': 'COLON',
r'\|': 'BAR',
r'\~': 'NOT',
r'->': 'CAST',
r'\+': 'PLUS',
r'\-': 'MINUS',
r'\*': 'STAR',
r'\/': 'SLASH',
r'\^': 'CARET',
r'\%': 'MOD',
r'\,': 'COMMA',
r'_root': 'ROOT',
r'sqrt': 'SQRT',
r'log_': 'LOG',
r'log': 'LOG_10',
r'ln': 'LN',
r'\(': 'L_PAREN',
r'\)': 'R_PAREN',
r'\{': 'L_BRACE',
r'\}': 'R_BRACE',
r'==': 'EQUAL_EQUAL',
r'!=': 'BANG_EQUAL',
r'<=': 'LESS_EQUAL',
r'>=': 'GREATER_EQUAL',
r'<': 'LESS',
r'>': 'GREATER',
r'and': 'AND',
r'or': 'OR',
r'!': 'BANG',
r'=': 'EQUAL',
r'true': 'TRUE',
r'false': 'FALSE',
r'nil': 'NIL',
r'(str)|(num)|(bool)' : 'KIND',
r'let': 'LET',
r'if': 'IF',
r'else': 'ELSE',
r'while': 'WHILE',
r'fn': 'FUNCTION',
r'return': 'RETURN',
r'print': 'PRINT',
r'input': 'INPUT',
r'import': 'IMPORT',
r'\'(.*?)\'': 'STRING',
r'[A-Za-z\_]+': 'ID',
r'((\d+(\.\d*)?)|(\.\d+))' : 'NUM'
}
class Token(NamedTuple):
value: str
kind: str
def __str__(self):
return '(%s, %s)' % (self.value, self.kind)
def __repr__(self):
return self.__str__()