Estoy usando bison + flex para analizar el archivo. Por error, se invoca a yyerror(). ¿Cómo puedo obtener el número de línea o cadena que infringe las reglas para imprimirlo con el mensaje de error?bison/flex: imprimir la línea errónea
Respuesta
El número de línea es fácil: yylineno
es el número de línea. Especifique %option yylineno
en la parte superior de su archivo .l.
Bueno, casi fácil. Lookahead a veces puede hacer que el número de línea se desactive en uno. En lugar de decir algo como "Se produjo un error en la línea #xxx", es posible que desee decir que el error se produjo cerca de la línea #xxx.
En cuanto al resto, depende de usted. Deberá capturar la sintaxis no válida y llamar al controlador de error o advertencia correspondiente. Consulte el libro O'Reilly "flex & bison" para obtener más información; tiene un capítulo completo sobre mensajes de error. Un capítulo entero es demasiado para reproducir en este Q & Un sitio.
yylineno
le da la lineno siendo procesado
También puede que el usuario sepa qué texto dio el error con yytext, en el lado de la flexión:
0|([1-9]{DIG}*) {
String msg("some error with number: "); msg.append(yytext);
yyerror(msg.c_str());
}
yytext sólo contiene el texto para el emparejado regla.
Si desea dar toda la línea tendrá que hacerlo usted mismo, abriendo el archivo buscando la línea número yylineno
e imprimiéndola, un buen lugar para hacerlo es proporcionar su propia implementación de la función yyerror
.
- 1. java CollationKey clasificación errónea
- 2. ¿Cómo puedo imprimir en la misma línea?
- 3. Lua imprimir en la misma línea
- 4. ¿Clase base privada errónea inaccesible?
- 5. Imprimir ">" en cada línea
- 6. Postgres: falta o errónea pg_hba.conf archivo
- 7. cscript - imprimir salida en la misma línea en la consola?
- 8. awk imprimir haciendo coincidir línea y línea antes del
- 9. ¿Qué significa imprimir una línea vacía?
- 10. Firefox: ¿interpretación errónea del modelo de caja?
- 11. desalineamiento de la pila Delphi + clasificación combinada = clasificación errónea
- 12. herramienta de línea de comandos para imprimir la imagen?
- 13. ¿Cómo imprimir un carácter a la vez en una línea?
- 14. ¿Imprimir solo la última línea de un archivo?
- 15. Imprimir en la misma línea y no en una nueva línea en python
- 16. ¿Cómo puedo imprimir sobre la línea actual en una aplicación de línea de comando?
- 17. Django sur: cómo abandonar una migración errónea (y fallida)
- 18. Cómo imprimir cadenas con saltos de línea en java
- 19. ¿Cómo imprimir prolijamente una nueva línea en Groovy?
- 20. Imprimir nueva línea en PHP en comillas simples
- 21. Imprimir nueva línea en TextBlock en Windows 8
- 22. ¿Cómo puedo imprimir una nueva línea correctamente en Haskell?
- 23. Desconocido columna errónea 'lista de campos' en MySQL actualización consulta
- 24. Línea extra en salida al imprimir dentro de un bucle
- 25. Al usar Gnuplot, ¿cómo se puede imprimir la ecuación de una línea en el título de la línea?
- 26. Configuración Visual Studio 2005 para imprimir los números de línea
- 27. Cómo imprimir la matriz?
- 28. Cómo imprimir la dirección de una función?
- 29. Imprimir una matriz de matrices en una línea en la consola (una línea por objeto matriz principal) en Ruby
- 30. Evita imprimir la última coma
Gracias por una respuesta rápida. "En lo que respecta al resto, depende de ti":) bueno, ese es el punto de mi pregunta: ¿cómo capturar la línea violenta? –
@ user497208: Una respuesta tardía a su última pregunta: Usted (inadvertidamente) me está pidiendo que escriba un libro o un capítulo de un libro. Escribir un libro, o incluso un capítulo o sección de un libro, está un poco más allá de los sitios de Q & A de alcance de Internet, como Stack Overflow. Di el nombre de un libro que cubre este tema en detalle. Léelo! –