我正在尝试为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