5

理由があることは承知していますが、LEX/YACC を C++ に使用できない理由について、適切で簡潔な説明を見つけられませんでした。また、LEX/YACC を使用して Objective C を解析できるかどうか、またはその言語が同じ問題を抱えているかどうかも知りたいです。(Obj-C++ ではなく、ObjC のことです。) ありがとうございます。

4

1 に答える 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 に答える