我修改了Porcelli给出的PLSQL解析器。我使用这个解析器来解析PlSql文件。解析成功后,我将打印AST。现在,我想编辑AST并用编辑的信息返回原始的plsql源。我怎样才能做到这一点?如何通过注释、换行符和空格从AST返回源文件。此外,格式化也应保留为原始文件。这方面的任何线索都是有帮助的。
发布于 2014-06-06 07:06:33
AST中的每个节点都带有一个索引成员,它为您提供输入流中的令牌位置(实际上是令牌流)。当您检查AST中的索引时,您将看到并不是所有的索引都出现在那里(出现的索引中有漏洞)。这些位置已经被过滤掉(通常是空格和注释)。
但是,您的输入流可以在给定的索引上给您一个令牌,而且重要的是,可以给您找到的每个令牌,而不管它位于哪个通道。因此,您的策略可以是迭代令牌流中的令牌,并在令牌流出现时打印出来。此外,您还可以检查AST中的当前索引,看看是否必须生成不同的输出,或者必须追加额外的输出。
发布于 2014-06-05 12:45:58
简单的答案是“遍历树,吐出对应于节点的文本”。ANTLR提供"StringTemplates“作为一种基本的帮助,但实际上有很多细节需要解决:缩进、文字及其格式、注释、.
有关更多细节,请参见我在Compiling an AST back to source code上的答案。
有一件事情没有得到解决--通常需要复制文件的原始字符编码(如果可以,有时不能,例如,您有一个ASCII文件,但是插入了一个包含Unicode字符的字符串)。
https://stackoverflow.com/questions/24058834
复制相似问题