這裏衝突的例子是C編譯器的一部分:移位/減少對C語言編譯器
Exp :
INTNUMBER { $$ = $1; }
| lvalue { $$ = $1; }
| REALNUMBER { $$ = $1; }
| CHARVALUE { $$ = $1; }
| TRUE { $$ = $1; }
| FALSE { $$ = $1; }
| Exp '+' Exp { $$ = $1 + $3; }
| Exp '*' Exp { $$ = $1 * $3; }
| Exp '/' Exp { $$ = $1/$3; }
| Exp '-' Exp { $$ = $1 - $3; }
| Exp '%' Exp { $$ = $1 % $3; }
| Exp AND Exp { $$ = $1 && $3; }
| Exp OR Exp { $$ = $1 || $3; }
| Exp LEQ Exp { $$ = $1 <= $3; }
| Exp GEQ Exp { $$ = $1 >= $3; }
| Exp EQ Exp { $$ = $1 == $3; }
| Exp NEQ Exp { $$ = $1 != $3; }
| Exp GE Exp { $$ = $1 > $3; }
| Exp LE Exp { $$ = $1 < $3; }
| '-' Exp %prec UMINUS { $$ = -1 * $2; }
| STRING { $$ = $1; }
| '('Exp')' { $$ = $2; }
| lvalue '=' Exp { $1 = $3; }
| ID'('ExpList')' {printf("Exp");}
;
IDD :
ID { printf("IDD"); }
| IDD '[' Exp ']' {printf("IDD");}
;
ExpList
: { printf("ExpList"); }
ExpPlus {printf("ExpList");}
|
;
ExpPlus :
Exp { printf("Exp\n"); }
| Exp ',' ExpPlus {printf("ExpPlus");}
;
,其中,ID是一個終端(即,C中的ID可以與開始_或[A- 。ZA-Z] 在解析該代碼使用-v標誌野牛,我得到了一個轉變/減少衝突如下:
52 IDD: ID .
78 Exp: ID . '(' ExpList ')'
'(' shift, and go to state 56
'(' [reduce using rule 52 (IDD)]
$default reduce using rule 52 (IDD)
我已經解決了所有的移進/歸約,我遇到迄今衝突。但我無法理解這個問題應該如何解決。
謝謝
爲了回答這個問題,您需要顯示更多的語法。您所展示的摘錄甚至沒有指出在什麼情況下可能會使用「IDD」;此外,衝突最有可能是使用「Exp」的環境的結果,這也是不可見的。 – rici