我正在尝试实现一个工具来合并某些源代码的不同版本。给定相同源代码的两个版本,我们的想法是解析它们,生成各自的抽象源代码树 (AST),最后将它们合并为一个保持语法一致性的输出源 - 词法分析器和解析器是问题ANTLR:如何跳过多行注释。
我知道有类可以帮助...ParserRuleReturnScope
但总是返回 null :-(getStop()
getStart()
这是一个片段,说明了我如何修改我的 perser 以打印规则:
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); }
;
...