2011-10-29 16 views
2

私はさまざまなファイル形式を扱わなければなりません。少なくとも50、おそらく100以上。大きなプロジェクトの解析技術を選択する

私はこれまでAntlrと遊んできました。しかし、私はANTLRが理由のカップルのために、このプロジェクトに適しているであろうことはよく分からない:

  • それが結合してすることは困難です再利用文法および/または文法の作品
  • ANTLRは、コード生成を行います - 作ります既存のパーサへの変更は、Antlrに戻って変更を行い、コードを再生成し、コードをコードベースに戻し、ユニットテストを実行する必要があります。
  • ツリー構築/処理は、内部で別の言語Antlr - 将来の開発者にとって潜在的な問題

基本的にAntlrが好きですが、多少単純な言語/フォーマットの場合は100パーサーではなく、複雑な言語のパーサーを1つまたは2つ作成する方が適していると思います。

Antlrのようなパーサジェネレータの代替品は、パーサーコンビネータです。利点は、パーサーがコードに直接統合され、再利用、テスト、さらに抽象化が非常に容易になることです。また、将来の開発者は、新しいツールの使用方法を習得する必要もありません。パーサーコンビネータの欠点は、Javaでそれらを使用するための強力なライブラリがないことです。

だから質問は以下のとおりです。

  1. はANTLR適した/な大規模な解析プロジェクトを対象としますか?
  2. Javaでの大規模な解析には他にどのようなオプションがありますか?

注:ファイル形式のいくつかはCSVまたはタブで区切られ、いくつかは、もう少し複雑で、いくつかは、Javaのように複雑です。意味論的には、(すべてではありませんが)かなり複雑になることもあります。

+1

重要な情報が欠落しています:構文と意味論の両方について、これらの形式の複雑さは何ですか?複雑さがJava言語自体の複雑さに似ているなら、他のものが必要です。一方、すべてのフォーマットがCSVのレベルにある場合は、はるかに軽いアプローチを使用できます。 –

+0

'#1':_「文法や文章を組み合わせて再利用することは難しい」_私は同意しません。ANTLRでは文法を他の文法と共有/インポートできます。 '#2':それは正しいです。'#3':あなたはそれが何を意味するのか分かりません。さらに、重要な情報がまだ失われていると私はA.H.に同意します。 –

+0

@ A.H。 - ありがとう、私は更新しました。 –

答えて

0

私は個人的に私のニーズに合った以上に幅広いフォーマットをカバーしていた以前はApache Tikaを使用していました。私はAntlrを使ったことがないので、本当にコメントすることはできません。

+0

それはちょうどパーサのコレクションであるようです。 ?? –

+0

これは、自動ファイルタイプの検出、および70以上のMIMEタイプの解析と抽出を可能にするツールキットです。 – emt14

+0

いいえ、これは私を助けません。 –

0

There is a parsing techniqueパーサーコンポーネントの組み合わせ、再利用、継承、拡張(実行時に実行中のパーサーを拡張することさえ可能)にも最適です。

私は決してコード生成ツールと優れた宣言型DSLを欠点として数えることはありませんが、おそらく私はJavaのサブカルチャーから遠すぎると思います。これらの懸案事項が何らかの形で有効な場合でも、それは問題ではありません。コンバイナを使用してPackratを実装できます。 Javaでは(クロージャーとラムダが不足しているため)少し面倒かもしれませんが、典型的な随時再帰的降下パーサーよりもはるかに読みやすいです。

+0

パーサジェネレータの実装はこのプロジェクトの範囲外です。文法を使うのは素晴らしいことです - 実際には私がやりたいことですが、私はそれを手伝うためのツールが必要です。 –

+0

@Matt Fenwick、コンビネータベース(またはアドホック)の方法を選択すると、ジェネレータは必要ありません。もちろん、利用可能なツールもあります(例:http://cs.nyu.edu/rgrimm/xtc/ –

+0

)。上記の理由で大規模なJavaプロジェクトに適しているかどうかを知る必要があります。このツールをこのツールで使用した経験はありますか? –

関連する問題