いくつかのソースコードの異なるバージョンをマージするためのツールを実装しようとしています。同じソースコードの2つのバージョンがある場合、それらを解析し、それぞれの抽象ソースツリー(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); }
;
...