読者です 読者をやめる 読者になる 読者になる

kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

PEGと構文解析に関するアレコレの勉強会 Vol.1 開催の動機について

勉強会についての詳細はこのエントリの一番下の方をみてもらえればと(もうほとんど枠が埋まっちゃってますが。この辺はほんとに予想外)。このエントリでは、なんでこんな勉強会やろうとしたかという動機でも書いておこうかなと思います。

私は大学院生時代、構文解析アルゴリズム、特にParsing Expression Grammar(PEG)とその最適化手法であるPackrat Parsingの研究をしていました。それなりにまとまった研究にはなったとは思うのですが、同時にまだまだやり残したことが多いとも感じていました。

その後、研究職についていれば話は簡単だったのですが、研究に戻るのはあとでも出来るだろうという安易な思いつき(実際にはそれほど簡単な話ではないことを思い知るわけですが)によって、ふつーのソフトウェア企業(最初に就職した企業ではあんまり普通でない開発してた気はしますがそれはおいといて)に就職することになりました。その後、数度の転職を経て、現職(株式会社ドワンゴ)に至ります。

幸い、今年の春から、自社の宣伝にもなるということで、研究および学会発表を業務の一部として行うことを(特別に)許可していただいています。現在、研究をやっていた頃の勘を取り戻すべく、論文のサーベイをはじめとして、色々リハビリ(?)中です。

ただまあ、ブランクというものがあるので、ここはひとつ勉強会駆動勉強ということで、自分を発表せざるを得ない状況に追い込んでしまおうという思いつきで立ち上げたのが今回のイベントということになります。

正直、20名くらい集まれば恩の字かなと考えていたところがあるので既に110名超の応募があることにとまどいを隠せないのですが、せっかく貴重な時間を割いてくださるのでその辺は頑張って皆様のためになるPEGや構文解析についての知識を提供できればと思います。

connpass.com

Rustのおべんきょう(11) - Hello, List(contains) -

ただひたすら書く。そろそろモジュールに分けた関数群を別ファイルに分離してもいいかも…。

gist.github.com

Rustのおべんきょう(10) - Hello, module -

Rustでモジュールを定義する方法について。mod module_name { }で囲んだ範囲がモジュールになるらしい。また、モジュール内の関数の内、pubを付けなかったものはモジュールprivateな関数になる。useはそれが使われたモジュールのスコープ内でのみ有効、などなど。

gist.github.com

Rustのおべんきょう(9) - Hello, List(filter)

お次はfilter。少しずつ関数が増えていく。

gist.github.com

Rustのおべんきょう(8) - Hello, List(concat, flat_map) -

まだまだ所有権の概念に慣れない今日この頃だが、とりあえずArc<T>でごまかしている。ともあれ、ようやくList上の高階関数が揃ってきた。今回の難所はflat_map。間にconcat関数を定義してやることでなんとか実装。

gist.github.com

Rustのおべんきょう(7) - Hello, List(map) -

map関数も欠かせませんね。というわけで:

gist.github.com

ループで回すのはめんどくさいので、fold_rightで実装しました。