言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

属性文法などについての独り言

最近体調が。。。という話は置いといて。こないだイアンの奴に全力投球すべしとの指令を頂いた。イアンの奴は二年ほど前にライフゲームを書いて以来全然触ってなくて、どこから始めたものかと悩んでいる。とりあえずアレックスがくれた属性文法の論文があって、関係あるか分からないけど、良いヒントになりそう。それは属性文法の属性を書き換え可能にする話で、属性文法の良い所は書き換え不可能な所だと関数厨の俺は思うのだが、基本的な事から分かってないので wikipedia を参考に最初から勉強中。と言うわけでちょっとこないだの奴も更新した。http://d.hatena.ne.jp/propella/20080127/p1

俺がこの数年で一番「これこそが悟りじゃ!」と思ったのは計算が木であるという事。fold の話は、それ自体が重要な原理というわけでは無いけど、画期的な発見だと思った。昔 Perl の foreach 文を知った時に、そんな都合よく foreach なんか使う場所ないだろうと思ってたのに、しばらく立つと自分のプログラムから for や while が一掃されたのを発見した時の感動を思い出す。たった二行の定義なのに!計算が木であるとして、何処までの計算を fold だけで書けるのだろう。これは属性文法がどれだけ一般的なのかという問いと同じか。

一つの可能性として、属性文法でプログラムのブラウズ方法が変わるのでは無いかと思っている。例えば Smalltalk では、大まかに静的にクラス構造を読むクラスブラウザと、動的に読むデバッガがあって、どちらもプログラムの編集に使う。もしも属性文法のブラウザがあれば、両者の良い所取りをした開発環境が出来るだろう。クラスブラウザと違って具体的な値を入れながらプログラムを書けるし、デバッガと違ってうっかり再開させてしまってコンテキストを失う事も無い。これは凄いアイデアじゃないだろうか!

ユトレヒト大学属性文法については、あまりの面倒さにびっくりした。これって Ruby で書いたらスッキリするんじゃないかと思った。@ だし。