1

直接実行できる仮想マシン コードに解釈したいスクリプト言語を含むゲーム プロジェクトに取り組んでいます。以下に文法をまとめました。すべてのレクサー ルールは構文図に正しく表示されていますが、いずれかのパーサー ルールの本体をクリックすると、特定のパーサー ルール X に対して「開始状態が見つからないため、ルール "X" を表示できません」というメッセージが表示されます。

なぜ ANTLR が開始状態がないことについて不平を言っているのか、よくわかりません。文法は、他のパーサー規則によって参照されていないコードラインから明確に開始する必要があります。また、右上のボックスは緑色で、構文エラーがないことを示しています。

他のメッセージ ボードの投稿や、ANTLRv3 サンプル文法ダウンロードで提供されている多くの文法をくまなく調べましたが、いずれのパーサー ルールも開始状態であることを ANTLR に示す特別なコードはありません。単純なものが壊れているように感じますが、それが正確に何であるかについては行き詰まっています。

アドバイスや支援をいただければ幸いです。たとえそれが「これを読んでください」という行に沿っているとしても。

grammar RobotWarsGrammar;



EQUAL
options {
    paraphrase = "=";
}
   : '='
   ;
4

1 に答える 1

2

ANTLR 3.x を使用していると仮定します。

すべてのこと:

options {
    paraphrase = ...;
}

スタッフは(AFAIK)古いANTLR 2構文です-削除してみてください。

また、!あなたのcommentルールでは:

comment
  :  !(DIGIT | LETTER | SPACE)*
  ;

ツリー書き換えオペレーターです(チートシートを参照)。ただし、それは次の場合にのみ機能します。

options { 
  output=AST;
}

あなたの文法で(そうではありません)。したがって、それもルール!から削除してください。commentリテラル と一致させたい!場合を除き、その場合は一重引用符で囲む必要があります。

comment
  :  '!' (DIGIT | LETTER | SPACE)*
  ;
于 2010-12-03T21:19:25.987 に答える