Si olvido poner una línea vacía al final de cualquiera de mis archivos, mi programa obtiene un error de sintaxis. El problema es que mi gramática espera una nueva línea para finalizar la línea actual. Como no existe una nueva línea, bison genera un error de sintaxis porque no termina la regla.bison final del archivo
¿Cómo soluciono esto? Traté de hacer <<EOF>>
devolver MY_EOF
PERO cuando lo hago, Lex se bloquea una muerte horrible. Supongo que hay un código en su EOF predeterminado que no estoy llamando. No tengo idea de qué funciones pueden ser. El uso de EOF crear el error symbol EOF is used, but is not defined as a token and has no rules
Gran truco de magia, funciona para mí. – blueshift
Tenga en cuenta que si desea hacer esto en un lector reentrante, en su lugar debe usar '{static int once = 0; volver (una vez =! una vez)? NEWLINE: 0; } 'dado que, de lo contrario, el primer archivo evitará que se reconozcan nuevas líneas en futuras invocaciones. –
@ Hach-Que Buen punto - en ese caso, use: '{if (! Yyextra-> eof) {yyextra-> eof = true; regresar NEWLINE; } else {yyterminate(); }} 'y agrega un campo 'eof' a tu contexto. – nevelis