【发布时间】:2015-09-12 02:49:48
【问题描述】:
我正在尝试使用 antlr4 使用 C.g4 语法解析 C 文件。
我想知道是否有办法更改解析树节点内的文本,然后从编辑的树开始生成一个新的 .c 文件。
我的目标基本上是将所有函数名替换为<FUNC>
【问题讨论】:
标签: antlr4
我正在尝试使用 antlr4 使用 C.g4 语法解析 C 文件。
我想知道是否有办法更改解析树节点内的文本,然后从编辑的树开始生成一个新的 .c 文件。
我的目标基本上是将所有函数名替换为<FUNC>
【问题讨论】:
标签: antlr4
一个函数名——看起来是一个“标识符”——将被表示为一个 TerminalNode(扩展 ParseTree,它是基本的解析树节点)。所以,在适当的情况下,
TerminalNode id = (TerminalNode) node;
CommonToken token = (CommonToken) id.getSymbol();
token.setText("<FUNC>");
要在保留原始标记文本的同时记录简单的更改,请使用所需的任何附加字段创建自定义标记类型(扩展 CommonToken)。在词法分析器上设置自定义标记工厂以使用自定义标记。见,TokenFactory。
创建解析树后,请对其进行分析和更新自定义标记字段。然后,在遍历解析树以创建新的“.c”文件时,根据上下文写出任何合适的字段。
【讨论】: