#kuiscompiler
問1 (10点): 配布したコンパイラ中のsrc/ir.rktにはバグが仕込んである。資料を参照しつつバグを探し、正しく動作するように修正せよ。
問2 (15点): src/ir.rkt中のstmt->ir関数とexp->ir関数の本体にはコメントがついていない。関数の動作が分かるようにコメントをつけよ。
srcディレクトリ中にcompiler.rkt, syntax.rkt, parser.rkt, ir.rktを入れて、zip形式もしくはtar.gz形式で圧縮して課題提出システムから提出のこと。ir.rktのみを採点するので、別途レポート内容を記載したPDF等を提出する必要はない。圧縮するには、srcディレクトリに上記のファイルを入れた状態でコマンドラインから
zip -r src.zip srcか
tar czvf src.tar.gz srcを実行する。作られたsrc.zipまたはsrc.tar.gzを課題提出システムから提出すること。課題提出システムアカウントの作り方と使い方についてはsubmit_info.pdfを参照せよ。
その他の注意については、配布したファイル中のImplementationAssignment1.txtを参照のこと。
私たちは様々なプログラミング言語(高級言語と呼びます)を使ってプログラムを書き、計算機に行わせるべき仕事を記述します。これらのプログラミング言語による記述は人間には比較的分かりやすいのですが、計算機はそのまま理解することができません。
このギャップを埋めるためのソフトウェアを言語処理系と呼びます。具体的には、言語処理系はプログラミング言語で記述されたプログラムを計算機で実行するために用いられるソフトウェアです。この講義で扱うコンパイラは言語処理系の一種で、プログラムを計算機が分かりやすい形に変換してくれるソフトウェアです。C言語でプログラムを書いたときにgcc
というコマンドを実行したことがある人がいるかもしれませんが、これはC言語のコンパイラを起動するためのコマンドの一つです。javac
はJava言語のコンパイラを起動するためのコマンドの一つですし、ocamlopt
はOCaml言語のコンパイラを起動するためのコマンドの一つです。
コンパイラは計算機を人間が使うためにとても重要なソフトウェアなので、どのようにコンパイラを設計し実装すればよいかについて多くの研究がなされ、その研究成果は実際のコンパイラで使われてきました。コンパイラに関する知識は計算機を専門家として使う上で重要です。
この科目ではコンパイラに関する基本的な知識を習得し、実際にコンパイラを実装してみることで、コンパイラの内部動作をしっかり学んでもらいます。これらの学習を通じて、副次的には、以下の効果が期待できます。
Schemeの拡張。本科目ではこの言語を使用します。授業中にこの言語の練習を少しだけしますが、できれば自分で書けるようになっておいてください。
授業ではTiny CというC言語のサブセットからMIPSアセンブリへのコンパイラを改造して演習をします。授業で少しだけMIPSアセンブリの練習をしますが、アセンブリ言語についてあまり知らない人は自分で予習をしておいてください。
コンパイラ実装課題をやるためにやっておくべきことが結構あります。
MIPSアセンブリの動作はシミュレータで行います。QtSPIMというシミュレータを推奨します。このページからリンクしてあるダウンロードページからパッケージファイルがダウンロードできます。
qtspim_9.1.16_linux64.deb
もしくはqtspim_9.1.16_linux32.deb
を使えるかもしれません。QtSpim_9.1.16_mac.mpkg.zip
を使えます。QtSpim_9.1.16_Windows.exe
を使えるかもしれません。根性のある人はソースコードから入れることも出来るかもしれません。(末永は試していません。)
aptやyumでの入れ方、MacPortsやHomebrewでの入れ方はよくわかりません。分かった人は共有してもらえるとありがたいです。(是非ここにも載せさせてください。)
総合研究7号館演習室にはすでにインストールされています。計算機科学コースの学生はそちらを使っても良いです。
Racket言語で書いたコンパイラを実行できる環境もセットアップする必要があります。とりあえずRacket言語用のIDEであるDrRacketをインストールするのがお勧めです。ダウンロードページからダウンロードしてインストールしてください。エディタやデバッガ等が揃っています。
拡張元のコンパイラをこちらから用意します。PandA からダウンロードして実行してください。
英語のリソースもありますが、臆せず読みましょう。読んでいるうちに慣れてきて速く読めるようになります。読まないでいるといつまで経っても速く読めるようになりません。どうせそのうち英語はやらなければならないのですから、今やっておきましょう。
SPIM の古い Web ページ によれば、Elsevier の許可により公開されている資料とのことです。本講義で必要な部分は全てカバーされていますが、本講義では呼び出し規約を独自のものにしています。呼び出し規約に関しては講義資料を参照してください。
PandAで公開しています。
PandAで公開しています。
配布したファイル中のsubmit_info.pdfに従ってアカウントを作成して使用されたい。