我正在尝试实现一个合并不同版本源代码的工具。给定相同源代码的两个版本,想法是解析它们,生成相应的抽象语法树(AST),并最终将它们合并成一个单一的输出源代码,保持语法一致性 - 词法分析器和解析器是问题ANTLR:如何跳过多行注释中的那些。
我知道有一个名为
以下是一个代码片段,演示了我如何修改我的解析器以打印规则:
我知道有一个名为
ParserRuleReturnScope
的类可以帮助……但是getStop()
和getStart()
总是返回null :-(以下是一个代码片段,演示了我如何修改我的解析器以打印规则:
parser grammar CodeTableParser;
options {
tokenVocab = CodeTableLexer;
backtrack = true;
output = AST;
}
@header {
package ch.bsource.ice.parsers;
}
@members {
private void log(ParserRuleReturnScope rule) {
System.out.println("Rule: " + rule.getClass().getName());
System.out.println(" getStart(): " + rule.getStart());
System.out.println(" getStop(): " + rule.getStop());
System.out.println(" getTree(): " + rule.getTree());
}
}
parse
: codeTabHeader codeTable endCodeTable eof { log(retval); }
;
codeTabHeader
: comment CodeTabHeader^ { log(retval); }
;
...