105 lines
4.2 KiB
Python
105 lines
4.2 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Prueba del caso específico del usuario: m=255.240.0.0 16#ff + 5
|
|
"""
|
|
|
|
if __name__ == "__main__":
|
|
print("🎯 Probando caso específico del usuario")
|
|
|
|
try:
|
|
# Debug completo del sistema
|
|
from type_registry import discover_and_register_types, get_registered_base_context
|
|
from tl_bracket_parser import UniversalTokenizer
|
|
|
|
print("\n🔍 DEBUG COMPLETO DEL SISTEMA:")
|
|
|
|
# 1. Verificar registro de tipos
|
|
print("\n1. Verificando registro de tipos...")
|
|
registry_info = discover_and_register_types()
|
|
print(f"Clases registradas: {registry_info['class_count']}")
|
|
|
|
context = get_registered_base_context()
|
|
fundamental_classes = ['IntBase', 'FourBytes']
|
|
|
|
for cls_name in fundamental_classes:
|
|
if cls_name in context:
|
|
print(f"✅ {cls_name} está registrada")
|
|
cls_obj = context[cls_name]
|
|
if hasattr(cls_obj, 'get_tokenization_patterns'):
|
|
patterns = cls_obj.get_tokenization_patterns()
|
|
print(f" 🔧 Tiene {len(patterns)} reglas de tokenización")
|
|
for i, pattern in enumerate(patterns):
|
|
print(f" {i+1}. Prioridad {pattern['priority']}: {pattern['description']}")
|
|
print(f" Patrón: {pattern['pattern']}")
|
|
else:
|
|
print(f" ❌ Sin reglas de tokenización")
|
|
else:
|
|
print(f"❌ {cls_name} NO está registrada")
|
|
|
|
# 2. Crear tokenizador y verificar reglas
|
|
print("\n2. Creando tokenizador...")
|
|
tokenizer = UniversalTokenizer()
|
|
print(f"Reglas cargadas en tokenizador: {len(tokenizer.tokenization_rules)}")
|
|
|
|
if len(tokenizer.tokenization_rules) > 0:
|
|
print("Reglas activas:")
|
|
for i, rule in enumerate(tokenizer.tokenization_rules):
|
|
print(f" {i+1}. {rule['class_name']} (prioridad {rule['priority']}): {rule['description']}")
|
|
else:
|
|
print("❌ No hay reglas cargadas en el tokenizador")
|
|
|
|
# 3. Probar tokenización manual
|
|
print("\n3. Probando tokenización manual...")
|
|
tokenizer.debug = True
|
|
|
|
test_simple = "192.168.1.1"
|
|
print(f"\nProbando: '{test_simple}'")
|
|
result = tokenizer.preprocess_tokens(test_simple)
|
|
print(f"Resultado: '{result}'")
|
|
|
|
test_hex = "16#ff"
|
|
print(f"\nProbando: '{test_hex}'")
|
|
result = tokenizer.preprocess_tokens(test_hex)
|
|
print(f"Resultado: '{result}'")
|
|
|
|
# 4. Verificar que las clases estén disponibles en motor
|
|
print("\n4. Verificando motor de evaluación...")
|
|
from main_evaluation import HybridEvaluationEngine
|
|
|
|
engine = HybridEvaluationEngine()
|
|
engine.debug = True
|
|
|
|
print(f"Contexto del motor tiene {len(engine.base_context)} entradas")
|
|
|
|
# Verificar que IntBase y FourBytes estén en el contexto
|
|
for cls_name in ['IntBase', 'FourBytes']:
|
|
if cls_name in engine.base_context:
|
|
print(f"✅ {cls_name} está en contexto del motor")
|
|
else:
|
|
print(f"❌ {cls_name} NO está en contexto del motor")
|
|
|
|
# 5. Probar evaluación directa
|
|
print("\n5. Probando evaluación directa...")
|
|
|
|
# Probar evaluación manual sin tokenización
|
|
test_manual = "IntBase('ff', 16)"
|
|
print(f"Probando evaluación manual: {test_manual}")
|
|
try:
|
|
result = engine._eval_in_context(test_manual)
|
|
print(f"✅ Resultado: {result} (tipo: {type(result)})")
|
|
except Exception as e:
|
|
print(f"❌ Error: {e}")
|
|
|
|
# Probar FourBytes manual
|
|
test_manual2 = "FourBytes('192.168.1.1')"
|
|
print(f"Probando evaluación manual: {test_manual2}")
|
|
try:
|
|
result = engine._eval_in_context(test_manual2)
|
|
print(f"✅ Resultado: {result} (tipo: {type(result)})")
|
|
except Exception as e:
|
|
print(f"❌ Error: {e}")
|
|
|
|
except Exception as e:
|
|
print(f"Error: {e}")
|
|
import traceback
|
|
traceback.print_exc() |