Question

Que se produit est il y a un cas spécifique où, après l'analyse de l'AST, je vais savoir s'il y a une erreur ou non lorsque la règle est terminée. J'ai essayé yyerror ( "bla") sans chance.

Parce que je ne peux pas dire qu'il ya une erreur, il se termine une autre règle et dispose désormais d'une réduction / réduire les conflits. Ceci est gênant parce que je sais quand l'un d'eux est invalide sans regarder l'autre, mais l'utilisateur doit souffrir bc je ne sais pas comment dire ignorer cette branche bc son invalide

Comment puis-je résoudre ce problème?

Était-ce utile?

La solution

Vous voulez YYERROR pas yyerror - mettre YYERROR dans une action provoque l'analyseur pour rendre l'action une erreur de syntaxe, et passer en mode de récupération d'erreur (si vous avez des actions de récupération d'erreur dans votre analyseur - sinon cela est plus ou moins équivalente à YYABORT). yyerror est une routine qui appelle bison avec des messages d'erreur - l'implémentation par défaut est d'imprimer le message d'erreur -. mais elle est n'a rien (spécifiquement) avec l'analyse syntaxique ou des erreurs de syntaxe

Notez que cela n'a aucun rapport avec les REDUCE-réduire (ou décalage) réduire les conflits - les conflits ne sont pas des erreurs, ce sont des choses dans votre grammaire qui le rendent non LALR (1), de sorte que le bison généré analyseur peut ne pas reconnaître de manière fiable.

Autres conseils

Vous devez créer une syntaxe qui est libre de réduire / réduire les conflits

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top