2012-01-04 7 views
0

:私はこれをコンパイルしようとすると、私が得る、しかしANTLRでより複雑なツリー変換を行う方法は?私は、私は(私は思う)したいASTを、知っている

realias_statement : alias EQUAL rel SEMI_COLON 
       -> ^(STATEMENT alias (FOREACH rel (FOREACH_PLAN_SIMPLE (GENERATE STAR)))) 
; 

^(STATEMENT alias (FOREACH rel (FOREACH_PLAN_SIMPLE (GENERATE STAR)))) 

は、私は次のルールを追加しました次のエラーが...

[java] error(100): src//org/apache/pig/parser/QueryParser.g:174:49: syntax error: antlr: MismatchedTokenException(73!=69) 
[java] error(100): src//org/apache/pig/parser/QueryParser.g:174:51: syntax error: antlr: NoViableAltException([email protected][]) 
[java] error(100): src//org/apache/pig/parser/QueryParser.g:174:95: syntax error: antlr: NoViableAltException([email protected][]) 
[java] error(100): src//org/apache/pig/parser/QueryParser.g:174:97: syntax error: antlr: NoViableAltException([email protected][]) 
[java] error(100): src//org/apache/pig/parser/QueryParser.g:174:99: syntax error: antlr: NoViableAltException([email protected][]) 
[java] error(100): src//org/apache/pig/parser/QueryParser.g:0:1: syntax error: assign.types: MismatchedTreeNodeException(0!=18) 
[java] error(10): internal error: src//org/apache/pig/parser/QueryParser.g : java.lang.NullPointerException 
[java] org.antlr.grammar.v3.DefineGrammarItemsWalker.countAltsForRule(DefineGrammarItemsWalker.java:153) 
[java] org.antlr.grammar.v3.DefineGrammarItemsWalker.rule(DefineGrammarItemsWalker.java:1546) 
[java] org.antlr.grammar.v3.DefineGrammarItemsWalker.rules(DefineGrammarItemsWalker.java:1190) 
[java] org.antlr.grammar.v3.DefineGrammarItemsWalker.grammarSpec(DefineGrammarItemsWalker.java:623) 
[java] org.antlr.grammar.v3.DefineGrammarItemsWalker.grammar_(DefineGrammarItemsWalker.java:275) 
[java] org.antlr.tool.Grammar.defineGrammarSymbols(Grammar.java:748) 
[java] org.antlr.tool.CompositeGrammar.defineGrammarSymbols(CompositeGrammar.java:369) 
[java] org.antlr.Tool.process(Tool.java:465) 
[java] org.antlr.Tool.main(Tool.java:93) 

私は、もちろん、これらのエラーは何を意味するのかを掘り下げていきますが、この種のものを行うことができる場合、私はより一般的な不思議でしたか?私はそれを見たいと思う方法を正確に知っていますが、そのように見えるようにする方法はわかりません。括弧の前^

realias_statement 
: alias EQUAL rel SEMI_COLON 
    -> ^(STATEMENT alias ^(FOREACH rel ^(FOREACH_PLAN_SIMPLE ^(GENERATE STAR)))) 
; 

注:STATEMENTFOREACHFOREACH_PLAN_SIMPLEGENERATE STARを想定すると、

おかげ

+1

これは有効な書き換えルールではありません。 FOREACH、FOREACH_PLAN_SIMPLE、GENERATE、STARとは何ですか? –

+1

@ Adam12、おそらく*仮想トークン*です。参照:http://www.antlr.org/wiki/display/ANTLR3/Tree+construction –

答えて

2

tokens { ... }セクションで定義されている、これは動作するはずです。

関連する問題