私のコードのクラスセクションで、私がエラーを書き込むと、いくつかの行がエラーとして報告されます。私は '| error
'を、エラーから回復するのが良い/安全な特定の場所に配置しましたが、私はそれを使用しているとは思わない。たぶん、途中で表現を再開しようとしているのでしょうか?bison:1つのエラーで追加の間違ったエラーが発生する
Bisonに指定場所での回復を強制する方法はありますか?どのように機能し、何が間違っているのでしょうか?
エラー行をループの隣に置きます。次に例を示します。ここでは
SomeRuleLoop:
| Rule ',' SomeRuleLoop
Rule:
A
| B
| C
| Error
A:
AA AAB AABC
| AA AAB AABC Z
...
は私のルールの一例です。私のコンソールで "funcBodyエラー"が表示されますが、最初のエラーのため次の行にエラーが発生します。各funcBodyRuleはスタンドアロンですが。
funcBodyLoop:
| funcBodyLoop funcBody
funcBody:
funcBodyRule
| error { printf("funcBody error"); $$=0; }
| '#' EQ { printf("still in funcBody\n"); $$=0; }
最初のエラーの行と2番目の行の間に#==を書きました。パーサがまだfuncbodyループにあるかどうかをチェックするためにこれを書きました。
これはエラーを起こさないので、
です。 Nevermind私はprintfを追加し、文字列isntが印刷されたので、おそらくそれは関数のループにはもうありませんか?どのように私はこれを修正するのですか?
私たちを助けるいくつかのコードなしでは、ほとんど助けが不可能に近いだろう。 **しかし、**それは数百行ではなく、最小限のコードに近い必要があります。 –
@Jonathan Leffler:そのループの場所です。私は自分の質問を変更しました –
Yacc(Bison)は大文字と小文字を区別しているので、 'Error'の代わりに 'error'( '組み込み'で特定の意味のw.r.tエラー回復)がありません。 –