シラバス検索システム
シラバス
科目名
プログラミング言語
開講期
秋学期
開講学部等
コンピュータ理工学部
配当年次
3年次
単位数
2単位
教員名
青木 淳
※履修条件,配当年次等の詳細は履修要項をご確認ください。
授業概要/Course outline
コンピュータを実際に動かす言語(たとえば機械語)と私たちがプログラミングに用いる言語(たとえばオブジェクト指向プログラミング言語)の間に大きな溝があることは周知であろう。その溝を埋めるために情報技術(IT)の粋が結集しており、コンピュータの発展の歴史が詰まっていると言っても過言ではない。
その粋な部分(言語処理系の内部)を学びながら、コマンドインタプリタ(たとえばシェル)やスクリプト言語(たとえばAppleScript)、そして、仮想化技術(たとえばSmalltalkやJavaの仮想マシン方式)などのモダンな言語処理系(および実行系)の構成方法を知ることが目的である。
また、1年次と2年次に学んできた手続きプログラミング(C言語)とオブジェクト指向プログラミング(Java言語)に加えて、論理プログラミングと関数プログラミングについても学習する。様々なプログラミングのスタイルを垣間見ることで、新たなプログラミング言語やスタイルに出会ったときの咀嚼力と免疫力を向上させる。
本科目では、字句解析器(レクサ)や構文解析器(パーザ)の生成系(メタ系)を援用しながら、小さな言語処理系を自作するので、いままで学習してきたことの総決算(パノラマ)ができる。コンピュータに対するビジョン(鳥瞰した地図)とプログラミングの何たるか(メタプログラミングの視座)の会得も可能となる。
授業内容・授業計画/Course description・plan
次にあげる項目を「まず、やってみる、それから、学ぶ」をライトモチーフにしながら進めてゆく。
[第01回]言語処理系の概観(字句解析・構文解析・意味解析・コード生成・最適化)
[第02回]手続きプログラミング
[第03回]オブジェクト指向プログラミング
[第04回]論理プログラミング
[第05回]関数プログラミング
[第06回]実行方式と形式的記述(どうやって動くの・構文図式・バッカス記法・状態遷移図)
[第07回]正規表現と自動人形(regular expression・finite automaton)
[第08回]字句解析器生成系(正規表現→決定性有限オートマトン→Cプログラム)
[第09回]構文解析の方法 (解析木・構文木・生成規則・LL構文解析・LR構文解析)
[第10回]構文解析器生成系(構文規則(BNF)+字句解析→Cプログラム)
[第11回]木と表(tree・table:言語処理系の中は木と表だらけ)
[第12回]意味解析の実際(LALR(1)に意味解析を付加して構文木(解析木)を作成)
[第13回]ちっぽけな言語(tiny language:ちっぽけな言語の構文図式)
[第14回]プログラム制御構造
[第15回]プログラム実行環境
準備学習等(事前・事後学習)/Preparation and assignments
授業内容が広範(各論から総論)に及ぶため、進度も速く、難度も高い、まさにスペクタクルである。そのため、予習と復習をしなければ、授業に追随することが難しくなる。事前に関係するところを調べて授業に臨み、その後、授業で学んだ知識を整理し、さらに理解を深めるため、授業中に指示されるレポートや課題に果敢に取り組んでほしい。配付する資料の整頓も大切である。
授業の到達目標/Expected outcome
まず、手続き的なプログラミングのスタイル(まず、それをやって、次に、あれをやり、最後に、これを返す、というプログラムの作り方の一本槍)から脱却(それ以外の多くの槍を持つこと・パラダイムを異にする多種多様なプログラミングの戦略と戦術を体得)することを目標とする。同時にプログラミング言語の背後に横たわっているメタ系(メタ言語:言語を定義する言語:文法を記述する文法)を確かなものにする。
次に、翻訳系(コンパイラ)や解釈系(インタプリタ)を構成している字句解析・構文解析・意味解析・コード生成・最適化など(図1)を現代的に形式的に捕捉できることを到達目標とする。
プログラミング言語は自分で設計して実装できるのだ、という感覚と自信を身につけることも到達目標である。既存のプログラミング言語を習って使うばかりでなく、自らの思いや考えを的確にコンピュータへと伝える新しいプログラミング言語をデザインできる資質の養成をめざす。
身に付く力/Special abilities to be attained
論理的思考力(課題発見力,計画力,論理的分析力,総合的判断力)、実践力(働きかけ力,実行力,主体性)、そして、コンピュータ理工学(プログラミング言語を中核とするコンピュータ科学)の知識を身につけることができる。
履修上の注意/Special notes, cautions
同時に進行している「言語オートマトン」を合わせて履修することが望ましい。1年次の「基礎プログラミング演習」と2年次の「発展プログラミング演習」、そして、3年次の春学期の「プロジェクト演習」で学んだことが前提となる。
毎回、各自のコンピュータを持参し、必ずネットワークに接続して、授業が始まる前までに稼働状態にしておくこと。講義中に援用するプログラムはネットワークを介して取得する。リポジトリ(SCM: Software Configuration Management、たとえばsubversionやgitなどのソフトウェア構成管理)もアクセスするので、その作法(マナー)に慣れておくこと。
評価方法/Evaluation
定期試験は行わない。授業が手解き(ハンズオン:体験学習)を含む関係上、出席は大変に重要である。毎回のように授業中にレポートやプログラムの提出を課す。これらを平常点(50%)とする。また小テストを複数回行う。それらの出来具合(50%)を加味し、総合的に評価する。
教 材/Text and materials
教科書:配付資料
参考書:青木淳、浅岡浩子、澤本依里『Smalltalkで学ぶオブジェクト指向プログラミングの本質』(日経BP社,2008)
参考書:山下義行『コンパイラ入門―構文解析の原理とlex/yacc、C言語による実装』(サイエンス社,2008)
参考書:ラビ・セシィ『プログラミング言語の概念と構造』(ピアソンエデュケーション,2002)
参考書:ジェラルド・サスマン他『計算機プログラムの構造と解釈』(ピアソンエデュケーション,2000)
参照URL:http://www.cc.kyoto-su.ac.jp/~atsushi/
Copyright (C) 2013 Kyoto Sangyo University. All rights reserved.