2

さまざまなファイル形式を処理する必要があります。少なくとも50、場合によっては100以上。

過去にAntlrで遊んだことがあります。ただし、いくつかの理由から、Antlr がこのプロジェクトに適しているかどうかはわかりません。

  • 文法や文法の断片を組み合わせて再利用するのは難しい
  • Antlr はコード生成を行います。既存のパーサーに変更を加えるには、Antlr に戻って変更を加え、コードを再生成し、コードをコードベースに統合し、単体テストを実行する必要があります。
  • ツリーの構築/処理を行うには、Antlr 内で別の言語を処理する必要があります -- 将来の開発者にとって潜在的な問題です

基本的に、私は Antlr が好きですが、やや単純な言語/形式用の 100 個のパーサーよりも、複雑な言語用の 1 つまたは 2 つのパーサーを作成するのに適していると思います。

Antlr のようなパーサー ジェネレーターに代わるものは、パーサー コンビネーターです。利点は、パーサーがコードに直接統合されているため、再利用、テスト、およびさらなる抽象化が非常に簡単になることです。また、将来の開発者は新しいツールの使い方を学ぶ必要がなくなります。パーサー・コンビネーターの欠点は、Java で使用するための強力なライブラリーを私が知らないことです。

質問は次のとおりです。

  1. Antlr は、このような大規模な解析プロジェクトに適していますか?
  2. Java で大規模な解析を行うための他のオプションは何ですか?

注: 一部のファイル形式は CSV またはタブ区切りで、一部はやや複雑で、一部は Java と同じくらい複雑です。セマンティクス的には、非常に複雑になることもあります (ただし、すべてがそうであるわけではありません)。

4

2 に答える 2

0

パーサー コンポーネントの結合、再利用、継承、および拡張 (実行時に実行中のパーサーを拡張することさえ) に最適な構文解析手法があります。

コード生成ツールや優れた宣言型 DSL を欠点とは考えていませんが、おそらく Java サブカルチャーからはかけ離れています。これらの懸念が何らかの形で有効である場合でも、それは問題ではありません。コンビネータを使用して Packrat を実装できます。Java では (適切なクロージャーとラムダが不足しているため) 少しぎこちないかもしれませんが、それでも、典型的なアドホック再帰降下パーサーよりもはるかに読みやすいです。

于 2011-10-29T15:00:54.820 に答える
0

私は個人的に過去にApache Tikaを使用していましたが、これは私のニーズに十分に適しており、さまざまな形式をカバーしています。私は Antlr を使用したことがないので、実際にコメントすることはできません。

于 2011-10-29T13:01:34.173 に答える