[View] [Edit] [Attachments] [History] [Home] [Changes] [Search] [Help]
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 クラスが親玉のようです。ブラウザでクラスを選択して ? を押すとヘルプが現れますので、それを参考にすると良いです。
それぞれ窓の意味は、
- 左上、スキャナの文法を書くところ
- 左下、グラマーの文法を書くところ(変な日本語ですが)
- 右上、T-Gen からの色々なメッセージが来る
- 右下、テスト文字列(解析してみる文字列)を入れるところ
になっています。
サンプルで遊んでみる。
右上の窓で、右クリック - 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
- SqueakTips last edited on 9 November 2004 at 5:00:48 pm by 192.168.0.8
- Squeak環境 last edited on 19 March 2005 at 2:13:55 pm by 192.168.0.8