2013年2月11日月曜日

シラバスに込められた思い〜プログラミング言語処理系(2013)

シリーズ「シラバスに込められた思い」として,私の担当授業のシラバスを紹介しながら,書ききれなかった思いをつづります。

もし,ご意見・ご感想などあれば,ぜひ右下の MessageLeaf にお寄せください。授業改善に役立てたいと思っています。

第1弾は学部2年生向け科目「プログラミング言語処理系」です。この授業では主にコンパイラの原理について学習します。大きく2部構成になっています。前半ではプログラムを読み取る「解析部」について,後半では解析部の情報を元にアセンブリ言語を生成する「合成部」について扱います。解析部と合成部では用いる原理が大きく異なっているので,授業や応用分野にも大きな違いがあります。

そのため,2013年度から始まる新カリキュラムでは,「解析部」と「合成部」で分割し,それぞれ別の科目と吸収・統合しています。この科目は学部2年次科目なので,2014年から新カリキュラムの科目としてリニューアルします。

2014年に大幅リニューアルすることから,2013年度は基本的に今までのシラバスのままです。しかしながら小規模な授業改善は随時行なってきています。たとえば2012年度には大福帳を取り入れることで,学生に対するきめ細やかなフォローアップを行いました。2013年度には新カリキュラムを見据えて,主に合成部の部分について新教材を投入する予定です。

ちなみに学生時代は今の専門のソフトウェア工学と違ってプログラミング言語処理系の合成部に関連する研究を行なっていました。ソフトウェア工学とプログラミング言語処理系の両方を修めた経歴が,今の大学教員ポストの獲得にあたって,とても役だちました。

この授業「プログラミング言語処理系」での授業方法の特徴は,まず講義を聞く従来型のスタイルではなく,自習が中心であることです。もう1つの特徴は,学ぶ内容の特性を考慮して学び方が設計されていることです。このような学び方の設計のことをインストラクショナル・デザインと言います。私の授業はすべてインストラクショナル・デザインに基いて開発されています。この科目は私が大学教員になってから初めて15週分の講義資料を開発した科目なのですが,教材設計マニュアルを参考にインストラクショナル・デザインに基づいて開発した私にとって初めての科目でもあります。

シラバスは次のとおりです。先にも書きましたが,2014年度に大幅リニューアルが予定されているので,シラバスとしては2012年度までのものをそのまま踏襲しています。今となっては改修すべき部分が多くあります。

授業の概要(ねらい・テーマなど)
プログラミング言語は人間の指示をコンピュータに伝える重要な1手段である。また,それを確立するためにプログラミング言語処理系は数多くの計算機科学の理論的成果を用いている。本授業では字句解析,構文解析,意味解析,コード生成,コード最適化の各原理と,スクリプト言語や言語処理系の開発ツールを用いた実践の両面から学習する。

教科書
配付資料,コンパイラ 中井 央著 コロナ社

参考書
プログラミング言語処理系 佐々政孝著 岩波書店
コンパイラ〜原理・技法・ツール(I,II)A.V.エイホ他著

授業計画・内容
授業改善のため変更する可能性がある。
第1回のガイダンスでのアナウンスに注意すること。
1. ガイダンス,概論
2. 字句解析(理論編1: 正規表現からNFAへ)
3. 字句解析(理論編2: NFAからDFAへ)
4. 字句解析(実践編: flex を使った字句解析器の実装) 
5. 構文解析(導入編)
6. 構文解析(実践編: yacc を使った構文解析器の実装) 
7. 構文解析(理論編1: 下向き構文解析器)
8. 構文解析(理論編2: 上向き構文解析器)
9. 意味解析
10. 前半の講義のふりかえり,確認テスト
11. 実行時環境
12. 仮想計算機とコード生成
13. 最適化
14. 応用編
15. まとめ

成績評価の方法
小テスト,中間試験,期末試験 80%  基本的な内容を理解しているかを確認する。
レポート 20% 深く内容を理解しているかを確認する。

授業に対する準備事項
各自が自習できるように教材を構成している。多くの回で小テストを課す。

履修上の注意
計算機演習I,計算機演習II,アルゴリズムとデータ構造を十分に理解しておくこと。
形式言語とオートマトンの履修を推奨する。

担当者からのメッセージ
プログラミング言語処理系の知識は,一見マイナーな印象を受けるかもしれませんが,実は色々と応用がききます。第1回授業で応用分野も含めて概説します。演習を取り入れた学習量の多い講義ですが,頑張って実のある講義にしていきましょう!