我在问题中找到了类似的例子,但似乎无法将其应用到我的例子中。
有人可以帮我指出正确的方向吗?
这是y.output错误消息:
state 97
ifstatement : IF LPAREN conditionalexpr RPAREN statement . (23)
ifstatement : IF LPAREN conditionalexpr RPAREN statement . ELSE statement (24)
ELSE shift 102
IF reduce 23
INT reduce 23
OUTPUT reduce 23
WHILE reduce 23
IDENTIFIER reduce 23
INT_LITERAL_TOK reduce 23
LPAREN reduce 23
LBRACE reduce 23
RBRACE reduce 23
SEMICOLON reduce 23
DBL_PLUS reduce 23
DBL_MINUS reduce 23
MINUS reduce 23
这是我的语法: 声明: 块| emptystatement | if语句| while声明| statementexression SEMICOLON | 输出LPAREN addexprlist RPAREN SEMICOLON ;
addexprlist:
addexpr |
addexprlist COMMA addexpr
;
emptystatement:
SEMICOLON
;
ifstatement:
IF LPAREN conditionalexpr RPAREN statement |
IF LPAREN conditionalexpr RPAREN statement ELSE statement
;
答案 0 :(得分:0)
这不需要解决。 S / R冲突是警告,默认操作(shift)是默认情况,因为这种情况。
您可以使用以下语句来处理警告:
compareTo()
答案 1 :(得分:0)
我最终将语法修改为:
ifstatement:
matched |
unmatched
;
matched:
IF LPAREN conditionalexpr RPAREN matched ELSE matched
;
unmatched:
IF LPAREN conditionalexpr RPAREN matched |
IF LPAREN conditionalexpr RPAREN unmatched |
IF LPAREN conditionalexpr RPAREN matched ELSE unmatched
;
我相信它应该仍能正常工作并修复了shift / reduce错误:)