我对 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"))]。
你能告诉如何更改规则以修复此错误吗