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"))] に変換されます。
このバグを修正するためにルールを変更する方法を教えてください