理由があることは承知していますが、LEX/YACC を C++ に使用できない理由について、適切で簡潔な説明を見つけられませんでした。また、LEX/YACC を使用して Objective C を解析できるかどうか、またはその言語が同じ問題を抱えているかどうかも知りたいです。(Obj-C++ ではなく、ObjC のことです。) ありがとうございます。
質問する
2150 次
1 に答える
3
lex と yacc を使用して C++ を解析することは確かに可能ですが、他にも多くの機構が必要です。かつて、gcc は yacc ベースのパーサーを使用していましたが、保守が容易で、意味のある構文エラーの生成がより簡単になると考えられている手作りの再帰降下パーサーに置き換えられました。同じ理由で、clang は自作の再帰降下パーサーを使用します。
Bison は GLR パーサーを構築できます。これにより、代替の解析 (曖昧さ回避ルールに必要) の探索がはるかに簡単になります。Are GCC and Clang parsers really handwritten?に対する Ira Baxter の回答を参照してください。C++ の GLR 解析に関するいくつかの証言。
gcc と clang の背景については、同じ質問に対する Matthew Slattery の回答のリンクも参照してください。特に、gcc の古い yacc パーサーを置き換えるために 2008 年に認識されたコストと利点の概要は、gcc wikiにあります(リンクは Matthew Slattery からコピーされました)。
于 2013-05-07T03:58:03.670 に答える