[SML 7386] プログラム集
AOKI Atsushi
atsushi @ cc.kyoto-su.ac.jp
2008年 9月 9日 (火) 08:41:29 JST
青木@京都産業大学です。
拙著「ブラックブック」に収録できなかったものを「プログラム集」
としてまとめて公開しています。
http://www.cc.kyoto-su.ac.jp/~atsushi/Programs/
昨日にアップロードしたものは、ソースコードからバイトコードを
作り出す過程を、字句解析・構文解析・コード生成・最適化の4つ
のフェーズに大別して、サンプルプログラムにしたものです。
VisualWorks 7.6 + Jun770 で動かしていますが、ブラックブック
の付録である VisualWork 7.5 + Jun760 でも動かすことができま
す。以下にその方法を書きます。
まず、プログラムスキャナのプログラムを読み込みます。第7章の
「より深いプログラミング」の第2節「本格的な文法」の「プログ
ラムスキャナ」のところに記したプログラムです。
| aFilename aString aURL |
aFilename := 'Foo-ProgramScanner.st' asFilename.
aString := 'http://www.sra.co.jp/people/aoki/SmalltalkBook/sts/'
, aFilename asString.
aURL := JunURL named: aString.
aURL exists ifFalse: [^nil].
aURL downloadTo: aFilename.
aFilename exists ifFalse: [^nil].
^aFilename fileIn
正常に読み込んだら、構文解析のプログラム中の「JunParseTree」
を「FooProgramScanner」に変更します。
| sourceCodeString methodNodeHolder parseTree |
sourceCodeString := '
| a b c d |
a := 10.
b := 20.
c := 30.
d := a + (b * c).
^d
'.
methodNodeHolder := Compiler new
parseNoPattern: sourceCodeString readStream
in: Object
notifying: nil.
"parseTree := JunParseTree"
parseTree := FooProgramScanner
node: methodNodeHolder node
class: Object
code: sourceCodeString.
parseTree show.
^parseTree
これで、きちんと動くと思います。いっそのこと次のプログラムで
「Jun760」から「Jun770」へアップグレードするのもいいかもです。
JunSystem downloadAndUpgradeJunFrom: 'http://www.sra.co.jp/people/aoki/SmalltalkBook/gzs/Jun.tar.gz'
以上です。SMLに参加されている皆さんの日々のプログラミング
の参考にしていただける幸いです。
------------------------------------------------------------
AOKI Atsushi http://www.cc.kyoto-su.ac.jp/~atsushi/
SML メーリングリストの案内