0

shift/reduce の競合があるというメッセージを 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 ;

競合が見えますか?どうすれば修正できますか?

4

1 に答える 1

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>
于 2009-11-18T10:35:52.717 に答える