2015年度工学部情報学科専門科目「コンパイラ」

お知らせ

概要

出題された課題

コンパイラ実装課題1 (25点, 締切 2015年12月4日 23:59 (日本標準時))

問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シミュレータのインストール

MIPSアセンブリの動作はシミュレータで行います。QtSPIMというシミュレータを推奨します。このページからリンクしてあるダウンロードページからパッケージファイルがダウンロードできます。

根性のある人はソースコードから入れることも出来るかもしれません。(末永は試していません。)

aptやyumでの入れ方、MacPortsやHomebrewでの入れ方はよくわかりません。分かった人は共有してもらえるとありがたいです。(是非ここにも載せさせてください。)

総合研究7号館演習室にはすでにインストールされています。計算機科学コースの学生はそちらを使っても良いです。

Racket実行環境のセットアップ

Racket言語で書いたコンパイラを実行できる環境もセットアップする必要があります。とりあえずRacket言語用のIDEであるDrRacketをインストールするのがお勧めです。ダウンロードページからダウンロードしてインストールしてください。エディタやデバッガ等が揃っています。

演習用コンパイラのダウンロードと実行

拡張元のコンパイラをこちらから用意します。PandA からダウンロードして実行してください。

リソース

英語のリソースもありますが、臆せず読みましょう。読んでいるうちに慣れてきて速く読めるようになります。読まないでいるといつまで経っても速く読めるようになりません。どうせそのうち英語はやらなければならないのですから、今やっておきましょう。

MIPSアセンブリについて

SPIM の古い Web ページ によれば、Elsevier の許可により公開されている資料とのことです。本講義で必要な部分は全てカバーされていますが、本講義では呼び出し規約を独自のものにしています。呼び出し規約に関しては講義資料を参照してください。

演習用コンパイラ

PandAで公開しています。

講義資料

PandAで公開しています。

課題提出システム

配布したファイル中のsubmit_info.pdfに従ってアカウントを作成して使用されたい。

履修上の注意