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

言語ゲームマニュアル2002年9月版

インストール(安定?版)

デモで遊ぶだけなら言語ゲームデモ(プラグイン)のページを開くだけです。

各部の説明

ウインドウ

Uploaded Image: GGameWindow.png

メニュー

Uploaded Image: WindowMenu.png
Uploaded Image: Gtiles.png

あそびかた

Hello world

言語ゲームには2つの窓があります。上の大きな窓が文法窓(grammer pain) 下の細長い窓がサンプル窓(sample pain) です。言語ゲームで遊ぶには、まず文法窓で文法を作り、それにあう文をサンプル窓に書くという順番で行います。
(もちろん、文を先に書いてからそれに合う文法を考えてもかまいません。)
それでは、定番ですが "Hello world" を解釈する文法を作ってみましょう。

上の文法窓に

greeting : Hello world

と打ち込み、accept(alt + s) してみてください。新しい文法が作成されます。
この文法は、Hello world は greeting だよ!と定義しています。

下のサンプル窓に
Hello world
と書いてリターンしてみてください。サンプルは解析され解析木が表示されます。

今度はサンプル窓に
Bye world
と書いてみてください。今度は文法と会わないので赤いエラーのツリーが表示されます。

再帰的 Hello world

文法窓で次のように定義してみてください。

greeting : Hello
greeting : greeting world

今度も、Hello world とマッチしますが、それだけでなく
Hello world world world world
と、Hello の後に world が何回も続く文章もマッチします。これはなぜでしょう?
例のように、定義が 2 行以上に渡って続いた場合、言語ゲームはどれにマッチする定義を使います。さらに、
greeting : greeting world
のように、greeting の定義の中で greeting 自身を使う事によって無限の長さの文を扱う事が出来ます。このような自分を含む事を再帰的であると呼びます。出来上がるツリーを見ると、その構造が良く分かりますね。

アクション

expr : expr inc [ :a :b | a + 1 ]
expr : number

と文法窓に入れてみてください。
今度は文法の中に [ ] で囲まれた部分があります。この部分をアクションと呼びます。
この文法は、1を足す事の出来る言語を表します。サンプル窓に
10 inc inc
と入力して、ツリーを出して見てください。この文は10に1を2回足す事を表します。ツリーの一番上の expr をクリックすると、答えの 12 が出ます。
直感的には、アクションの中の a + 1 に秘密がありそうだという事が分かると思います。
実は、解析された文の単語の一つ一つ(ノードと呼びます)には値という物があり、ダブルクリックするとその値が呼び出される事になっていて、それが計算になるのです。値は次の約束になっています。
また、:a :b の部分は、左側の expr inc の値を取り出してそれぞれ [] の中で a, b として表す事を表現します。計算結果はマッチしたノードの値となり、ツリーの上のほうにそれが順々に伝わってゆきます。

モルフを動かす

アクションの中には任意の smalltalk コードを書く事が出来ます。とはいえ実際には場所も狭くて複雑なコードを書くのは大変なので、別なところに書いたほうが良いです。また、言語ゲームにはおまけ機能として、タイルスクリプティングで作ったスクリプトエディタモルフをドラッグ&ドロップ出来る機能があります。
ドラッグすると、そのスクリプトを現すアクションが
[scripteditor1300 tryMe]
のように現れますので、解析した文を評価した結果としてモルフを使う事が出来ます。

Link to this Page

propella home