#!/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()