J'essaie de faire une phase sémantique pour le compilateur c en utilisant lex et yacc. En ce moment, le problème est que si j'ai plusieurs erreurs dans le programme c, il s'arrête après le 1er. Que puis-je faire?Phase sémantique du compilateur
Répondre
Je vous recommande fortement d'effectuer l'analyse sémantique en tant que phase séparée et non en tant que partie de la phase d'analyse. Utilisez YACC seulement pour construire un abstract syntax tree, puis traversez cet arbre dans une fonction séparée. Cette fonction aura une liberté illimitée quand il s'agit de se déplacer dans l'arbre, au lieu d'avoir à "suivre l'analyse". En ce qui concerne le problème spécifique que vous avez mentionné, le commentaire de @ pmg semble avoir mis le doigt sur le problème.
Il n'y a pas de réponse absolue à cette question. Une façon typique de le gérer est de créer un motif spécial pour lire les symboles jusqu'à ce qu'il arrive à (par exemple) un point-virgule à la fin d'une ligne, donnant un signal raisonnable que tout ce qui est après est une nouvelle déclaration, définition, déclaration , etc., puis redémarrez l'analyse à partir de ce point (en conservant suffisamment de contexte pour savoir, par exemple, que vous êtes en train d'analyser un corps de fonction, donc vous acceptez/rejetez l'entrée sur cette base).
- 1. phase sémantique du compilateur c
- 2. Table de symboles et analyse sémantique pour le compilateur
- 3. Obtenir le type de symbole réifié après la phase d'effacement du compilateur Scala 2.9.3
- 4. Commutateur du compilateur pour désactiver la sémantique const_cast dans les distributions de style c?
- 5. HTML5 Sémantique sémantique aide
- 6. Référentiel du service Web sémantique
- 7. C++ Translation Phase Confusion
- 8. Grammaire vs analyse sémantique
- 9. La phase du flash est nulle
- 10. En quoi la phase d'analyse d'un compilateur est-elle différente d'un moteur de règles?
- 11. sémantique Patch
- 12. Portlet - passage du paramètre de la phase de rendu à la phase de ressource
- 13. Utilisation du zoom sémantique dans Windows Phone
- 14. Marquage sémantique
- 15. Modification du compilateur
- 16. Maven erreur du compilateur
- 17. erreur du compilateur Erlang
- 18. Journal du compilateur Netbeans
- 19. erreur du compilateur Fortran
- 20. Suite du compilateur MinGW
- 21. sqlalchemy question du compilateur
- 22. Exception du compilateur JDT
- 23. Optimisation du compilateur PHP
- 24. versions du compilateur
- 25. Erreur du compilateur CS1061
- 26. SSE2 d'erreur du compilateur
- 27. Erreur du compilateur XIB
- 28. Problème du compilateur GCC
- 29. Clojure erreur du compilateur
- 30. erreur du compilateur étrange
Dans votre fichier yacc, supprimez le 'exit (0);' qui est juste après 'printf' avec le message"% s est défini "? – pmg