21124135

コンピュータ工学COM504c  COM504d 

3年前学期水2

言語処理系論

Implementations of Programming Languages

佐藤 重幸

単位区分

単位数: 2単位
必修
課程・類・プログラム
種別
先端工学基礎課程

関連Webサイト

主題および達成目標

プログラミング言語処理系の基礎概念と, その実装例を学ぶ.
これにより,

* 言語処理系の仕組みに対する理解
* 言語処理系の仕組みを意識したプログラミング

獲得を目指す.

前もって履修しておくべき科目

同学期に開講される「プログラム言語論」と密に連携した授業設計であり, 同時履修が前提となっている.
「プログラム言語論」で扱ったプログラミング言語の諸概念は, 既出のものとして授業を進める.

加えて, 「プログラム言語論」と同様に

* 基本的なプログラミング(例えば「プログラミング通論」相当)
* 計算機の基本的な仕組み(例えば「計算機通論」相当)
* 集合論と記号論理の数学記法(例えば「離散数学」相当)

ついての知識を前提とする.

前もって履修しておくことが望ましい科目

本科目の理解の助けになるであろう科目や経験は次の通り:

* 形式言語の基礎知識(例えば「形式言語理論」相当)
* Pythonを扱った経験
* 関数型の言語機能(ラムダ式やパターンマッチ)を使った経験

教科書等

授業教材はオンライン資料として配布する.
その中に, 参考資料を適宜記載する.

授業内容とその進め方

授業内容:

1. ガイダンス, イントロダクション
2. コンパイラとインタプリタ
3. 構文と意味論
4. 字句解析と構文解析
5. 意味解析と静的意味論
6. 抽象機械とアセンブリ
7. コンパイラ最適化
8. 翻訳と評価
9. コンパイラとインタプリタ(再訪):二村射影
10. コールスタックと継続
11. ラムダ式と高階関数
12. ライブラリと言語:EDSL
13. JITコンパイラ
14. コンパイラとインタプリタ(再々訪):Truffle/Graal
15. まとめ

進め方:

* 12回以降は発展的内容なので, 授業進度に合わせて内容を取捨選択をする.
* 各回にコメントフィードバックを求め, 次回で適宜取り上げる.

授業時間外の学習

* 各回のコメントフィードバック, 及びそれに係る復習・自習
* 期末試験, 及びそれに係る復習
* レポート課題, 及びそれに係る自習(プログラミングを含む)

成績評価方法および評価基準

成績評価方法:

各回のコメントフィードバック・期末試験・レポート課題から総合的に判断する.
ただし, コメントフィードバックと中間レポート課題は, 補助的な位置付けである.
期末レポート課題は, 発展的なオプション課題である.

評価基準:

授業で扱った言語処理系の基礎概念や実装例を理解し, 自ら扱うことができるかを評価する.
期末試験の受験は, 単位取得において必須とする.
尚, オプションの期末レポート課題を提出しなくても, 他が十分良くできていれば, 「優」が取れるように調整する見通しである.

オフィスアワー・授業相談

Google Classroomで受け付ける.

学生へのメッセージ

現代の実用的な言語処理系は, 概して大変良く出来ている.
しかし皮肉にも, 様々なことが高度に自動化されていればいるほど, そこで何が行われているかについて深い知識を持たなければ, 利用者が適正に扱うことはできない.

Cf. Lisanne Bainbridge, "Ironies of Automation" (1983).

その

水2開

キーワード

インタプリタ
コンパイラ
コンパイラ最適化
抽象機械
部分評価
最終変更日時: 2025/05/07 10:50:51