的語法如下:野牛移減少衝突 - 無法解析
1. program -> declaration-list
2. declaration-list -> declaration-list declaration | declaration
3. declaration -> var-declaration | fun-declaration
4. var-declaration -> type-specifier ID ; | type-specifier ID [ NUM ] ;
5. type-specifier -> int | void
6. fun-declaration -> type-specifier ID (params) compound-stmt
7. params -> param-list | void
8. param-list -> param-list , param | param
9. param -> type-specifier ID | type-specifier ID [ ]
10. compound-stmt -> { local-declarations statement-list }
11. local-declarations -> local-declarations var-declarations | empty
12. statement-list -> statement-list statement | empty
13. statement -> expression-stmt | compound-stmt | selection-stmt |
iteration-stmt | return-stmt
14. expression-stmt -> expression ; | ;
15. selection-stmt -> if (expression) statement |
if (expression) statement else statement
16. iteration-stmt -> while (expression) statement
17. return-stmt -> return ; | return expression ;
18. expression -> var = expression | simple-expression
19. var -> ID | ID [ expression ]
20. simple-expression -> additive-expression relop additive-expression |
additive-expression
21. relop -> <= | < | > | >= | == | !=
22. additive-expression -> additive-expression addop term | term
23. addop -> + | -
24. term -> term mulop factor | factor
25. mulop -> * |/
26. factor -> (expression) | var | call | NUM
27. call -> ID (args)
28. args -> arg-list | empty
29. arg-list -> arg-list , expression | expression
移位減少衝突中,我通過野牛得到-d -v xyz.l處於狀態97
state 97
29 selection-stmt: IF LFT_BRKT expression RGT_BRKT statement .
30 | IF LFT_BRKT expression RGT_BRKT statement . ELSE statement
ELSE shift, and go to state 100
ELSE [reduce using rule 29 (selection-stmt)]
$default reduce using rule 29 (selection-stmt)
但我不知道如何解決這個衝突。等待一個答覆。
謝謝你的回答。但我想知道如何改變語法來消除衝突,而不是忽略它。 –
同時告訴我,我們如何知道默認情況下野牛會採取哪種行動?你說這是爲了轉移其他方面而採取的,但我看到了默認的減少。請幫助 –
@ user1506031:「這種情況下,換班或減費是有效的,稱爲移位/減少衝突。Bison旨在通過選擇移位來解決這些衝突,除非運營商優先級聲明另有指示。」 (從我鏈接到我的答案的頁面。)消除的減少在括號中,表明它已被覆蓋。 (至少,我很確定那是括號內的意思。) – rici