4
4
"IDENTIFICADOR" ,
5
5
"NUMERO_ENTERO" ,
6
6
"NUMERO_DECIMAL" ,
7
- "CADENA" ,
8
7
"CARACTER" ,
8
+ "CADENA" ,
9
9
"OPERADOR_SUMA" ,
10
10
"OPERADOR_RESTA" ,
11
11
"OPERADOR_MULTIPLICACION" ,
24
24
"MAYOR_O_IGUAL_QUE" ,
25
25
"MENOR_O_IGUAL_QUE" ,
26
26
"DIFERENTE_DE" ,
27
- "AND" ,
28
- "OR" ,
29
- "NOT" ,
30
- "IF" ,
31
- "ELSE" ,
32
- "WHILE" ,
33
- "FOR" ,
34
- "TRUE" ,
35
- "FALSE" ,
36
- "CLASS" ,
37
- "PUBLIC" ,
38
- "STATIC" ,
39
- "VOID" ,
40
- "RETURN" ,
27
+ "OPERADOR_LOGICO_AND" ,
28
+ "OPERADOR_LOGICO_OR" ,
29
+ "OPERADOR_LOGICO_NOT" ,
41
30
"CORCHETE_IZQUIERDO" ,
42
31
"CORCHETE_DERECHO" ,
32
+ "TIPO_DATO" ,
33
+ "MOD_ACCESO" ,
34
+ "MODIFICADOR" ,
35
+ "TIPO_FUNCION" ,
36
+ "PALABRA_RESERVADA" ,
43
37
)
44
38
39
+ palabrasReservadas = {
40
+ "public" : "MOD_ACCESO" ,
41
+ "static" : "MODIFICADOR" ,
42
+ "void" : "TIPO_FUNCION" ,
43
+ "class" : "PALABRA_RESERVADA" ,
44
+ "if" : "PALABRA_RESERVADA" ,
45
+ "else" : "PALABRA_RESERVADA" ,
46
+ "while" : "PALABRA_RESERVADA" ,
47
+ "for" : "PALABRA_RESERVADA" ,
48
+ "true" : "PALABRA_RESERVADA" ,
49
+ "false" : "PALABRA_RESERVADA" ,
50
+ "float" : "TIPO_DATO" ,
51
+ "System" : "PALABRA_RESERVADA" ,
52
+ "private" : "MOD_ACCESO" ,
53
+ "int" : "TIPO_DATO" ,
54
+ "double" : "TIPO_DATO" ,
55
+ "String" : "TIPO_DATO" ,
56
+ "char" : "TIPO_DATO" ,
57
+ "boolean" : "TIPO_DATO" ,
58
+ "long" : "TIPO_DATO" ,
59
+ "short" : "TIPO_DATO" ,
60
+ "return" : "PALABRA_RESERVADA" ,
61
+ }
62
+
45
63
def t_IDENTIFICADOR (t ):
46
64
r'[a-zA-Z_][a-zA-Z0-9_]*'
65
+ if t .value in palabrasReservadas :
66
+ t .type = palabrasReservadas [t .value ]
47
67
return t
48
68
49
69
def t_NUMERO_ENTERO (t ):
@@ -52,22 +72,22 @@ def t_NUMERO_ENTERO(t):
52
72
return t
53
73
54
74
def t_NUMERO_DECIMAL (t ):
55
- r'\d+\.\d+'
75
+ r'\d+( \.\d+)? '
56
76
t .value = float (t .value )
57
77
return t
58
78
59
- def t_CADENA (t ):
60
- r'\"([^\\\n]|(\\.))*?\" '
61
- t .value = t .value [ 1 : - 1 ]
79
+ def t_CARACTER (t ):
80
+ r'\'(.)\' '
81
+ t .value = t .group ( 1 )
62
82
return t
63
83
64
- def t_CARACTER (t ):
65
- r'\'(.|\n)\' '
84
+ def t_CADENA (t ):
85
+ r'\"([^\\\n]|(\\.))*?\" '
66
86
t .value = t .value [1 :- 1 ]
67
87
return t
68
88
69
89
def t_OPERADOR_SUMA (t ):
70
- r'\+\s+ '
90
+ r'\+'
71
91
return t
72
92
73
93
def t_OPERADOR_RESTA (t ):
@@ -110,6 +130,14 @@ def t_LLAVE_DERECHA(t):
110
130
r'\}'
111
131
return t
112
132
133
+ def t_CORCHETE_IZQUIERDO (t ):
134
+ r'\['
135
+ return t
136
+
137
+ def t_CORCHETE_DERECHO (t ):
138
+ r'\]'
139
+ return t
140
+
113
141
def t_PUNTO_COMA (t ):
114
142
r'\;'
115
143
return t
@@ -150,77 +178,26 @@ def t_DIFERENTE_DE(t):
150
178
r'\!='
151
179
return t
152
180
153
- def t_IF (t ):
154
- r'if'
155
- return t
156
-
157
- def t_ELSE (t ):
158
- r'else'
159
- return t
160
-
161
- def t_WHILE (t ):
162
- r'while'
163
- return t
164
-
165
- def t_FOR (t ):
166
- r'for'
167
- return t
168
-
169
- def t_TRUE (t ):
170
- r'true'
171
- return t
172
-
173
- def t_FALSE (t ):
174
- r'false'
175
- return t
176
-
177
- def t_CLASS (t ):
178
- r'class'
179
- return t
180
-
181
- def t_PUBLIC (t ):
182
- r'public'
183
- return t
184
-
185
- def t_STATIC (t ):
186
- r'static'
187
- return t
188
-
189
- def t_VOID (t ):
190
- r'void'
191
- return t
192
-
193
- def t_RETURN (t ):
194
- r'return'
195
- return t
196
-
197
- def t_CORCHETE_IZQUIERDO (t ):
198
- r'\['
199
- return t
200
-
201
- def t_CORCHETE_DERECHO (t ):
202
- r'\]'
203
- return t
204
-
205
- t_ignore = ' \t \n \[\]'
206
-
207
- def t_COMENTARIO (t ):
208
- r'//.*\n'
209
- pass
210
-
211
181
def t_error (t ):
212
182
print ("Error: caracter desconocido '%s'" % t .value [0 ])
213
183
t .lexer .skip (1 )
184
+
185
+ t_ignore = ' \t \n '
214
186
215
187
Programa = """
216
188
public class HolaMundo {
217
- private int numero = 5;
189
+ private int num = 5;
190
+ public float numero = 3.1;
191
+ System.out.println(numero);
218
192
public static void main(String[] args) {
219
193
Scanner scan = new Scanner(System.in);
220
194
int num = scan.nextInt();
221
195
System.out.println(num);
222
196
System.out.println("Hola mundo!");
223
-
197
+ if(a >= 5 && numero!=0){
198
+ int ab = -23+3*2/34;
199
+ char c = "a";
200
+ }
224
201
}
225
202
}
226
203
"""
0 commit comments