Calc/debug_assignment_problem.py

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()