У меня проблема с приоритетом правил в конвертере bnf. Здесь я копирую некоторые правила
CParams. CallParams ::= [CallParam] ;
separator CallParam "," ;
VarCParam. CallParam ::= Ident ;
ExpCParam. CallParam ::= Exp ;
BExpCParam. CallParam ::= BExp ;
[...]
EVar. Exp3 ::= Ident ;
[...]
BVar. BExp2 ::= Ident ;
Пишу пример программы:
void p(int a) {
a = a+7;
print a;
}
main() {
int i;
p(i);
}
В результате я ожидаю, что p(i) будет переведено в CParams [VarCParam (Ident "i")], но оно будет преобразовано в CParams [BExpCParam (BVar (Ident "i"))].
Не подскажете, как изменить правила, чтобы исправить эту ошибку?