2013年10月7日月曜日

PEGパーサいつ使うの?

私の勝手な解釈ですが、「Parsing Expression Grammarは正規表現のような規則を文法
規則に微分的に適用して、制御可能にして文規則を解析する解析器」と考えたのですが、
これは間違いでしょうか?

確かにWikiに書かれているようにPEGが解釈されるのは一般的にはこれでいいのですが、
折角ANTLRの使いずらい部分を解決してくれるPEGで有るのならば、もう少し柔軟性が
ある解釈でもいいのではないのか?

これが現在の私の考え方です。
なんでこんなことを考えているのかと説明すると、
各プログラム言語はコンパイラやインタープリタがもちろん備わっているのですが、
昔のC言語やアセンブラの解析器のように、プログラムのマップ情報を詳細に提供を
なかなか標準でしてくれるものがありません。

また例えこれができても、現在Javascriptで起きている、言語のDSL化には対応が困難な
状況にあります。これはJQueryやCoffeeScriptを利用すると明らかになります。

現実的にBackbone.jsを使うとGUIのプログラムは魔法のように簡単に綺麗にコード化
できるので、これらの技術を採用しないことは、現実的に不可能になりつつあると考えて
います。
この現象は、Javaが進めてきた路線とは違い、
「非常に自由なアイデアで考えてられた、思考の結晶」のような気がしています。

話をPEGに戻しますが、今の開発状況ではPEGが一番役立つパーサであると
考えています。
逆に従来のPEG以外の文法解析だけで現実現場で使えるツールを作成することは、
時間的に不可能な気がしています。技術の進歩に着いていけないと考えています。

PEG解析するのはこれでいいのですが、プログラム合成の方はPEGをこのままの定義に
してしまうのは非常にもったいない気がしています。
そもそもなぜコードを文法解析しているのか?の疑問に立つと、せいぜいコード管理や
テストのスクリプトに役立てるぐらいでしょうか。

「ならばPEGをプログラム合成でも利用できる解釈のツールにすれば良いのでは?」
こんな自由な考え方をしてみました。
これが冒頭で私なりのPEGの定義をした理由です。

現在このアイデアでPrologを使いツールを作成中です、完成すれば公開したいと考えて
います。

最後に、「PEGパーサ使うのは今でしょう。」