首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ANTLR :从AST生成返回源文件

问ANTLR :从AST生成返回源文件
EN

Stack Overflow用户
提问于 2014-06-05 11:19:09
回答 2查看 636关注 0票数 2

我修改了Porcelli给出的PLSQL解析器。我使用这个解析器来解析PlSql文件。解析成功后,我将打印AST。现在,我想编辑AST并用编辑的信息返回原始的plsql源。我怎样才能做到这一点?如何通过注释、换行符和空格从AST返回源文件。此外,格式化也应保留为原始文件。这方面的任何线索都是有帮助的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-06 07:06:33

AST中的每个节点都带有一个索引成员,它为您提供输入流中的令牌位置(实际上是令牌流)。当您检查AST中的索引时,您将看到并不是所有的索引都出现在那里(出现的索引中有漏洞)。这些位置已经被过滤掉(通常是空格和注释)。

但是,您的输入流可以在给定的索引上给您一个令牌,而且重要的是,可以给您找到的每个令牌,而不管它位于哪个通道。因此,您的策略可以是迭代令牌流中的令牌,并在令牌流出现时打印出来。此外,您还可以检查AST中的当前索引,看看是否必须生成不同的输出,或者必须追加额外的输出。

票数 2
EN

Stack Overflow用户

发布于 2014-06-05 12:45:58

简单的答案是“遍历树,吐出对应于节点的文本”。ANTLR提供"StringTemplates“作为一种基本的帮助,但实际上有很多细节需要解决:缩进、文字及其格式、注释、.

有关更多细节,请参见我在Compiling an AST back to source code上的答案。

有一件事情没有得到解决--通常需要复制文件的原始字符编码(如果可以,有时不能,例如,您有一个ASCII文件,但是插入了一个包含Unicode字符的字符串)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24058834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档