3

TLDR: 形式ごとに異なるコードを使用して多目的パーサーを手動で作成した場合、パーサー コードの 1 つのチャンクと ANTLR、PyParsing、または同様の文法を使用して各形式を指定すると、長期的にはうまく機能しますか?

コンテキスト: 私の仕事には、約 50 の異なるベンチマークからの多くのベンチマーク ログ ファイルが含まれます。XML、HTML、CSV、および文書化された仕様のない多くの独自のものがあります。私と同僚がこのデータを手で入力する時間を節約するために、統一されたインターフェイスで定期的に扱うすべての形式を処理する解析ツールを作成しました。ただし、デザインはそれほどきれいではありません。

これを Python で書き、Parser クラスを作成しました。各ファイル形式は、パーサーの read() メソッドに独自のコードを提供する実装として処理されます。文法を使用して各形式を理解する Parser の定義を 1 つだけ持つというアイデアは気に入っていますが、これまでに行ったことはありません。

時間をかける価値はありますか? また、リファクタリングが完了したら、将来、他の初心者が作業しやすくなりますか?

4

1 に答える 1

3

あなたの質問に 100% 確実に答えることはできませんが、意見を述べることができます。

適切な文法と手巻きの正規表現「パーサー」を使用するという選択は、多くの場合、入力がどれだけ均一であるかにかかっています。

入力が非常に均一で、Python や Perl など、文字列を適切に処理する言語を既に知っている場合は、既存のコードを保持します。

一方、Antlr のようなパーサー ジェネレーターは、入力にエラーや矛盾が含まれている可能性がある場合に真価を発揮します。その理由は、形式的な文法により、入力ストリームを手動で処理することを心配することなく、特定のコンテキストで一致させる必要があるものに集中できるからです。

さらに、入力ストリームにエラーがある場合は、Antlr と正規表現を使用して対処する方が簡単であることがよくあります。その理由は、いくつかのオプションが利用可能な場合、Antlr には、述語によるロールバックを含む、正しいパスをホースするための機能が組み込まれているためです。

とはいえ、コードの動作については多くのことが言えます。何かを書き直したい場合は、書き直しが製品のユーザーにどのように役立つかについて、適切な使用例を作成しようとします。

于 2010-02-03T19:54:47.417 に答える