forked from arleenchr/IF2124-Tugas-Besar
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtoken.py
104 lines (86 loc) · 3.02 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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
global list_token
list_token = [
(r'[ \t]+', None), # tab
(r'\/\/[^\n]*', None), # comment single line
(r'[\t]*\/\*[\w\W]*\*\/', None), # comment multi lines
# Integer and String
(r'\"[^\"\n]*\"', "STRING"), # pakai petik dua
(r'\'[^\'\n]*\'', "STRING"), # pakai petik satu
(r'[\+\-]?[0-9]*\.[0-9]+', "FLOAT"), # angka desimal
(r'[\+\-]?[0-9]+', "INT"), # angka bulat
# Delimiter
(r'\n', "NEWLINE"),
(r'\(', "OP_ROUND_BRACKET"),
(r'\)', "CL_ROUND_BRACKET"),
(r'\[', "OP_SQUARE_BRACKET"),
(r'\]', "CL_SQUARE_BRACKET"),
(r'\{', "OP_CURLY_BRACKET"),
(r'\}', "CL_CURLY_BRACKET"),
(r'\;', "TITIKKOMA"),
(r'\:', "TITIKDUA"),
(r'\,', "KOMA"),
(r'\.', "TITIK"),
# Comparison Operators
(r'<=', "LEQ"), # less equal
(r'<', "LESS"), # less
(r'>=', "GEQ"), # greater equal
(r'>', "GREATER"), # greater
(r'!==', "ISNEQTYPE"), # !==
(r'!=', "ISNEQ"), # !=
(r'===', "ISEQTYPE"), # ===
(r'==', "ISEQ"), # ==
(r'=', "EQ"), # ==
(r'\?', "TERNARY"), # ? ternary operator
(r'\+=', "TAMBAHSD"), # tambah sama dengan -> +=
(r'\-=', "KURANGSD"), # kurang sama dengan -> -=
(r'\*=', "KALISD"), # kali sama dengan -> *=
(r'\/=', "BAGISD"), # bagi sama dengan -> /=
(r'\%=', "MODSD"), # mod sama dengan -> %=
(r'\*\*=', "PANGKATSD"), # pangkat sama dengan -> **=
(r'\+\+', "INCREMENT"),
(r'\-\-', "DECREMENT"),
# Arithmetic Operators
(r'\+', "TAMBAH"),
(r'\-', "KURANG"),
(r'\*', "KALI"),
(r'\/', "BAGI"),
(r'\%', "MOD"),
(r'\*\*', "PANGKAT"),
# Logical Operators
(r'&&', "AND"),
(r'\|\|', "OR"),
(r'!', "NOT"),
# Keyword
(r'\blet\b', "LET"),
(r'\bvar\b', "VAR"),
(r'\bconst\b', "CONST"),
(r'\btrue\b', "TRUE"),
(r'\bfalse\b', "FALSE"),
(r'\bnull\b', "NULL"),
(r'\bdelete\b', "DELETE"),
(r'\bif\b', "IF"),
(r'\belse\b', "ELSE"),
(r'\bswitch\b', "SWITCH"),
(r'\bcase\b', "CASE"),
(r'\bdefault\b', "DEFAULT"),
(r'\bwhile\b', "WHILE"),
(r'\bfor\b', "FOR"),
(r'\bcontinue\b', "CONTINUE"),
(r'\bbreak\b', "BREAK"),
(r'\bfunction\b', "FUNCTION"),
(r'\breturn\b', "RETURN"),
(r'\btry\b', "TRY"),
(r'\bcatch\b', "CATCH"),
(r'\bfinally\b', "FINALLY"),
(r'\bthrow\b', "THROW"),
(r'\bnull\b', "NULL"),
(r'\bobject\b', "TYPE"),
(r'\bint\b', "TYPE"),
(r'\bstr\b', "TYPE"),
(r'\bfloat\b', "TYPE"),
(r'[A-Za-z_][A-Za-z0-9_]*', "ID"),
(r'\$[A-Za-z_][A-Za-z0-9_]*', "ID"),
(r'\_[A-Za-z_][A-Za-z0-9_]*', "ID"),
(r'\/\/[^\n]*', "SINGLELINE"),
(r'\/\*[(?!(\"\"\"))\w\W]*\*\/', "MULTILINE")
]