6

私はカレットの接尾辞がantlrで何を意味するかを知っています(つまり、ルートを作る)が、私が読んでいる次の文法のようにカレットが接頭辞である場合はどうですか(この文法は真新しく、antlrを学ぶ新しいチームによって行われます)。 ..

selectClause
    : SELECT resultList -> ^(SELECT_CLAUSE resultList) 
    ;


fromClause
    : FROM tableList -> ^(FROM_CLAUSE tableList) 
    ;

また、=>の意味はわかっていますが、->はどうですか?->は何を意味しますか?

ありがとう、ディーン

4

1 に答える 1

7

^インラインツリー演算子として使用され、特定のトークンがツリーのルートになる必要があることを示します。

たとえば、ルールは次のとおりです。

p : A B^ C;

次のASTを作成します。

  B
 / \
A   C

書き換えルールを使用してASTを作成する別の方法があります。書き換えルールは、パーサールールの代替の後に(またはその右側に)配置されます。「矢印」で書き換えルールを開始し->、その後にASTに含めるルール/トークンを続けます。

前のルールを取ります:

p : A B C;

トークンを逆にしたいが、ASSTを「フラット」(ルートノードなし)に保ちます。これは、次の書き換えルールを使用して実行できます。

p : A B C -> C B A;

また、のようなASTを作成する場合は、かっこ内の最初のトークン/ルールがルートノードになる場所から書き換えルールp : A B^ C;開始します。したがって、ルール:^( ... )

p : A B C -> ^(B A C);

と同じASTを生成しp : A B^ C;ます。


関連している:

于 2012-07-06T18:16:01.007 に答える