私はさまざまなファイル形式を扱わなければなりません。少なくとも50、おそらく100以上。大きなプロジェクトの解析技術を選択する
私はこれまでAntlrと遊んできました。しかし、私はANTLRが理由のカップルのために、このプロジェクトに適しているであろうことはよく分からない:
- それが結合してすることは困難です再利用文法および/または文法の作品
- ANTLRは、コード生成を行います - 作ります既存のパーサへの変更は、Antlrに戻って変更を行い、コードを再生成し、コードをコードベースに戻し、ユニットテストを実行する必要があります。
- ツリー構築/処理は、内部で別の言語Antlr - 将来の開発者にとって潜在的な問題
基本的にAntlrが好きですが、多少単純な言語/フォーマットの場合は100パーサーではなく、複雑な言語のパーサーを1つまたは2つ作成する方が適していると思います。
Antlrのようなパーサジェネレータの代替品は、パーサーコンビネータです。利点は、パーサーがコードに直接統合され、再利用、テスト、さらに抽象化が非常に容易になることです。また、将来の開発者は、新しいツールの使用方法を習得する必要もありません。パーサーコンビネータの欠点は、Javaでそれらを使用するための強力なライブラリがないことです。
だから質問は以下のとおりです。
- はANTLR適した/な大規模な解析プロジェクトを対象としますか?
- Javaでの大規模な解析には他にどのようなオプションがありますか?
注:ファイル形式のいくつかはCSVまたはタブで区切られ、いくつかは、もう少し複雑で、いくつかは、Javaのように複雑です。意味論的には、(すべてではありませんが)かなり複雑になることもあります。
重要な情報が欠落しています:構文と意味論の両方について、これらの形式の複雑さは何ですか?複雑さがJava言語自体の複雑さに似ているなら、他のものが必要です。一方、すべてのフォーマットがCSVのレベルにある場合は、はるかに軽いアプローチを使用できます。 –
'#1':_「文法や文章を組み合わせて再利用することは難しい」_私は同意しません。ANTLRでは文法を他の文法と共有/インポートできます。 '#2':それは正しいです。'#3':あなたはそれが何を意味するのか分かりません。さらに、重要な情報がまだ失われていると私はA.H.に同意します。 –
@ A.H。 - ありがとう、私は更新しました。 –