J'ai modifié l'analyseur PLSQL donné par [Porcelli] (https://github.com/porcelli/plsql-parser). J'utilise cet analyseur pour analyser les fichiers PlSql. Après analyse réussie, j'imprime l'AST. Maintenant, je veux éditer l'AST et réimprimer la source originale de plsql avec l'information éditée. Comment puis-je atteindre cet objectif? Comment puis-je récupérer le fichier source d'AST avec les commentaires, les retours à la ligne et les espaces? En outre, le formatage doit également rester en tant que fichier d'origine. Toute initiative en ce sens serait utile.ANTLR: Générer le fichier source d'origine à partir de AST
Répondre
La réponse simple est "marcher dans l'arbre, et cracher le texte qui correspond aux nœuds". ANTLR offre « StringTemplates » comme une sorte de base de l'aide, mais il y a beaucoup de petits détails qui doit être abordée en fait: indentation, littéraux et leurs formats, commentaires, ...
Voir ma réponse sur SO Compiling an AST back to source code pour plus de détails. Une chose qui n'est pas abordée ici est le besoin général de reproduire le codage de caractères original du fichier (si vous le pouvez, vous ne pouvez pas, par exemple, avoir un fichier ASCII mais insérer une chaîne contenant un caractère Unicode).
Chaque nœud d'un AST est livré avec un membre d'index qui vous donne la position de jeton dans le flux d'entrée (flux de jetons en fait). Lorsque vous examinez les index dans votre AST, vous verrez que tous les index n'apparaissent pas (il y a des trous dans les index). Ce sont les positions qui ont été filtrées (généralement les espaces et les commentaires). Votre flux d'entrée est cependant capable de vous donner un jeton à un index donné et, important, de vous donner chaque jeton trouvé, quel que soit le canal dans lequel il se trouve. Donc, votre stratégie pourrait être de parcourir les jetons depuis votre flux de jeton et imprimez-les au fur et à mesure. En outre, vous pouvez inspecter votre AST pour l'index actuel et voir si à la place, une sortie différente doit être générée ou une sortie supplémentaire doit être ajoutée.
La question est "Comment imprimer la source de l'AST". Vous dites, "itérer sur les jetons ..."; OP suppose raisonnablement que ceux-ci ont disparu. –
@IraBaxter L'OP veut régénérer le code source original + quelques modifications ajoutées à l'AST. Lire entre les lignes. Eh bien, c'est tellement évident, vous n'avez pas besoin de lire entre les lignes en fait ... –
- 1. ANTLR: AST, Java
- 2. antlr générer ast pour c et analyser l'ast
- 3. Générer EBNF à partir de ANTLR
- 4. ANTLR AST et Visitor Pattern
- 5. Générer du javascript à partir de tapuscrit AST?
- 6. Génération d'un arbre de syntaxe abstraite pour le code source Java à l'aide de ANTLR
- 7. règles ANTLR AST échouer avec RewriteEmptyStreamException
- 8. ANTLR: AST et Heterogeneous jetons imaginaires
- 9. Générer Go code source
- 10. ANTLR - Ecrire une grammaire d'arbre pour un AST
- 11. Générer une source .cpp à partir d'un fichier .h
- 12. Visualisation d'un AST créé avec ANTLR (dans un environnement .Net)
- 13. Quelqu'un peut-il m'aider à convertir ce fichier de grammaire ANTLR 2.0 en syntaxe ANTLR 3.0?
- 14. Erreur lors de l'impression AST ANTLR C# grammer
- 15. Règle de réécriture optionnelle pour AST dans ANTLR
- 16. transformer la source de Jython/ast
- 17. question Antlr: ne peut pas obtenir l'outil Antlr compiler simple fichier à partir ANTLRWorks
- 18. Générer le code source à partir d'AST avec Antlr4 et StringTemplates
- 19. Tous les outils pour générer du code JavaScript à partir de AST
- 20. Générer automatiquement le fichier C++ à partir de l'en-tête?
- 21. générer le fichier .ui à partir de fichiers source (.cpp et .h)
- 22. Comment générer du code pour un arbre AST analysé à partir d'un langage fictif?
- 23. Sélectionner le fichier à télécharger à partir de la source
- 24. Générer du code source HTML à partir de DOM DOM
- 25. Code source Java pour tester AST visiteur
- 26. modinfo srcversion: Comment générer ceci à partir de ma source?
- 27. Générer UML à partir de la source Java
- 28. Générer UML à partir de la source Python
- 29. Générer WSDL à partir de la classe java \ source
- 30. Traitement d'un ANTLR n-aire AST un enfant à la fois
De nouvelles lignes/espaces et commentaires esthétiques seront perdus dans l'analyse; vous ne les récupérerez pas de l'AST seul. – Xophmeister
@Xophmeister: il y a beaucoup de choses que vous ne pouvez pas récupérer d'un AST pur. Si vous voulez le récupérer, l'AST doit apporter des informations supplémentaires, qui peuvent être collectées lors de l'analyse. Vois ma réponse. –