Japanese / English

L0930300

プログラミング言語論

Principles of Programming Languages

開講部

工学部

開講学科

情報工学科

開講学年

2年次

開講時期

後期

単位数

2

単位区分

選択必修

系列区分

専門

講義区分

講義

教育目標

B-3
准教授篠埜功この先生のアンケート一覧を参照

授業の概要

コンピュータはプログラムに従って動く機械であり、プログラムの記述はプログラミング言語を使って行われる。プログラミング言語は、構文と意味を定義することにより定義されるが、意味(プログラムの実行の結果)の定義について操作的意味論、公理的意味論を取り上げて解説し、例として単純な言語の上でこれらの定義を示す。プログラムの意味は一般には実行しないと(コンピュータには)分からないが、意味のうちの一部の情報である型については、コンパイル時に型を解析する言語(静的型付き言語)においてはプログラムの実行前(コンパイル時)に分かる。静的型付き言語における型に関する規則の集まりを型システムというが、単純な言語の型システムを例として示す。また、計算モデルにより言語を分類し、命令型言語、関数型言語、オブジェクト指向言語、論理型言語について解説する。変数の有効範囲、引数機構等、言語の主要な概念についても解説する。

授業の目的

プログラミング言語は計算を記述するための体系である。各言語は計算を様々な観点から抽象化し、計算を記述する手段をプログラマーに提供する。例えば、言語は変数、関数、型などを提供する。言語が計算をどのように抽象化するかはプログラミングに大きな影響を及ぼし、現存する言語が行っている代表的な抽象化について学習することにより、それらを意識して使用する言語の選択を行うことができるようになる。また、変数の有効範囲、引数機構などの主要な概念について学習することにより、それらの言語毎の違いを知ることができる。言語の意味論はプログラムの解析あるいは検証の基礎であり、意味論を学習することにより、プログラムの振る舞いを正確に定める手段を得ることができる。

達成目標

1.プログラミング言語の意味記述、特に公理的意味論、操作的意味論について理解し、単純な言語で書かれた短いプログラム例についてこれらの意味論で意味を記述することができるようになる。
2.変数の有効範囲(静的有効範囲、動的有効範囲)について理解し、単純なプログラム例について、変数の有効範囲の決め方によりプログラムの意味がどのように変わるか説明することができるようになる。
3.主要な引数機構について理解し、単純なプログラム例について、引数機構によりプログラムの意味がどのように変わるか説明することができるようになる。
4.プログラミング言語の計算モデルによる分類について説明することができるようになる。
5.単純なプログラムについて、型について整合性があるかどうかを、与えられた単純な型システムに従って判定することができるようになる。

授業で使用する言語

日本語

授業計画


【授業計画】【授業時間外課題(予習および復習を含む)】
1.プログラミング言語の分類、簡単な言語の例
・命令型言語、関数型言語、論理型言語、オブジェクト指向言語
・簡単な言語の例 --- Little Quilt言語
参考書8.1節を予習。
2.命令型言語(1)
・代入
・構造化プログラミング
・制御フロー
参考書3.1節, 3.2節, 3.3節を予習。
3.命令型言語(2)
・break文、continue文、goto文、return文
参考書3.4節を予習。
4.命令型言語(3)
・文の翻訳
・短絡評価
・表明
参考書p.109, p.87を予習。
5.命令型言語(4)
・Hoare triple
・Hoare論理
参考書3.6節を予習。
6.命令型言語(5)、小テスト
・手続き
・引数機構
・変数の有効範囲
参考書5.2節、5.3節を予習。
7.操作的意味論(1)
・C言語の小さなサブセットに関する操作的意味
--- 式の意味の定義
--- 文の意味の定義
参考書13.3節に操作的意味論の説明があるが、関数型言語に関するものである。講義で紹介するのは命令型言語に対するものであり、少し異なるが、考え方は同じである。命令型言語には代入があるため、状態の変化を扱う必要がある。これに関して参考書には載っていない。どのように定義すればいいか自分で考えてみる。
8.中間試験
・第1回から第7回までの内容の理解を確認する筆記試験を実施し、終了後解説を行う。
これまでの内容を復習しておく。
9.型システム
・C言語における変数宣言
・C言語の小さなサブセットに関する型システム
プログラミング入門2で扱った変数宣言について復習しておく。
10.ラムダ計算
・ラムダ式の構文定義
・β変換
参考書第14章を予習。
11.オブジェクト指向(1)
・クラス
参考書第6章を予習。
12.オブジェクト指向(2)
・継承
・仮想関数
参考書第7章を予習。
13.論理型プログラミング 参考書第11章を予習。
14.関数型プログラミング、小テスト 参考書第8章、第9章を予習。
15.期末試験
・第1回から第14回までの内容の理解を確認する筆記試験を実施し、終了後解説を行う。
これまでの内容を復習しておく。

評価方法と基準

中間試験40点満点、期末試験50点満点、小テスト等10点満点とし、
中間試験M点、期末試験F点、小テスト等S点のとき、
S+M+F*(100-(S+M))/50 点を合計得点とする。

教科書・参考書

講義中に資料を配布する。
以下の2冊を参考書とする。
・Ravi Sethi, Programming Languages Concepts & Constructs 2nd edition, Addison-Wesley, 1996.
この講義の半分程度の内容は、この参考書に書かれている。読みやすいが、本学の図書館にはなく、購入も時間がかかる(注文後印刷)。
・ラビ セシィ著, 神林 靖訳, プログラミング言語の概念と構造, ピアソンエデュケーション, 2002.
これは上記洋書の1st editionの日本語訳である。現在この日本語訳の本も入手困難だが、大宮キャンパスの図書館に1冊ある。
また、以下の2冊を推薦図書とする。
・John C. Mitchell, Concepts in Programming Languages, Cambridge University Press, 2001.
この本は授業内容を理解した後でさらに知識を補うのに適している。この本は大宮キャンパスの図書館に2冊ある。
・大山口 通夫, 五味 弘, プログラミング言語論, コロナ社, 2008.
この本は豊洲キャンパス、芝浦キャンパスの図書館に1冊ずつある。

履修登録前の準備

コンピュータ科学序説、プログラミング入門1、2

オフィスアワー、質問・相談の方法

講義前後、あるいは電子メールで随時

環境との関連

環境に関連しない科目

地域志向

地域志向ではない科目

社会的・職業的自立力の育成

対課題基礎力を育成する科目

アクティブ・ラーニング科目

能動的な学修への参加を取り入れた授業が1コマ分以上

授業の到達目標と各学科の学習・到達目標との対応


最終更新 : Sat Jul 16 07:01:02 JST 2016