META in Squeak

昨日思いつくまでSqueak版METAはParsing Expression Grammar(PEG)をちゃんとサポートしているとは思っていなかったのだが、PEGが要求するとされていた(Wikipediaによればhttp://en.wikipedia.org/wiki/Parsing_expression_grammar)"And-predicate"は、「Not-predicateを使ってnotのnot」として書けば自分で書けるということに気がついた。

というわけで、Squeak版METAで書いた
$a^{n} b^{n} c^{n} : n > 0$
の例はこんな感じ。

MTokenizer subclass: #MABC
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	category: 'Meta-Examples'!

!MABC methodsFor: 'productions' stamp: 'yo 5/4/2007 11:15'!
a ::= $a <a> $b | `true`! !

!MABC methodsFor: 'productions' stamp: 'yo 5/4/2007 11:23'!
aa ::= <a>:a ?`a ~= true`! !

!MABC methodsFor: 'productions' stamp: 'yo 5/4/2007 11:24'!
b ::= $b <b> $c | `true`! !

!MABC methodsFor: 'productions' stamp: 'yo 5/4/2007 11:26'!
bb ::= <b>:b ?`b ~= true`! !

!MABC methodsFor: 'productions' stamp: 'yo 5/4/2007 11:28'!
s ::= ~(~(<aa> ~$b)) $a+ <bb> ~$c! !

これをfile inしたあと、

MABC match: 'aaabbbccc' with: #s

とすると、任意長先読みの文脈依存の構文解析ができるわけでした。

Wikipediaにも、Bryan Fordの発表資料にも、and-predicateはPEGの一部であるかのように書かれていますが、元論文ではand-predicateは含まれていませんでした(?も含まれていなかった)。というわけで、最小限の定義以上のものがどこかで入ってきてしまっていたようです。

石鎚山

http://d.hatena.ne.jp/propella/で山宮さんが登ってきたときの詳細なレポートを書いているが、私も6歳のころ行ったはずなのだ。確かに鎖があってそれを伝って登るところがあったのは記憶にあるのだが、そこまで過酷だったような気がしないのだよね、私がそのとき本当に頂上に言ったのかどうか、覚えている人は是非コメントください。

ガソリン価格

アメリカでもカリフォルニアでも上昇中です。アメリカに来たころは$1.40/gallonくらいだったりしたのに、最近の価格をは$3.30とか$3.40とかそういう世界なのですよね。

最近見かけたものでちょっと気になって(円/リットル)に換算してみたら(google:3.40ドル/ガロンを円/リットルで)、107円/リットルとかなのですね。日本ではガソリンを入れたことなどなかったので良くわかりませんでしたが、日本での相場も調べたら126円とかそのくらいのようです。

というわけで、ほとんど差がなくなっているということになっています。すごいことだ。

この価格上昇の理由として、業界の専門家筋の発言としては「精製所のメインテナンスをしていて供給能力が絞られたために価格が上昇した」というような話があります。が、これはおかしいですよね。精製所をきまぐれで休止すれば価格を吊り上げることができる、ということですから。原油価格も上昇していますが、それによって石油会社は経営が苦しくなるどころか過去最高益を記録しているのです。原料価格が上昇したのに利益が上がるというのは普通の製造業ではちょっと考えられないことなわけですが、経営努力をせずとも人々が「しょうがないな」と思っていることに付け込んで価格を吊り上げれば利益が上がるのだからこんな簡単なことはないでしょう。

Wikipedia

Alanのエントリを最近直しているのは、インターンのDanではなかったということがわかってしまった。Tedの友人のJerryさん(Wikipediaアカウントもそんな名前だが)という人だったのである。奥が深い。

デバッグ

早朝からデバッグ。SIXXがどうなっているのかちょっと見てみたいと思ったのだが、swikisはメインテナンスで落ちているのだな。取っておいたはずのファイルも見当たらないし。

それはそうと、

Fraction readFromString: (10/11) storeString

が正しい答えを返さなかったりエラーになったりするのですが(Complexでも同様)、SIXXはこれらをハンドリングしてましたっけ?

storeString/readFrom:

というわけで、FractionにはSIXXにもバグがあったことがわかった。なかなか大変だ。SISSのほうは「#evaluate:は使わない」という制限を自分に加えているので、$(を読み飛ばして、整数を読んで、$/を読み飛ばして、整数を読んでというロジックを自分で書いて対処。