这个yacc代码中是否存在shift / reduce错误?

时间:2009-11-18 09:40:44

标签: grammar yacc

我从yacc收到一条消息,说有一个转移/减少冲突。我认为它来自yacc文件的这一部分。

statement : expression_stmt
          | compound_stmt
          | selection_stmt
          | iteration_stmt
          | return_stmt ;

selection_stmt : IF '(' expression ')' statement
               | IF '(' expression ')' statement ELSE statement ;

expression : var '=' expression | simple_expression ;

你能看到冲突吗?如何解决?

1 个答案:

答案 0 :(得分:1)

是的,我看到了冲突。 selection_statement规则匹配

之类的表达式
IF(<expression 1>)
THEN
    IF(<expression 2>)
    THEN <expression statement 1>
    ELSE <expression statement 2>

但那含糊不清。它也可能是

IF(<expression 1>)
THEN
    IF(<expression 2>)
    THEN <expression statement 1>
ELSE <expression statement 2>