下面是一個說明我的問題的Bison語法。我使用的實際語法比較複雜。野牛:如何解決減少/減少衝突
%glr-parser
%%
s : e | p '=' s;
p : fp | p ',' fp;
fp : 'x';
e : te | e ';' te;
te : fe | te ',' fe;
fe : 'x';
輸入的一些例子是:
x
x = x
x,x = x,x
x,x = x;x
x,x,x = x,x;x,x
x = x,x = x;x
我後是對的「=」左側X的比那些右邊不同解析。然而,可能出現在'=' - 符號右側的法律「表達式」集合大於左側的(由於';')。
野牛打印消息(輸入文件是test.y):
test.y: conflicts: 1 reduce/reduce.
必須有解決這個問題的一些方式。在C中,你有類似的情況。下面的程序通過gcc沒有錯誤。
int main(void) {
int x;
int *px;
x;
*px;
*px = x = 1;
}
在這種情況下,「PX」和「X」得到不同的待遇取決於他們是否出現一個「=」的左邊或右邊 - 標誌。
我沒有看到C如何使用語法來區分左值和右值。從[ ] [C語法](http://www.lysator.liu.se/c/ANSI-C-grammar-y.html)可以得到語句 [CONSTANT = CONSTANT](https:// gist.github.com/toddkfisher/6665271)。 – tkf
@tkf:是的,是的。消除這種推導(以及右值位於賦值左側的其他錯誤)會使語法的顯示覆雜化,但直到區分左值和右值纔有可能。 (與C++不同) – rici