9

たとえば、構文エラーを含む、または必要な句読点が欠落しているコードを解析するための手法に関する参照を教えてもらえますか?

私が取り組んでいるアプリケーションは IDE であり、関数が呼び出される瞬間にソースが構文的に正しいことを必要とせずに、「定義へのジャンプ」、オートコンプリート、およびリファクタリング機能などの機能を提供したいと考えています。 .

私が見たほとんどのパーサー コードは、エラー回復や部分的に完成したコードの解析に重点を置くのではなく、「早期に失敗する」という原則に基づいて動作しているように見えます。

4

3 に答える 3

3

ANTLRを試しましたか?

The Definitive ANTLR Reference」のセクション 10.7 Automatic Error Recovery Strategy for 5 pages で Terrence がこれについて語っています。彼はAlgorithms + Data Structures = ProgramsA Note on Error Recovery in Recursive Descent ParsersEfficient and Comfort Error Recovery in Recursive Descent Parsersを参照しています。

Web サイトのページも参照してください。

Terrence Parr が質問に答える ANTLR フォーラムにアクセスするには、 ANTLRタグも確認してください。彼は、ANTLR Guyとしてここでいくつかの質問に答えます。

また、 ANTLR 4の新しいバージョンは、と同様にリリースされる予定です。

売り込みのように聞こえて申し訳ありませんが、私は長年 ANTLR を使用してきました。これは、多くの人が使用し、運用システムで使用され、いくつかの安定したバージョン (Java、C、C#) があり、非常に活発なコミュニティがあり、 Web サイト、書籍あり、進化中、メンテナンス済み、オープン ソース、BSD ライセンス、使いやすく、いくつかの GUI ツールがあります。

ANTLR 4 のGUIに取り組んでいる人物の 1 人が、他の便利な IDE 編集の中で構文の強調表示とオートコンプリートを備えており、Sam Harwell です。ANTLR フォーラムを通じて彼に連絡できれば、彼があなたを助けてくれるかもしれません。

于 2012-09-15T01:30:27.317 に答える
3

論文やチュートリアルは知りませんが、uu-parsinglibは、一般的な方法で構文エラーから回復できる Haskell 構文解析ライブラリです。たとえば、;予期されていたintが受信された場合、パーサーは、;そのソース位置に挿入されたかのように続行できます。

パーサーがどこで失敗し、どこで修正を続行するかはユーザー次第です。結果は、解析中に修正された一連のエラーと一緒に配信されます。解析コードを Haskell で実装するつもりがない場合でも、ライブラリを調べてみると、何らかの洞察が得られる場合があります。または、Haskell でパーサーを作成して C から呼び出すこともできます。

于 2012-09-14T01:24:29.883 に答える
0

「島の文法」の研究に興味があるかもしれません。それらを調べてからしばらく経ちましたが、ファイルに無意味なチャンクがたくさんある場合、それらは合理的に処理することになっていると思います。私は CiteSeer をうまく使いこなすことができませんでしたが (奇妙なことに、通常は非常に優れています)、Google Scholarは関連する論文を多数見つけました。島の文法を使用して堅牢なパーサーを生成することは、開始するのに適しているように見えます。

于 2012-09-15T00:43:26.243 に答える