JSON処理オートマトンの構想
今日は構想したり調べたりで時間を使いすぎてしまってあまり書けることがないのですが、毎日更新のペースを守るためにとりあえず書きます。
JSON処理オートマトンみたいな構想
最近はajaxやHTML5、MongoDBなどJSON花盛りな感じになってるが、JSONはXMLなどと比べてお手軽だし、今はほぼ全ての言語にバインディングがあったりと、深くコミットしがいのあるノーテーションだと思う(何このイントロw)。特にデータがプロセスを跨ぐのにいったんJSONを経由するという使い方が多くなりそう。似たようなプロダクトにProtocolBuffersやMessagePackなどがあるが、IDLを書く必要があるので敷居はJSONより高い気がする。
で、思ったのが、「文字列データ」に対する「正規表現」みたいな、「文字列で表したパターンが内部でオートマトンに自動的に変換され、それにしたがってパターンマッチングや置換処理などをやってくれる」みたいなのがJSONに対してもあると便利かもということ。正規表現は検索や置換の用途だが、JSONはそれらに加えてもう少し高度なフィルタリングやマニピュレーションが出来て欲しいところ。つまり正規文法/有限状態遷移マシンよりも上位レイヤの文法/オートマトンを使う必要があるかなと。ちなみにXQueryはチューリングマシン相当だそうな。MongoDBのクエリ言語(Javascript拡張言語)の表現力も似た感じ。ただしここで考えたいのは本格的なクエリ言語ではなくお手軽ノーテーションで高度なオートマトンが出来るようなものだ。
で、色々ノーテーションを考えてみたのだが、逆ポーランド記法みたいのはどうかなと。スタックマシンの上にJSONが一個乗っている状態を初期状態として、逆ポーランド式に処理していく感じ。それをホスト言語(Perlとか)の上では「正規表現による検索・置換くらいの軽いノリ」でサクサクとJSONを処理できてしまえたら便利だろうなーと。
で、今日のところはDuplicateとかSWAPとか算術論理比較とか射影(hash/listの要素参照)とか条件分岐・ループとか、逆ポーランド式にやるならそれぞれにascii記号1個を割り当てる感じだなとか、じゃあそれをどう割り当てるのが自然かとかいったノーテーションのことと、スタックマシンへの解釈実行をどう実装するか(パーサーコンビネータ使ってみたいなとか)について検討している段階。まだ記事に書ける段階ではないので、実装も含めてまとまったところで記事にしたい。CPANに登録してみんなに使ってもらえる「定番のJSONパターン処理記法」を目指したい。
今日は少なめで
また明日。