parsing - ANTLR : Generate back source file from AST

标签 parsing plsql antlr antlr3 abstract-syntax-tree

我修改了 [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/

相关文章:

C++ 目标用简单的语法 T.g 抛出错误

c - 如何用 Parson 构造 JSON 数组?

oracle - PL/SQL 堆栈跟踪最大大小 (Oracle 11g)

c++ - 解析器帮助程序不工作

regex - 匹配字符列表中的 PL/SQL 正则表达式破折号和括号

sql - 选择存储过程 plsql

java - 给定ANTLR java语法获取java源方法名称列表?

java - ANTLR 不匹配输入错误

c - 使用 pthreads 计算多个网页中 anchor 标记的数量

parsing - 词法分析器和解析器的职责