ワインメニューを解析する必要があるアプリケーションを書いています。私がこれまで見てきたことから、それらはすべて何らかの構造に従っており、トリックはそれらすべての構造を定義することです。私は現在、Parsekit を使用して文法を作成することを検討していますが、学習曲線はかなり急勾配です。次の数週間を費やしてそれを理解し、これが正しいアプローチではないことに気付くのではなく、質問することにしました.
そのようなものを解析する上で人々が共有したい洞察/リソースはありますか? ありがとう、オリヴィエ
ワインメニューを解析する必要があるアプリケーションを書いています。私がこれまで見てきたことから、それらはすべて何らかの構造に従っており、トリックはそれらすべての構造を定義することです。私は現在、Parsekit を使用して文法を作成することを検討していますが、学習曲線はかなり急勾配です。次の数週間を費やしてそれを理解し、これが正しいアプローチではないことに気付くのではなく、質問することにしました.
そのようなものを解析する上で人々が共有したい洞察/リソースはありますか? ありがとう、オリヴィエ
ParseKitの開発者はこちら。
(私の回答で心に留めておくべきことの 1 つは、私は ParseKit の開発者ですが、フレームワークやその API を実際に設計したわけではありません。主に、Steven Metsker の著書Building Parsers With Javaにある特定の設計に基づいています。私は単に移植しただけです。それらを ObjC/Cocoa に変換します。)
ParseKit は 3 つの部分で構成されています。
PKTokenizer、PKTokenクラス)PKParserそのダイナミズムのために、このパーサー ツールキットのパフォーマンスは、大量の入力に対して貧弱です。上記の各コンポーネントは、前のコンポーネントに基づいています。#3 - Grammar ツールキット - は、#1 トークナイザーと #2 パーサー ツールキットの両方を使用します。
深刻な解析タスクを実行している場合は、#1 - トークナイザー - を確認することを常にPKTokenizerお勧めします。信じられないほど柔軟で強力で、パフォーマンスは非常に優れています。入力文字列よりもトークンで作業する方が簡単な場合(通常はそうです)、おそらくこれを確認することをお勧めします。
#2 (ObjC パーサー ツールキット) については、通常はスキップして #3 に進みます。文法を使用してパーサーを作成する方が、ObjC コードを使用して作成するよりもはるかに優れているからです。
#3 (BNF 文法による ObjC パーサー ツールキット) の場合、最も重要な考慮事項はパフォーマンスです。ParseKit のパーサー ツールキットは、比較的小さな入力文字列の解析に適しています。いくつかの例は次のとおりです。
ParseKit のパーサー ツールキットは、一般に、パフォーマンス上の懸念から、より大きな入力文字列の解析には適していません。いくつかの例は次のとおりです。
ParseKit は確かにこれらのタイプの入力を解析できます (実際に解析します) が、やはり、ParseKit のダイナミズム (バックトラッキング、無限先読み) のために、専用の XML または JSON パーサーに比べてパフォーマンスが劣ります。
「ワインメニュー」の場合、私はそう言うでしょう-ParseKitはおそらく良い(おそらく素晴らしい)ソリューションです。特に、入力の個々の行を文字列の配列に分割し、それらを 1 つずつ解析できる場合。パフォーマンスは非常に優れている必要があり、学習曲線を乗り越えると、ParseKit はこれらのタイプのジョブに対して非常に強力/便利になります。
実際、メツカーのオリジナルの本である IIRC では、彼のツールキットの有効な使用例として、このようなものさえ使用されています。
お役に立てれば。