0

文法にエラー回復の生成を追加したいとしましょう。それが何であるかは知っています。例を見ました。

しかし、より形式的なものは見つかりませんでした。つまり、そのような制作は実際にはどのように行われるべきか、何が可能で何が禁止されているのでしょうか?

Bison エラー回復ドキュメント

今のところ、そのようなプロダクションが有効かどうかは、試行錯誤でしか確認できませんでした。

A := error B 
B := num

また

A := ( error ; error )

もちろんトライ&エラーでは効率が悪いので、エラーリカバリー制作のルールを読みたいと思います。

4

1 に答える 1

1

あなたが指しているドキュメントは古いです.「本当の」ドキュメントはここにあります: http://www.gnu.org/software/bison/manual/html_node/Error-Recovery.html . しかし、これらの点についてはほとんど違いがありません。

このトピックについては、これ以上何も見つからないと思います。例が提供されているドキュメントの一部を除いて: http://www.gnu.org/software/bison/manual/html_node/Simple-Error-Recovery.html .

心に留めておくべき唯一のことは、Bison がいつスタックのポップを停止し、いつ入力の破棄を停止するかを見つけるのは「それほど難しくない」べきだということです。「;」などの「ターミネータ」がある 一部のルールでは、または中括弧 (例では "(" と ")") が通常は最良の選択です。そうしないと、新しい競合が発生する可能性があります。

HTH。

于 2012-12-06T13:56:35.097 に答える