-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathanalisis.py
More file actions
144 lines (119 loc) · 1.74 KB
/
analisis.py
File metadata and controls
144 lines (119 loc) · 1.74 KB
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
import ply.lex as lex
# list of tokens
tokens = (
# Reserverd words
'ELSE',
'IF',
'INT',
'RETURN',
'VOID',
'WHILE',
# Symbols
'PLUS',
'MINUS',
'TIMES',
'DIVIDE',
'LESS',
'LESSEQUAL',
'GREATER',
'GREATEREQUAL',
'EQUAL',
'DEQUAL',
'DISTINT',
'SEMICOLON',
'COMMA',
'LPAREN',
'RPAREN',
'LBRACKET',
'RBRACKET',
'LBLOCK',
'RBLOCK',
# Others
'ID',
'NUMBER',
)
# Regular expressions rules for a simple tokens
t_PLUS = r'\+'
t_MINUS = r'-'
t_TIMES = r'\*'
t_DIVIDE = r'/'
t_EQUAL = r'='
t_LESS = r'<'
t_GREATER = r'>'
t_SEMICOLON = ';'
t_COMMA = r','
t_LPAREN = r'\('
t_RPAREN = r'\)'
t_LBRACKET = r'\['
t_RBRACKET = r'\]'
t_LBLOCK = r'{'
t_RBLOCK = r'}'
def t_ELSE(t):
r'else'
return t
def t_IF(t):
r'if'
return t
def t_INT(t):
r'int'
return t
def t_RETURN(t):
r'return'
return t
def t_VOID(t):
r'void'
return t
def t_WHILE(t):
r'while'
return t
def t_NUMBER(t):
r'\d+'
t.value = int(t.value)
return t
def t_ID(t):
r'\w+(_\d\w)*'
return t
def t_LESSEQUAL(t):
r'<='
return t
def t_GREATEREQUAL(t):
r'>='
return t
def t_DEQUAL(t):
r'=='
return t
def t_DISTINT(t):
r'!='
return t
def t_newline(t):
r'\n+'
t.lexer.lineno += len(t.value)
t_ignore = ' \t'
def t_comments(t):
r'/\*(.|\n)*?\*/'
t.lexer.lineno += t.value.count('\n')
def t_comments_C99(t):
r'//(.)*?\n'
t.lexer.lineno += 1
def t_error(t):
print "Lexical error: " + str(t.value[0])
t.lexer.skip(1)
def test(data, lexer):
lexer.input(data)
while True:
tok = lexer.token()
if not tok:
break
print tok
lexer = lex.lex()
# Test
if __name__ == '__main__':
archi=open('eje.txt','r')
line=""
for linea in archi:
line=line+linea
archi.close()
print line
# Build lexer and try on
lexer.input(line)
test(line, lexer)