-
Notifications
You must be signed in to change notification settings - Fork 1
/
lexAnalysis.py
46 lines (40 loc) · 1.13 KB
/
lexAnalysis.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
import os
import sys
import re
import rules as rule
#
def lexicalAnalysis(file, lex_rule):
file = open(file, encoding="utf8")
characters = file.read()
file.close()
column = 1
line = 1
tokens = []
idx = 0
while (idx < len(characters)):
if characters[idx] == '\n':
line += 1
column = 1
cocok = None
for rule in lex_rule:
identifier, keyword = rule
cocok = re.compile(identifier).match(characters, idx)
if cocok:
if keyword: #biar None (blank space) ga masuk
tokens.append(keyword)
break
if not cocok:
print("SYNTAX ERROR")
print(f"Unindentified character '{characters[idx]}' at line {line} and column {column}")
sys.exit(1)
else:
idx = cocok.end(0)
column += 1
tokenResult = []
for token in tokens:
tokenResult.append(token)
gabung = " ".join(tokenResult)
output_file=open("tokenResult.txt","w")
output_file.write(gabung)
output_file.close
return tokenResult