[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 メーリングリストの案内