2010/02/21



この図はContext Freeという言語のサンプルのひとつで作られたもの。文脈自由言語という名前の通り、文脈自由な規則を書くことで絵を作ることができる。

プログラムを見て、たぶんこうだろうという解説。マニュアルは全く読んでないので、間違ってるかもしれないけど、まあ、たぶんこういうことでしょう。

startshape WHOLE


で開始記号を設定。

rule WHOLE {
QUAD { x -0.5 y -0.5 }
QUAD { x 0.5 y -0.5 }
QUAD { x 0.5 y 0.5 }
QUAD { x -0.5 y 0.5 }
}


ruleでWHOLE -> QUAD QUAD QUAD QUAD と指定したのと同じ。ただし、呼び出す際にxとyをそれぞれ変更している。

面白いのはここからで、

rule QUAD {
FILL { }
}


QUADはFILLだと。ここでFILLは後で定義されているが、単に四角を書いているだけ。これだけだと、画面に4つ四角が表示されて終わるだけなんだけど、さらに

rule QUAD 5 {
WHOLE { size 0.45 r 2 }
}

と定義されている。つまり、最初のQUADかこのQUADのどちらかが選ばれる。そのための条件はない(文脈自由だから)。そして、こっちのQUADはWHOLEだと定義されているので、再帰的な定義になっていることが分かる。さらに、もう一つ、

rule QUAD 0.5 {
// nothing
}


と定義されていて、何も表示しない場合もある。ここで、5とか0.5とQUADの後ろに書いてある。これは各ルールが選択される比率を表している。何も書かないと1。この場合は1:5:0.5ということで、分かりやすい比に直すと、2:10:1の比率で各ルールが選ばれる。

最後に、FILLを定義しておしまい。SQUAREは組み込みでしょう。

rule FILL {
SQUARE {
size 0.8
}
}

0 件のコメント:

コメントを投稿