Spaces:
Sleeping
Sleeping
Update semantico.py
Browse files- semantico.py +8 -9
semantico.py
CHANGED
@@ -50,19 +50,20 @@ FUNCIONES_VALIDAS = {
|
|
50 |
"WAIT": "Hace una pausa durante X tiempo"
|
51 |
}
|
52 |
|
53 |
-
|
54 |
class AnalizadorSemantico:
|
55 |
def __init__(self, ast):
|
56 |
self.ast = ast
|
57 |
self.tabla_simbolos = {}
|
58 |
self.errores = []
|
|
|
59 |
|
60 |
def analizar(self):
|
61 |
for nodo in self.ast:
|
62 |
self.analizar_instruccion(nodo)
|
63 |
return {
|
64 |
"variables_declaradas": self.tabla_simbolos,
|
65 |
-
"errores_semanticos": self.errores
|
|
|
66 |
}
|
67 |
|
68 |
def analizar_instruccion(self, nodo):
|
@@ -85,9 +86,7 @@ class AnalizadorSemantico:
|
|
85 |
elif tipo in ("if", "while"):
|
86 |
tipo_cond = self.analizar_expresion(nodo["condition"])
|
87 |
if tipo_cond != "boolean":
|
88 |
-
self.errores.append(
|
89 |
-
f"La condici贸n de '{tipo}' debe ser tipo boolean, no '{tipo_cond}'"
|
90 |
-
)
|
91 |
for instr in nodo["body"]:
|
92 |
self.analizar_instruccion(instr)
|
93 |
elif tipo == "function":
|
@@ -129,7 +128,7 @@ class AnalizadorSemantico:
|
|
129 |
|
130 |
descripcion = FUNCIONES_VALIDAS[nombre]
|
131 |
self.anotaciones.append(f"{nombre}: {descripcion}")
|
132 |
-
|
133 |
funciones_sin_argumento = {
|
134 |
"ACTIVATE_ALARM", "ACTIVATE_SENSOR", "BREAK", "CHARGE_BATTERY", "CHECK_BATTERY",
|
135 |
"CLOSE_DOOR", "CONTINUE", "DEACTIVATE_ALARM", "DEACTIVATE_SENSOR", "DECREASE_SPEED",
|
@@ -138,13 +137,13 @@ class AnalizadorSemantico:
|
|
138 |
"TURN_LEFT", "TURN_RIGHT", "TURN_UP", "UNLOCK", "LOG", "INIT", "LOCK", "LOW_BATTERY",
|
139 |
"OPEN_DOOR", "PAUSE"
|
140 |
}
|
141 |
-
|
142 |
funciones_con_argumento = {
|
143 |
"CALIBRATE", "COPY_FILE", "DELETE_FILE", "MOVE_BACKWARD", "MOVE_FORWARD", "MOVE_TO",
|
144 |
"PRINT", "RENAME_FILE", "ROTATE", "SAVE_FILE", "SCAN", "SET", "SET_SPEED", "UPLOAD",
|
145 |
"UPLOAD_FILE", "WAIT"
|
146 |
}
|
147 |
-
|
148 |
if nombre in funciones_sin_argumento:
|
149 |
if arg is not None:
|
150 |
self.errores.append(f"La funci贸n '{nombre}' no debe tener argumentos.")
|
@@ -154,4 +153,4 @@ class AnalizadorSemantico:
|
|
154 |
else:
|
155 |
self.analizar_expresion(arg)
|
156 |
else:
|
157 |
-
self.errores.append(f"Funci贸n '{nombre}' no reconocida.")
|
|
|
50 |
"WAIT": "Hace una pausa durante X tiempo"
|
51 |
}
|
52 |
|
|
|
53 |
class AnalizadorSemantico:
|
54 |
def __init__(self, ast):
|
55 |
self.ast = ast
|
56 |
self.tabla_simbolos = {}
|
57 |
self.errores = []
|
58 |
+
self.anotaciones = []
|
59 |
|
60 |
def analizar(self):
|
61 |
for nodo in self.ast:
|
62 |
self.analizar_instruccion(nodo)
|
63 |
return {
|
64 |
"variables_declaradas": self.tabla_simbolos,
|
65 |
+
"errores_semanticos": self.errores,
|
66 |
+
"anotaciones": self.anotaciones
|
67 |
}
|
68 |
|
69 |
def analizar_instruccion(self, nodo):
|
|
|
86 |
elif tipo in ("if", "while"):
|
87 |
tipo_cond = self.analizar_expresion(nodo["condition"])
|
88 |
if tipo_cond != "boolean":
|
89 |
+
self.errores.append(f"La condici贸n de '{tipo}' debe ser tipo boolean, no '{tipo_cond}'")
|
|
|
|
|
90 |
for instr in nodo["body"]:
|
91 |
self.analizar_instruccion(instr)
|
92 |
elif tipo == "function":
|
|
|
128 |
|
129 |
descripcion = FUNCIONES_VALIDAS[nombre]
|
130 |
self.anotaciones.append(f"{nombre}: {descripcion}")
|
131 |
+
|
132 |
funciones_sin_argumento = {
|
133 |
"ACTIVATE_ALARM", "ACTIVATE_SENSOR", "BREAK", "CHARGE_BATTERY", "CHECK_BATTERY",
|
134 |
"CLOSE_DOOR", "CONTINUE", "DEACTIVATE_ALARM", "DEACTIVATE_SENSOR", "DECREASE_SPEED",
|
|
|
137 |
"TURN_LEFT", "TURN_RIGHT", "TURN_UP", "UNLOCK", "LOG", "INIT", "LOCK", "LOW_BATTERY",
|
138 |
"OPEN_DOOR", "PAUSE"
|
139 |
}
|
140 |
+
|
141 |
funciones_con_argumento = {
|
142 |
"CALIBRATE", "COPY_FILE", "DELETE_FILE", "MOVE_BACKWARD", "MOVE_FORWARD", "MOVE_TO",
|
143 |
"PRINT", "RENAME_FILE", "ROTATE", "SAVE_FILE", "SCAN", "SET", "SET_SPEED", "UPLOAD",
|
144 |
"UPLOAD_FILE", "WAIT"
|
145 |
}
|
146 |
+
|
147 |
if nombre in funciones_sin_argumento:
|
148 |
if arg is not None:
|
149 |
self.errores.append(f"La funci贸n '{nombre}' no debe tener argumentos.")
|
|
|
153 |
else:
|
154 |
self.analizar_expresion(arg)
|
155 |
else:
|
156 |
+
self.errores.append(f"Funci贸n '{nombre}' no reconocida.")
|