99 lines
3.7 KiB
Python
99 lines
3.7 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Diagnóstico del problema de asignaciones
|
|
"""
|
|
|
|
if __name__ == "__main__":
|
|
print("🔍 DIAGNOSTICANDO PROBLEMA DE ASIGNACIONES")
|
|
print("=" * 60)
|
|
|
|
try:
|
|
from main_evaluation import HybridEvaluationEngine
|
|
from tl_bracket_parser import UniversalTokenizer
|
|
|
|
# Crear motor de evaluación
|
|
engine = HybridEvaluationEngine()
|
|
engine.debug = True # Activar debug completo
|
|
|
|
# Crear tokenizador para ver qué pasa
|
|
tokenizer = UniversalTokenizer()
|
|
tokenizer.debug = True
|
|
|
|
# Casos de prueba exactos del usuario
|
|
test_cases = [
|
|
"mask=255.240.0.3",
|
|
"mask",
|
|
"ip=10.1.1.1",
|
|
"10.1.1.1",
|
|
"ip"
|
|
]
|
|
|
|
print("\n🧪 Procesando casos de prueba del usuario:")
|
|
|
|
for i, case in enumerate(test_cases, 1):
|
|
print(f"\n{'='*50}")
|
|
print(f"CASO {i}: '{case}'")
|
|
print(f"{'='*50}")
|
|
|
|
# 1. Ver tokenización
|
|
tokenized = tokenizer.preprocess_tokens(case)
|
|
print(f"1. TOKENIZACIÓN: '{case}' → '{tokenized}'")
|
|
|
|
# 2. Ver clasificación de línea
|
|
classification = engine._classify_line(tokenized)
|
|
print(f"2. CLASIFICACIÓN: {classification}")
|
|
|
|
# 3. Evaluar con debug
|
|
print(f"3. EVALUACIÓN:")
|
|
result = engine.evaluate_line(case)
|
|
|
|
print(f" RESULTADO:")
|
|
print(f" - Tipo de resultado: {result.result_type}")
|
|
print(f" - Es error: {result.is_error}")
|
|
if result.is_error:
|
|
print(f" - Error: {result.error}")
|
|
else:
|
|
print(f" - Valor: {result.result}")
|
|
print(f" - Tipo de valor: {type(result.result)}")
|
|
|
|
# 4. Ver estado de variables
|
|
print(f"4. ESTADO DE VARIABLES:")
|
|
print(f" Variables en symbol_table: {list(engine.symbol_table.keys())}")
|
|
for var_name, var_value in engine.symbol_table.items():
|
|
print(f" {var_name} = {var_value} (tipo: {type(var_value)})")
|
|
|
|
# 5. Ver ecuaciones
|
|
print(f"5. ECUACIONES ALMACENADAS:")
|
|
print(f" Total ecuaciones: {len(engine.equations)}")
|
|
for j, eq in enumerate(engine.equations):
|
|
print(f" {j+1}. {eq}")
|
|
|
|
print(f"\n{'_'*50}")
|
|
|
|
# 6. Prueba manual de asignación directa
|
|
print(f"\n🔧 PRUEBA MANUAL DE ASIGNACIÓN DIRECTA:")
|
|
|
|
try:
|
|
# Probar evaluación manual del lado derecho
|
|
print(f"6.1 Evaluando 'FourBytes(\"255.240.0.3\")' directamente:")
|
|
manual_result = engine._eval_in_context('FourBytes("255.240.0.3")')
|
|
print(f" Resultado: {manual_result} (tipo: {type(manual_result)})")
|
|
|
|
# Probar asignación manual
|
|
print(f"6.2 Asignación manual 'test_var = FourBytes(\"255.240.0.3\")':")
|
|
exec_result = engine._eval_in_context('test_var = FourBytes("255.240.0.3")')
|
|
print(f" Resultado exec: {exec_result}")
|
|
|
|
# Ver si se guardó
|
|
test_var_value = engine.get_variable('test_var')
|
|
print(f" test_var guardada: {test_var_value} (tipo: {type(test_var_value)})")
|
|
|
|
except Exception as e:
|
|
print(f" Error en prueba manual: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
|
|
except Exception as e:
|
|
print(f"Error general: {e}")
|
|
import traceback
|
|
traceback.print_exc() |