私は奇妙な現象に悩まされています:
結果の AST では、 の最初の だけx
がz: x | '<'! y? '>'
発生y: x (','! x)*
します。ただし、Maven リポジトリにデプロイされた Antlr3 を使用してコードをコンパイルした場合に限ります。AntlrWorks を使用すると、正しいツリーが表示されます。
b: a a*; c: d b? d;
意味的に間違っていますか?私は何を間違っていますか?それとも、単に Antlr にエラーがあるのでしょうか?
より完全な例が必要な場合 (私の問題は、try_ の $v2 で発生します):
variables
: annotatedVariable
-> ^(VARIABLES annotatedVariable)
| v='<' annotatedVariableList? '>'
-> ^(VARIABLES[$v] annotatedVariableList?)
;
annotatedVariableList
: annotatedVariable (','! annotatedVariable)*
;
try_
: v='try' e1=expression 'of' v1=variables '->' e2=expression
'catch' v2=variables '->' e3=expression
-> ^(TRY[$v] $e1 $v1 $e2 $v2 $e3)
;
(完全なソースと入力ファイルの例: https://gist.github.com/1004329。ツリーには in catch の T のみが存在しますが、AntlrWorks には T と R の両方が表示されます。)