Предположим, у меня есть грамматика, которая заботится о глобальных переменных, и некоторые объявления методов некоторого варианта 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-й строке, и он не работает, когда достигает (и в этот момент я ожидаю, что он откатится назад и применит следующее правило, которое относится к процедуре. Может кто-нибудь сказать мне почему этого не происходит?