37

ANTLR と ANTLRWorks 2 を使用して初めての文法を作成しています。文法自体はほぼ完成しています (記述された言語で記述されたコードを認識し、正しい構文木を構築します)。

私が心配しているのは、パーサー規則でトークンが最初に出現するたびに、「パーサー規則での暗黙のトークン定義」という黄色の波線で下線が引かれていることです。

たとえば、このルールで'var'は、波線があります。

variableDeclaration: 'var' IDENTIFIER ('=' expression)?;

正確にどのように見えるか:

ここに画像の説明を入力

奇妙なことに、ANTLR 自体はこれらのルールを気にしていないようです (テスト リグのテストを行っているとき、パーサー ジェネレーターの出力にこれらの警告が表示されません。マシンにインストールされている Java バージョンが正しくないということだけです)。 ANTLRWorks が不平を言っているだけです。

心配する必要がありますか、それともこれらの警告を無視する必要がありますか? すべてのトークンをレクサー規則で明示的に宣言する必要がありますか? 公式バイブルThe Defintive ANTLR Reference のほとんどの例は、私がコードを書いた方法とまったく同じように行われているようです。

4

2 に答える 2

30

重要なコードでこの警告のすべてのインスタンスを修正することを強くお勧めします。

この警告は、次のような状況を警告するために (実際には私によって) 作成されました。

shiftExpr : ID (('<<' | '>>') ID)?;

<<ANTLR 4 では、アクション コードを文法に直接埋め込むのではなく、ターゲット言語の個別のファイルに記述することを推奨しているため、とを区別できることが重要>>です。これらの演算子に対してトークンが明示的に作成されていない場合、トークンには任意の型が割り当てられ、それらを参照するための名前付き定数は使用できません。

この警告は、次の問題を回避するのにも役立ちます。

  • パーサー ルールにスペルミスのあるトークン参照が含まれています。警告がなければ、これにより、一致しない可能性のある追加のトークンがサイレントに作成される可能性があります。
  • パーサー ルールに、次のような意図しないトークン参照が含まれています。

    number : zero | INTEGER;
    zero   : '0'; // <-- this implicit definition causes 0 to get its own token
    
于 2013-04-19T13:34:17.957 に答える
2

複数のパーサー文法で使用されない字句解析文法を作成している場合は、ANTLRWorks2 によって表示されるこの警告を無視できます。

于 2013-04-19T13:11:12.807 に答える