グローバル変数と C のバリエーションのいくつかのメソッド宣言を処理する文法があるとします。
program: (declaration)* (procedure)*;
declaration: typespec identifier ';';
procedure: typespec identifier '(' ')' ';';
typespec: 'char' | 'int';
identifier: ('a' .. 'z' | 'A' .. 'Z') ('A' - 'Z' | 'a' .. 'z' | '0' .. '9' | '_')*;
次のようなものを与えると:
int MAX;
char proc();
文法は int MAX を読み取ります。正しく、しかし、宣言ルールを2行目にも適用したいのですが、(に達すると失敗します。この時点で、バックトラックして次のルールである手続き用のルールを適用することを期待しています。誰か教えてください。なぜこれが起こっていないのですか?