我正在嘗試爲JFlex和Cup編寫javascript-ish語言的解析器,但是我遇到了致命移位/減少問題以及減少/減少問題的一些問題。在CUP中移位/減少衝突
我已經徹底搜索並發現了大量的例子,但我無法將這些推斷到我的語法。我迄今爲止的理解是,這些問題是因爲解析器無法確定它應該採用哪種方式,因爲它無法區分。
我的語法如下: 以INPUT開頭;
INPUT::= PROGRAM;
PROGRAM::= FUNCTION NEWLINE PROGRAM
| NEWLINE PROGRAM;
FUNCTION ::= function OPTIONAL id p_izq ARG p_der NEWLINE l_izq NEWLINE BODY l_der;
OPTIONAL ::=
| TYPE;
TYPE::= integer
| boolean
ARG ::=
| TYPE id MORE_ARGS;
MORE_ARGS ::=
| colon TYPE id MORE_ARGS;
NEWLINE ::= salto NEWLINE
| ;
BODY ::= ;
我得到一些衝突,但這些2僅僅是個例子:
Warning : *** Shift/Reduce conflict found in state #5
between NEWLINE ::= (*)
and NEWLINE ::= (*) salto NEWLINE
under symbol salto
Resolved in favor of shifting.
Warning : *** Shift/Reduce conflict found in state #0
between NEWLINE ::= (*)
and FUNCTION ::= (*) function OPTIONAL id p_izq ARG p_der NEWLINE l_izq NEWLINE BODY l_der
under symbol function
Resolved in favor of shifting.
PS:語法要複雜得多,但我想,如果我看到這些移位/減少的問題已解決,我將能夠解決其餘問題。
感謝您的回答。
@ rici非常感謝。終於有了你的幫助 – inidar