【发布时间】:2012-10-15 08:49:54
【问题描述】:
我正在尝试实现一种工具来合并某些源代码的不同版本。给定相同源代码的两个版本,我们的想法是解析它们,生成各自的抽象源树(AST),最后将它们合并成一个保持语法一致性的输出源——词法分析器和解析器是问题@987654321 @。
我知道 ParserRuleReturnScope 有帮助...但是 getStop() 和 getStart() 总是返回 null :-(
这是一个 sn-p,它说明了我如何修改我的 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); }
;
...
【问题讨论】:
-
我认为您需要更多信息才能合并。就像一个共同的祖先版本,或者至少是被删除、添加或修改的版本。
-
也许稍后......但现在该工具应该只是:1)保持公共部分原样; 2) 从最新的源版本中进行修改; 3) 保留两个源版本的非通用部分。就是这样。
-
查看我帖子的更新了解更多详情。
标签: java parsing antlr abstract-syntax-tree lexer