C# の文法をデバッグしているときに、非常に異常なことに気付きました。完全な文法では受け入れられない一部の入力が、いくつかの独立した規則が削除された同じ文法で受け入れられています。論理的な説明が見つかりませんでした。例えば:
CS - この文法は入力を受け入れませんa<a<a>><EOF>
CS' - この文法は基本的にCSと同じですが、いくつかの独立した規則が削除されています (規則は並べ替えられません) 受け入れますa<a<a>><EOF>
両方の文法がルールで始まることがわかるstart: namespaceOrTypeName EOF;
ように、同じルール セットを呼び出す必要があります ( CSはCS'で削除されたルールを呼び出すことはありません)。これをデバッグし、新しいルールを削除または追加するのに 1 日を費やしましたが、ロジックに欠陥は見つかりませんでした。どんな助けでも役に立ちます、ありがとう。
EDIT:CSの開始ルールを文法に変更した後、ルールのみが定義されている場合に通常受け入れられるstart: Identifier EOF;
入力を拒否し始めます。したがって、文法をコンパイルした後、この場合「メソッド」などのいくつかのフレーズが予約されるというルールがあるため、そうであるかどうかはまだわかりません。method
Identifier
attributeTarget: ...| 'method' | ...