更新...私の文法があいまいであることはわかっていますが、この文法を書き直してこのあいまいさをなくすにはどうすればよいですか? ...................
私はこのような文法を持っています:
バイソンファイル
%left equal nEqual
%left gre less greOrEqual lessOrEqual
%left plus sub
%left DIV mult exp mod
%left not
%left leftB rightB
%%
S :
var "=" A ";"
;
A:
Aexp
|Rexp
;
Aexp :
Num
| leftB Aexp rightB
| Aexp plus Aexp
| Aexp sub Aexp
| Aexp DIV Aexp
| Aexp mult Aexp
;
Rexp :
Aexp
| Rexp gre Rexp
| Rexp less Rexp
| Rexp greOrEqual Rexp
| Rexp lessOrEqual Rexp
| Rexp equal Rexp
| Rexp nEqual Rexp
;
これを行うと、1 つのシフト/リデュースと 1 つのリデュース/リデュースの競合が発生します。文法を変更して競合をなくすにはどうすればよいですか?