method_call: T_ID T_LPAREN method_arg_list T_RPAREN T_SEMICOLON
value: T_ID T_LSB expr T_RSB
| T_ID;
method_arg_list: /* Empty */
| method_arg method_arg_list;
method_arg: string_constant
| expr;
expr: value
| '(' expr ')';
に従っているとの競合を持っている文法で競合を減らす問題は、それがT_IDを読み取るときに、それがシフトすると、次の 'を読んでする必要があるかどうかわからないということですしかし、次のトークンが左かっこであるかどうかを確認するべきではないでしょうか?
私はバイソンとパーサには一般的に新しく、私は何を書き直すことができるのでしょうか?文法や紛争を解決する?
State 60
37 method_call: T_ID . T_LPAREN method_arg_list T_RPAREN T_SEMICOLON
67 value: T_ID . T_LSB expr T_RSB
68 | T_ID .
T_LPAREN shift, and go to state 71
T_LSB shift, and go to state 72
T_LPAREN [reduce using rule 68 (value)]
$default reduce using rule 68 (value)
私たちはあなたを助けることができるようにするための十分な情報がありません。エラーを再現するMCVE([MCVE])を生成する必要があります。それはいくつかのトークンを列挙します(実際の文法では非終端記号であるにもかかわらず、非終端記号の一部をトークンとしてリストすることもあります)。 'yacc -v'(' bison -v')の出力に、問題のある状態だけのshift/reduce競合レポートを表示します。問題を再現するには十分な文法が必要ですが、問題を再現できるだけの文法はありません。私はまだ何が起こったのか把握しようとしています...いくつかのことを変更した後にエラーが消え@JonathanLeffler –
... – GalaxyVintage
私は 'かどうかわからない「(」' 'T_LPAREN'であるべきで、'「)」 'は' T_RPAREN'でなければなりません。 %トークンT_ID T_LPAREN T_RPAREN T_SEMICOLON T_LSB T_RSBのstring_constant' 'と、書かれたようにバイソンはコードでOKです。私はあなたが何が壊れたのかを記録しておきたいと思います。バージョン管理システムを使用することは非常に重要になります。 –