bison fin du fichier
Si j'oublie de mettre une ligne vide à la fin de mes fichiers de mon programme obtient une erreur de syntaxe. Le problème, c'est ma grammaire s'attend à un retour à la ligne à la fin de la ligne courante. Depuis un retour à la ligne n'existe pas de bison génère une erreur de syntaxe car il ne se termine pas à la règle.
Comment puis-je résoudre ce problème? J'ai essayé de faire <<EOF>>
retour MY_EOF
MAIS quand je le fais, que lex se bloque une mort horrible. Je pense qu'il y a du code dans son défaut EOF que je ne suis pas d'appel. Je n'ai aucune idée de ce que les fonctions qu'ils peuvent être. À l'aide de EOF créer l'erreur symbol EOF is used, but is not defined as a token and has no rules
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un flex EOF règle pour ajouter une nouvelle ligne à l'entrée:
Dans votre fichier lex
Dans votre fichier yacc
En fait pour attraper la fin de fichier a dans lex|flex, vous pouvez utiliser le
yywrap()
fonction qui est appelée par l'analyseur lexical si la fin du fichier d'entrée est atteint.cette solution est disponible par de lex et flex.le rappel de
yywrap()
indique leEOF
de sorte que vous pouvez ré-écrire cette fonction et injecter le travail que vous devez faire à la fin de votre flux d'entrée.Précédente fonctionne très bien pour moi.
Si vous utilisez C Bizon (pas C++), il suffit d'utiliser la FIN du jeton::FIN et yacc fichier
%token END
Avais une autre question après que, si les macros retour pas YY_NULL, il ne se termine (boucle infinie)
Il peut être résolu comme ceci: