Perlを使用してGmailで提供されている検索文字列と似た検索文字列を解析したいと考えています。入力の例は、 "tag:thing by:{user1 user2} {-tag:a by:user3}"となります。私は、このようなGmailスタイルの詳細検索構文の解析?
{and => [
"tag:thing",
{or => [
"by:user1",
"by:user2",
]},
{or => [
{not => "tag:a"},
"by:user3",
]},
}
として、ツリー構造に入れたいの一般的なルールは以下のとおりです。宇宙へのデフォルトAND演算子で区切ら
- トークン。
- 中括弧内のトークンは代替オプション(OR)です。中カッコは、フィールド指定子の前後に置くことができます。すなわち「by:{user1 user2}」と「{by:user1 by:user2}」は等価である。
- ハイフンを先頭に付けたトークンは除外されます。
これらの要素は、組み合わせてネストすることもできます。 "{by:user5 - {tag:k by:user3}}など"
私は文脈自由文法を書いてこれらの規則を表現し、それを木に構文解析することを考えています。これは不要ですか? (これは簡単な正規表現を使って可能ですか?)
文脈自由文法の解析にはどのようなモジュールが推奨されていますか?
(結局これはDBIx ::クラスとデータベースクエリを生成するために使用されます。)
ありがとう、これはCFGを使用する説得力のある議論です。私は実際にどのモジュールを使うべきかについての勧告も必要としています。 –
心配しない限り、私はParse :: RecDescentがしばしば推奨されるように見えます。それはうまくいく。 –
Perl 5.10はネストされたものを非常にうまく処理します。しかしそれは正しい解決策ではありません:) –