PEGとかPackrat parsingとかについて今思うこと

このブログを読んでいる人の中で、「PEG/Packrat parsingって何?」という人はどのくらいいるんだろう、と考えたときに「とりあえずここ読んどきゃ大体わかるよ」ってサイトが無いな、と思った。Wikipedia解析表現文法がそれにあたるのかもしれないけど、自分が最初に読んだときはサパーリだったので、もっと噛み砕いた説明を誰かしてくれないかなーと他力本願中。

そもそも、日本語で得られる情報が少ないよなーと思う。Parsing expression grammarでググったら、この前の若手の会の発表資料が4番目にヒットするとかどんだけ情報量少ないんだよ。PEGもPackrat parsingもまだ研究の範疇を抜けきれていない*1技術だからなんだろうか。

この2〜3ヶ月ほどPackrat parsingとPEGについて調べたり勉強したりしてみて、応用のための研究*2が進めば近いうちに言語処理系の構文解析にどんどん使われるようになっていくんじゃないか、という感触を得た。また、PEGは正規表現の代わりとしても強力なツールになるだろうと予想している。実際、Perl6では従来の正規表現に代わってPEGがPerl 6 rulesという形で言語のコアに導入されることになっている*3し、Xtalでもすでに実装されている(追記:実装中とのことです)みたい。今後はより多くの言語で使えるようになっていくと思う。

正規表現を使えるようになった時、強力な武器を手に入れたような気がした。実際に強力な武器になった。けど、PEGは更に強力な武器になる。

そんなわけで、皆今後に備えてPEG/Packrat parsingを勉強して僕にいろいろ教えてください(> <)!!!


俺々言語を作るなら、俺々パーサジェネレータを使いたいと思ってpeg-parserを書き始めた。でも、古き良き技術を知らないのは恥ずかしいと思い、コンパイラの本を読み初めてそろそろ二ヶ月くらい。LL(k)とLR(k)については具体的なイメージも伴って理解が深まってきたように思う。つい最近になって"セマンティックアクション"という言葉を覚えました(> <)!

*1:と思っているのだけど、そんなこともない?

*2:みずしまさんがやっている研究も多分ここらへんの研究

*3:Perl 6 rules are Perl 6's regular expression, pattern matching and general-purpose parsing facility, and are a core part of the language. -- from Perl 6 rules - Wikipedia