ANTLRの文法で等しい(ないトークン)。これは何を意味するのでしょうか?

StackOverflow https://stackoverflow.com/questions/2230743

質問

次のルールでは、構築物basename =を何?

tabname:
   (ID'.')? basename = ID
;

basenameのこの単一の発生は文法であります。

おかげ

役に立ちましたか?

解決

という構文で等号を使用すると、その後の行動の中で参照できる変数と呼ばれるbasenameを作成します:

tabname:
    (ID '.')? basename=ID {
        if ($basename.equals("CAT"))
            System.out.println("CAT found");
    };

他のヒント

変数に名前を付けるために使用されます。

あなたはパーサの間にいくつかのコードを実行したい場合、これは非常に役立つことができます。

Javaの電卓の例を考えてみます:

expr returns [float r]
{
float a,b;
r=0;
}
:   #(PLUS a=expr b=expr)   {r = a+b;}
|   #(STAR a=expr b=expr)   {r = a*b;}
|   i:INT           {r = (float)Integer.parseInt(i.getText());}
;

ここでは、我々は2つの表現が続くPLUSまたはSTARトークンを持つツリーと一致したときに、私たちはそれぞれの表現にマッチし、それらにabに名前を付けましょうと言っています。

私たちはJAVA文にマッチしたこれらの変数を使用します後。このステートメントは、{}括弧の中に含まれています。ここでは、実際に計算を行うためにJavaステートメントを使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top