我修改了 [Porcelli] ( https://github.com/porcelli/plsql-parser ) 给出的 PLSQL 解析器。我正在使用这个解析器来解析 PlSql 文件。成功解析后,我正在打印 AST。现在,我想编辑 AST 并打印回带有编辑信息的原始 plsql 源。我怎样才能实现这个目标?如何从 AST 获取带有注释、换行符和空格的源文件。另外,格式也应保留为原始文件。 任何对此的引导都会有所帮助。
最佳答案
AST 中的每个节点都带有一个索引成员,它为您提供输入流(实际上是 token 流)中的 token 位置。当您检查 AST 中的索引时,您会发现并非所有索引都出现在那里(出现的索引中存在漏洞)。这些是已被过滤掉的位置(通常是空格和注释)。
但是,您的输入流能够为您提供给定索引处的 token ,并且重要的是,为您提供每个找到的 token ,无论它位于哪个 channel 。因此,您的策略可能是迭代您的 token token 流并在出现时将其打印出来。此外,您可以检查 AST 的当前索引,看看是否必须生成不同的输出或必须附加其他输出。
关于parsing - ANTLR : Generate back source file from AST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24058834/