Web Syllabus(講義概要)

平成30年度

ひとつ前のページへ戻る 教授名で検索

 
プログラミング言語論(Programming Language Theory) 盛 拓生
2年 前期 専門科目選択 2単位
【情電・前期】 18-1-0466-2349

1.
授業の概要(ねらい)・ディプロマポリシーとの関連

 本講義ではプログラミング言語に関して、その基本事項である各種プログラミングパラダイムとその計算モデル、プログラミング言語の構文、プログラミング言語の意味論について学びます。 
 特に、現在最も普及している実用的な言語である手続き型言語のC言語及びオブジェクト指向言語のJavaについて、計算モデルとしての仮想マシン及び仮想マシン上で実行される中間コードを通してそれらの操作的意味論を理解します。
 また、現在注目されているラムダ算法を計算モデルとする関数型プログラミング言語、人工知能の分野で利用される論理型プログラミング言語、文字列処理などで利用されるスクリプト言語についても概要を示します。
 このように多種多様なプログラミング言語、プログラミングパラダイム、計算モデルを知ることにより取り扱う問題に応じて適切にプログラミング言語を選択できるようになることを目指します。
 この科目は、DP4C及びDP4Mに関連します。
 

2.
授業の到達目標

 本講義ではプログラミング言語に関して、各種プログラミングパラダイムとその計算モデル、プログラミング言語の構文、プログラミング言語の意味論を理解することを目標とします.
 具体的には次の各項目ができるようになることを目標とします。
・各プログラミングパラダイムについて、計算モデルを示し、その特徴を説明することができる。
・代表的な計算モデルについて、その操作的意味論が理解できる。
・プログラミング言語を定義するための構文について説明することができる。
・代表的なプログラミング言語について、その抽象化メカニズムの特徴を説明できる。
・開発するプログラムの規模に応じて適切なプログラミング言語を示すことができる。

3.
成績評価の方法および基準・フィードバック方法

 中間レポート及び期末試験の成績をそれぞれ50%と50%の割合で評価し、全体で60%以上の評価点を得た者を合格とします。
 中間レポート及び期末試験の学習について質問がある場合は原則的にオフィスアワーで対応します。
 

4.
教科書・参考書

使用テキスト:大山口通夫,五味 弘共著、プログラミング言語論、コロナ社、ISBN-13: 978-4339027044
使用教材:LMS

5.
準備学修の内容・必要な時間

 各講義前に、昨年度または今年度の講義ノート、講義スライド及び関連する資料等をLMS上に掲載します。これらの資料を利用して1.5時間程度の予習をしてください(。
 資料は講義で利用するスライドと同じ内容を含んでいます。これらの資料は事前に印刷するかスマートフォン、タブレット等にダウンロードして授業中に参照できる状態にしてください。講義中はスライドの内容をノートに写すことに専念するのではなく、先に述べた資料を参照しながら話を聞いて理解したり、講義中の演習問題を解くことに専念してください。
 また、原則として各講義に対する演習問題をLMSのテストとして公開します。このテストは評価の対象ではありませんが、復習に利用してください。復習には1.5時間程度が必要です。

6.
その他履修上の注意事項

 中間レポートが提出されない場合は単位の取得が著しく困難になります。中間レポートは締切を守って必ず提出するようにしてください。
 事前に履修すべき科目は,プログラミング1です.同時に履修すべき科目は情報科学プログラミング1,データ構造とアルゴリズムです.事後に履修すべき科目は情報システム実習1,オートマトンと計算理論,その他プログラミングに関連する科目全てが該当します.
この科目はJabeeプログラムの必修科目で、学習・教育到達目標中項目4-4に対応しています.

7.
授業内容

【第1回】
プログラミング言語の特徴と分類1
低水準言語と高水準言語、コンパイラ型言語,インタプリタ型言語,中間言語
【第2回】
プログラミング言語の特徴と分類2
計算モデルとプログラミングパラダイム、チューリングマシン、Random Access Machine(RAM)と命令型言語
【第3回】
プログラミング言語の特徴と分類3
ラムダ算法と関数型プログラミング言語
【第4回】
プログラミング言語の特徴4
ラムダ算法とLISP(概要)、論理型言語としてのProlog(概要)、オブジェクト指向言語とその計算モデル(概要)
【第5回】
プログラミング言語の構文
文脈自由文法とBackus Naur Form(BNF)、コンパイラのフロントエンドとバックエンド
【第6回】
命令型プログラミング言語1
構造化プログラミング、データ型
【第7回】
命令型プログラミング言語2
ポインタ変数、ポインタ変数と線形リスト、手続き、引数結合方法、変数のスコープ
【第8回】
プログラミング言語の意味論
操作的意味論、RAMの操作的意味論
【第9回】
Tiny C/Small Cの操作的意味論
仮想マシン
【第10回】
Small Cの操作的意味論
関数定義、関数呼び出し、関数から値を返す、ポインタ、配列
【第11回】
オブジェクト指向プログラミング1
大規模プログラム開発とオブジェクト指向、オブジェクト/クラス/インスタンス、カプセル化と情報隠蔽、継承、多態性
【第12回】
オブジェクト指向プログラミング2
インタフェース、継承/合成/委譲、コレクションとジェネリクス
【第13回】
Javaサブセットの操作的意味論1
非オブジェクト指向機能
【第14回】
Javaサブセットの操作的意味論2
オブジェクト指向機能
【第15回】
まとめと期末試験