我正在尝试使用 JFlex 和 Cup 为 javascript 风格的语言编写一个解析器,但是我遇到了一些致命的移位/归约问题和归约/归约问题。
我已经彻底搜索并找到了大量示例,但我无法将它们推断为我的语法。到目前为止我的理解是,这些问题是因为解析器无法决定应该采取哪种方式,因为它无法区分。
我的语法如下:从 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 ::= ;
Run Code Online (Sandbox Code Playgroud)
我遇到了一些冲突,但这两个只是一个例子:
Warning : *** Shift/Reduce conflict found in state #5
between NEWLINE ::= (*)
and NEWLINE ::= …Run Code Online (Sandbox Code Playgroud) compiler-construction grammar parsing shift-reduce-conflict cup