[View] [Edit] [Attachments] [History] [Home] [Changes] [Search] [Help]

T-Gen

T-Gen とは何ぞや


東京工業大学の佐々木晃さんに、Smalltalk 用のパーサジェネレータ T-Gen を教えてもらったので紹介します。元は別の環境の為に作られたらしいのですが、一応僕の Squeak 3.2 でも移植版が動きました。
http://minnow.cc.gatech.edu/squeak/1419
から ChengeSet をダウンロードして fill in して使います。マニュアルも同じページからダウンロードできます。
これが無くなると大変なので、念のため
http://yuri.sakura.ne.jp/~propella/gengo/T-Gen.cs にもおいておきます。

一言で言えば、↓でインストールできます。
HTTPSocket httpFileIn: 'http://minnow.cc.gatech.edu/squeak/uploads/1419/T-Gen.cs'

パーサジェネレータとはコンピュータ言語の設計などによく使われる、文字列解析を簡単に行う為のツールです。T-Gen では、入力欄にスキャナとグラマー(パーサージェネレータの部品)を表す式を入力して、トライアンドエラーで色々な実験ができるようになっています。

最初にする事


とりあえず、fill in した後
TGenUI open
を do it すれば T-Gen が起動します。

ブラウザには T-Gen なんたらというカテゴリが沢山登場していると思います。
その中で、T-Gen-Interface の TranslatorGenerator クラスが親玉のようです。ブラウザでクラスを選択して ? を押すとヘルプが現れますので、それを参考にすると良いです。

それぞれ窓の意味は、
になっています。

サンプルで遊んでみる。

右上の窓で、右クリック - loadSpec を選択すると、サンプルが選べるはず、
と佐々木さんに教えていただいたのですが、なぜかエラーで止まってしまいました。ただし、TranslatorGenerator のクラスメソッド sample なんとかに、サンプルが書いてあるので、それをコピペしても同じようです。

例えば、example4 の場合、

左上に
 <space> : [\s\t\r]+		{ignoreDelimiter} ;

 左下に
 E : P ;
 P : 'a' ;
 P : '(' A ';' A ')' ;
 P : '(' V ',' V ')' ;
 V : 'a' ;
 A : 'a' ;

 右下に
 (a ; a)
 


と書いてそれぞれ accept すると (a ; a) が解析されます。
解析結果は、右上で result を見ると分かります。

T-Gen勉強メモ
T-Gen.sar

Links to this Page

propella home