1

ANTLR 3にはかなり基本的な文法があり、次のことを実行しようとしています。-「用語」の前に「+」が表示されている場合は、冗長であるため削除します(完了)。-「term」の前に「-」が表示されている場合はそのままにしますが、最初の子ノードに「0」を追加して、「-2」から「0-2」に効果的に移動できるようにします。

expression:
  unaryterm ((ADD^ | MINUS^) term)*
;

unaryterm:
  (ADD! | MINUS^)? term
;

ツリーの書き換えに挑戦しましたが、可能な「-」のマッチングに関しては行き詰まっているようです。

注:ADDは「+」を表し、MINUSは「-」を表します。

4

1 に答える 1

2

INTEGERそれがリテラルに必要なトークンタイプであると仮定すると0、次を使用できます。

unaryterm
    :   ADD! term
    |   MINUS term -> ^(MINUS INTEGER["0"] term)
    |   term
    ;
于 2013-03-05T16:08:54.257 に答える