¿Existe alguna manera conocida de generar una lista de "Token esperado" cuando ocurre un error de sintaxis? Estoy usando Lemon como generador de analizadores."Token esperado" usando el generador de analizador de limón
Respuesta
Esto parece funcionar:
%syntax_error {
int n = sizeof(yyTokenName)/sizeof(yyTokenName[0]);
for (int i = 0; i < n; ++i) {
int a = yy_find_shift_action(yypParser, (YYCODETYPE)i);
if (a < YYNSTATE + YYNRULE) {
printf("possible token: %s\n", yyTokenName[i]);
}
}
}
Se trata de todas las fichas posibles e imprime las que son aplicables en el estado actual del analizador.
Tenga en cuenta que cuando llega un token incorrecto, el analizador no llama inmediatamente a syntax_error, sino que trata de reducir lo que está en la pila esperando que el token se pueda desplazar posteriormente. Solo cuando no se puede reducir nada más y el token actual no se puede desplazar, el analizador llama syntax_error. Las reducciones cambiarán el estado del analizador, lo que significa que puede ver menos tokens de los que hubieran sido aplicables antes de las reducciones. Sin embargo, debería ser suficiente para informes de errores.
No existe un método directo para generar dicha lista en Limón. Pero puede intentar hacer esto usando la salida de depuración de la herramienta Limpiar y depurar rastros del analizador generado. Después de llamar a ParseTrace, la función generada por el analizador imprime una lista de cambios y reducciones que se aplica a la secuencia de entrada. El último cambio antes de error de sintaxis contiene el número de estado actual antes del error. Encuentre este estado en el archivo * .out para su analizador y vea la lista de tokens esperados para él.
- 1. error: class-name esperado antes de '{' token
- 2. Generador unparser/analizador combinado
- 3. GCC - "esperado ID no calificado antes ')' token"
- 4. Problemas con la gramática de limón (¿prioridad?)
- 5. Generador del analizador de expresiones regulares
- 6. CSS + analizador generador de XHTML, el asesoramiento necesario
- 7. ERROR: "Error de sintaxis en token"; ",, esperado" ¿Por qué?
- 8. Herencia muy básica: error: class-name esperado antes de '{' token
- 9. Constructor esperado, destructor o conversión de tipo antes del token '*'
- 10. error: esperado id no calificado antes de '<' token |
- 11. Desactivación `file` token de tipo PostgreSQL 8.4 tsvector del analizador
- 12. ¿Cuándo es práctico usar un generador de analizador sintáctico?
- 13. ¿Qué generador de analizador para enseñar a mis alumnos?
- 14. Generador de frases usando Thesaurus
- 15. token csrf usando
- 16. Cómo firmar el token X509 usando WCF
- 17. C++: "error: nombre de clase esperado antes de '{' token" al heredar una clase de plantilla
- 18. Recursos en línea para escribir un analizador generador
- 19. python: ¿hay un analizador XML implementado como generador?
- 20. Python: Función para aplanar el generador que contiene otro generador
- 21. Cuándo usar el generador de analizador, ¿cuándo es suficiente la expresión regular?
- 22. Eliminar XML Node usando el analizador de Java
- 23. Usando el analizador Eclipse CDT fuera de CDT
- 24. Javascript generador de análisis
- 25. Diferencia entre el analizador XML SAX, el analizador de arrastre y el analizador DOM en Android
- 26. SBT genera código usando el generador definido por el proyecto
- 27. Resolver la correferencia usando Stanford CoreNLP - incapaz de cargar el analizador modelo
- 28. Analizador de errores Eclipse CDT para generador externo basado en gcc
- 29. ¿Qué es un buen compilador compilador de C#/generador de analizador?
- 30. recursiva Descenso Analizador de EBNF en PHP
¡Exactamente lo que estaba pidiendo! Sin embargo, has olvidado un 'yypParser' como primer parámetro de yy_find_shift_action :) –