-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathanalisador.py
112 lines (96 loc) · 2.67 KB
/
analisador.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
105
106
107
108
109
110
111
112
class Analisador(object):
"""Analisador lexico."""
def __init__(self):
self.tape = ''
self.index = 0
self.tempS = ''
self.tabVar = []
self.output = ''
def isBlank(self):
"""."""
return self.tape[self.index] == ' '
def contain(self):
"""."""
for index, value in enumerate(self.tabVar):
if value == self.tempS:
return index
return -1
def up_index(self):
"""."""
self.index += 1
def tabela(self):
"""."""
for index, value in enumerate(self.tabVar):
print('%s ... %s' % (index, value))
def sigma1(self):
"""."""
self.tempS = self.tape[self.index]
def sigma2(self):
"""."""
self.tempS = self.tempS + self.tape[self.index]
def sigma3(self):
"""."""
if len(self.tabVar) == 0:
self.tabVar.append(self.tempS)
self.output += 'V(%s)' % (len(self.tabVar) - 1)
else:
tmp = self.contain()
if tmp >= 0:
self.output += 'V(%s)' % (tmp)
else:
self.tabVar.append(self.tempS)
self.output += 'V(%s)' % (len(self.tabVar) - 1)
def sigma4(self):
"""."""
self.tempN = int(self.tape[self.index])
def sigma5(self):
"""."""
self.tempN = (self.tempN * 10) + int(self.tape[self.index])
def sigma6(self):
"""."""
self.output += 'N(%s)' % (self.tempN)
def e0(self):
"""."""
if self.index == len(self.tape):
print(self.output)
self.tabela()
elif(self.isBlank()):
self.up_index()
self.e0()
elif self.tape[self.index].isdigit():
self.sigma4()
self.up_index()
self.e2()
elif self.tape[self.index].isalpha():
self.sigma1()
self.up_index()
self.e1()
else:
raise Exception("REJEITADO")
def e1(self):
"""."""
if self.tape[self.index].isdigit() or self.tape[self.index].isalpha():
self.sigma2()
self.up_index()
self.e1()
else:
self.sigma3()
self.e0()
def e2(self):
"""."""
if self.tape[self.index].isdigit():
self.sigma5()
self.up_index()
self.e2()
else:
self.sigma6()
self.e0()
def main(self):
"""."""
self.tape = input("Digite a palavra: ")
self.tape += ' '
self.e0()
input('')
return
analisador = Analisador()
analisador.main()