[View] [Edit] [Attachments] [History] [Home] [Changes] [Search] [Help]
言語ゲームマニュアル2002年9月版
インストール(安定?版)
デモで遊ぶだけなら言語ゲームデモ(プラグイン)のページを開くだけです。
各部の説明
ウインドウ

- grammer pane - BNF 形式で文法を入力します。
- 例の場合、"Hello World" という文字の並びが、"greeting" とマッチする事をあらわします。専門用語では、: の左辺に現れる並びを非終端記号、右辺に現れる並びを終端記号と呼びます。言語ゲームの役割は、受け取った文字列を片っ端からマッチしてゆき、最終的に一つの非終端記号にマッチさせる事です。
- sample pane - サンプル欄
- 実際に解釈(パース)させる文字列をここに書きます。
- キーボードから打ち込むほかに、TextMorph 等をここにドラッグしてもパースすることが出来ます。
メニュー

- メインメニュー
- swich grammer 作成した文法を選択する事が出来ます。
- new grammer 新しい文法を作成します。
- tile stile タイルの形を決定します(下記参照)
- derivation この文法を元にして文をランダムに生成します。
- accept ウインドウに入力した文法を確定します。

- タイルスタイル - サンプル欄に入力した文字列は以下の形にパースされます。
- GTileNull - 何も現れませんが、パース出来たときに OK の文字が飛び出します。
- GTileSimple - 横一列に並びます。
- GTileTree - ツリー型に並びます。
- GTileText - 文字列の入った箱。編集する事が出来ます。
あそびかた
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
- 言語ゲーム last edited on 19 March 2005 at 2:04:01 pm by 192.168.0.8