は、私は、次のANTLRの文法規則があります。私は「3 | 1 | 2 | 6
」を持っている場合ANTLR条件付き書き換え
expression1
: e=expression2 (BINOR^ e2=expression2)*
;
をしかし、これはBINORノードの3, 1, 2, 6
すべての子どもたちと、フラットなツリーになります。私が本当に欲しいのは、これらは2パターンあるように、私は書き換えを変更するにはどうすればよいのいずれか
expression2
or
^(BINOR expression2 expression2)
上のパターンマッチにできるようにするのですか?
編集:私はカスタムの書き換えを使用している場合
、私は
expression1
: e=expression2 (BINOR e2=expression2)*
-> {$BINOR != null}? ^(BINOR $e $e2*)
-> $e
の線に沿って考えています。しかし私はこれを行う際に「1 | 2 | 3」結果のツリーは一つだけを持っていますBINORノードに1と3の2つの子があるため、2がありません。
expression1
@init{boolean or = false;}
: e=expression2 (BINOR {or=true;} expression2)* -> {or}? ^(BINOR expression2+)
-> $e
;
をしかし、それは任意のカスタムコードを使用していないので、これは好ましい::
感謝