|
授業概要/Course outline
|
|
コンピュータを実際に動かす言語(たとえば機械語)と私たちがプログラミングに用いる言語(たとえばオブジェ クト指向プログラミング言語)の間に大きな溝があることは周知であろう。その溝を埋めるために情報技術の粋が 結集しており、コンピュータの発展の歴史が詰まっていると言っても過言ではない。 その粋な部分(言語処理系の内部)を学びながら、コマンドインタプリタ(たとえばシェル)やスクリプト言語 (たとえばPythonやAppleScript)、そして、仮想化技術(たとえばSmalltalkやJavaの仮想マシン方式)などのモ ダンな言語処理系(および実行系)の構成方法を知ることが目的である。 また、1年次と2年次に学んできた手続きプログラミング(C言語)とオブジェクト指向プログラミング(Java言 語)に加えて、論理プログラミングに基づく制約プログラミングと関数プログラミングについても学習する。様々 なプログラミングのスタイルを垣間見ることで、新たなプログラミング言語やスタイルに出会ったときの咀嚼力と 免疫力を向上させる。 本科目では、字句解析器(レクサ)や構文解析器(パーザ)の生成系(メタ系)を援用しながら、小さな言語処 理系を自作するので、いままで学習してきたことの総決算(パノラマ)ができる。コンピュータに対するビジョン (鳥瞰した地図)とプログラミングの何たるか(メタプログラミングの視座)の会得も可能となる。 この授業では、スマートフォンのようなICT(情報通信技術)を活用しながら行い、授業に援用するスライドな どの資料もすべて事前に電子的に配付される。それらの資料へのメモ書きなども電子的に(ペーパーレスで)行う ことを強く推奨する。また、講義を視聴する(座学)だけでなく、触れる・試すなど、五感を使って参加・体験を 促進する実践的な学び(ハンズオン方式のアクティブラーニング)を含む。 同時にソフトウェア開発の厳しさや険しさの自覚を働きかける。人命にかかわるような、社会基盤にかかわるよ うな、ミッションクリティカルと呼ばれる極めて重要なソフトウェアが多く存在する。けっして不具合を出して( バグって)はならないソフトウェアである。そのようなソフトウェア開発に長く(25年間以上も)携わってきた講 師自らの実務経験を基にして、その勘どころ(知識・技術・技能の一端)を伝えて(垣間見せて)ゆく。 ■前もってどのような科目の履修が望ましいか: ・言語オートマトン ・応用プログラミング(Java/Python/C) ・ソフトウェア工学I・II ・プロジェクト演習 ・アルゴリズムとデータ構造 ・グラフィックスI・II ・ヒューマン・インタフェースI・II ・分散処理システム ・オペレーティングシステム ■今後どのような科目を履修するのに役立つか: ・特別研究におけるプログラミングやデザインなど
|
|
授業形態,授業方法等/Course form・type
|
|
【授業形態】
対面授業
【授業方法】
講義
・実務経験のある教員による授業
この授業は、実務経験が豊富な教員が担当する。国内および国外でのコンピュータ・ネットワーク・システム開 発の実務経験があり、特にプログラミングやソフトウェアデザインそしてプロジェクトマネジメントの経験が著し く、スーパープログラマ(伝説のプログラマ)という異名を持つ。日本のオブジェクト指向プログラミングおよび オブジェクト指向分析設計の創成期を作った。その経験をふんだんに活かしながら行う本格的で実践的なプログラ ミング言語の授業である。
・その他
講義を視聴するだけでなく、触れる・試すなど、五感を使って参加・体験を促進する実践的な学び(ハンズオン方式のアクティブラーニング)を含む。
|
|
授業内容・授業計画/Course description・plan
|
|
この授業では「まず、やってみる、それから、学ぶ」をライトモチーフにしながら、以下のようなテーマに沿っ て進めてゆく。ただし授業の進行状況に応じて変更することがある。 [第01回] テーマ:開講にあたって テーマ:言語処理系の概観 授業を始めるにあたって、授業目的・授業内容・評価方法・教材などを説明した後、言語処理系を構成している 各々のフェーズ、字句解析・構文解析・意味解析・コード生成・最適化、それぞれをざっくりとデモンストレーショ ンによって概観する。 [第02回] テーマ:言語処理系の概観 テーマ:実行方式は仮想マシンへ 前回授業の復習から導入し、古典的な言語処理系と現代的な言語処理系の相違を示す。機械語に相当するスタッ ク操作命令やメッセージ送信命令などのバイトコードを解説し、インタプリタの動きをデモンストレーションする ことで、仮想マシンの存在を明らかにする。 [第03回] テーマ:実行方式は仮想マシンへ テーマ:手続きプログラミング 仮想マシンにはメモリ管理が備わっていることを説明する。メモリ管理はオブジェクト指向プログラミングとも 密接に関係することを示し、オブジェクトの生死(不要メモリの回収と再利用)を扱うガベージコレクションのス トラテジーとアルゴリズムをいくつか紹介する。その後、手続きプログラミングを例にして、プログラムカウンタ やスタックの動きを詳説する。 [第04回] テーマ:オブジェクト指向プログラミング テーマ:Squeakのプログラミング テーマ:Pythonプログラミング 純粋なオブジェクト指向プログラミング言語Smalltalkの言語処理系としてSqueakを用いて、純粋なオブジェク ト指向を解題する。数オブジェクトが繰り返し(ループ)を行ったり、真偽オブジェクトが条件分岐を行ったり、 プログラムの制御構造を司るのがオブジェクトへのメッセージであることを示す。けっしてifやforやwhileなどの 予約語ではないことを把握する。また、Haskellからの関数プログラミングのスタイルを受け継ぎながら現代的な オブジェクト指向プログラミング言語としての枠組みを備えたPythonを紹介し、そのプログラミングのスタイル、 特にオフサイドルールなどを含め、スクリプティングがいかなるものかを説明する。 [第05回] テーマ:論理プログラミング テーマ:Prologプログラミング テーマ:Squeakのプログラミング Smalltalk言語処理系であるSqueakによって記述されたPrologインタプリタを用いて論理プログラミングを概観 する。代入や束縛などとも異なるユニフィケーションや可能性探索のためのバックトラックなどを基礎にして、一 切、手続きを記述しないこと、事実・規則・質問、これら三つでプログラムを構成し、一階述語論理(ホーン節論 理)に則っていることを実感する。 [第06回] テーマ:関数プログラミング テーマ:Lispプログラミング テーマ:Squeakのプログラミング Smalltalk言語処理系であるSqueakによって記述されたLispインタプリタを用いて関数プログラミングを概観す る。ラムダ記法やラベル記法などを基礎にして、代入無し・ループ無しを守りながら、名前で束縛すること・関数 自体もデータであることなどでプログラムを構成し、状態を保持せず、コンカレント(文脈的な)クリーン(清潔 さ)に則っていることを実感する。 [第07回] テーマ:プログラミングスタイル テーマ:制約プログラミング 今まで個別に学んできた手続き的・オブジェクト指向的・論理的・関数的なプログラミングのスタイルを一覧し、 それらの長短を説明する。また、新たに制約プログラミングのスタイルも示し、プログラミング言語を支えるパラ ダイムの多様さと多相さを実感してもらう。CやJavaなどの個々のプログラミング言語を操ることも大切だが、プ ログラミングのスタイルやパラダイムを学ぶことこそ肝要であること、メタプログラミングの礎になることを案内 する。 [第08回] テーマ:プログラミング言語の形式的記述 プログラミング言語のためのプログラミング言語、すなわち、プログラミング言語自体を記述するための形式的 な表現を学ぶ。構文図式・バッカス記法・状態遷移図を解題する。 [第09回] テーマ:正規表現と自動人形 字句解析の母体となる正規表現と自動人形(有限オートマトン)を説明する。ワイルドカードと正規表現のちが い、非決定性オートマトンから決定性オートマトンを導いて正規表現になることを図式を援用して示す。 [第10回] テーマ:字句解析器生成系 テーマ:字句解析のプログラミング 正規表現→決定性オートマトン→Cプログラムへと変換するlexやflexを紹介し、その用法を詳しく解説する。字 句解析器(レクサ)を生成するメタ系であること、すなわち、プログラミング言語のメタプログラミング言語であ ることを実感する。 [第11回] テーマ:構文解析の方法 テーマ:木と表 構文解析の母体となる構文木・解析木・生成規則・LL構文解析・LR構文解析を解題する。続いて、言語処理系の 中は木(tree)と表(table)の嵐であること(頻繁に用いられていること)を紹介する。 [第12回] テーマ:構文解析器生成系(構文規則(BNF)+字句解析→Cプログラム) テーマ:構文解析のプログラミング バッカス記法を用いて構文規則を記述し、字句解析プログラムをインクルードすることで、構文解析器としての Cプログラムを生成するyaccやbisonを紹介し、その用法を詳しく解説する。構文解析器(パーザ)を生成するメタ 系であること、すなわち、プログラミング言語のメタプログラミング言語であることを実感する。 [第13回] テーマ:意味解析の実際(LALR(1)に意味解析を付加して構文木(解析木)を作成) LR構文解析(正確にはLALR(1)の構文解析)に意味解析を付加して構文木を生成する過程を利用して解析木を作 り上げることを詳細に解説する。解析木には自己参照構造体を用いて、関数プログラミングで紹介したS式として 表現する。 [第14回] テーマ:ちっぽけな言語(tiny language:ちっぽけな言語の構文図式) テーマ:ちっぽけな言語の処理系の作成 ちっぽけな言語の構文図式を示す。今まで学んだことをすべて応用する。字句解析の作成、構文解析の作成、意 味解析の作成、解析木を食べて、最適化し、コード生成し、実行して結果を出す仮想マシンの製作を掲げる。 [第15回] テーマ:プログラミング&リファクタリングの過程と頒布 テーマ:閉講にあたって この学期を通して学んだことを振り返る。そして、仕上げとして言語処理系の開発を課す。この最終回のライト モチーフは「ひとりじゃないって」であり、他の方々と協行することの大切さをもって締めくくる。
|
|
準備学習等(事前・事後学習)/Preparation and assignments
|
|
授業内容が広範(プログラミング言語の各論から総論)に及ぶため、進度も速く、難度も高い。そのため、予習 と復習をしなければ、授業に追随することが難しくなる。講義で学んだ知識を整理し、さらに理解を深めるために 宿題レポートを真剣に行い、理解(りげ)から行解(ぎょうげ)に変えてほしい。また、数々の宿題には複数の配 付資料が関連する。したがって、配付資料の整頓も大切である。予習と復習を合わせて4時間ほどの学修をしなけ れば、授業に追随することが難しくなる。 [第01回] テーマ:開講にあたって テーマ:言語処理系の概観 〔事前学習〕必ずシラバスを読んで初回の授業に臨むこと。配付資料を教員ページ(リポジトリ)またはmoodleペー ジからダウンロード(チェックアウト)し、それを良く読み、事前に関係するところを調べて、疑問点を明らかに して授業に臨むこと。約1時間ほどの学修(予習)を必要とする。 〔事後学習〕授業で学んだ知識内容と配布資料にメモした事柄を整理し復習すること。Cコンパイラ(gcc)はオー プンソース、約90万行のプログラム。字句解析・構文解析・意味解析・コード生成・最適化のフェーズの中で、一 番多くの行数を食っているのは、どのフェーズかを調査すること。そして、主に何の(どの)プログラミング言語 で記述されているのかも調べること。そして、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmo odleを介して提出すること。およそ3時間ほどの学修(復習)を必要とする。 [第02回] テーマ:言語処理系の概観 テーマ:実行方式は仮想マシンへ 〔事前学習〕自動メモリ管理機構(ガベージコレクション)について、出来るだけの調査をして授業に臨むこと。 前回の内容を問う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習)を必要とする。 〔事後学習〕リポジトリ内にある「言語処理系としてのC:プリプロセッサ・コンパイラ・アセンブラ・リンカー ,アセンブル:アセンブリ言語から機械語を生成,逆アセンブル:機械語からアセンブリ言語を生成」を調べて試 して学ぶこと。授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。お よそ3時間ほどの学修(復習)を必要とする。 [第03回] テーマ:実行方式は仮想マシンへ テーマ:手続きプログラミング 〔事前学習〕中央処理装置(CPU)の中にあるインストラクションポインタやスタックポインタなどの働きを学び 直して授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習 )を必要とする。 〔事後学習〕リポジトリ内にある『加算を値渡し・番地渡し・関数の番地を用いて「絶対にわかるCのポインタ」』 をしっかり勉強(復習)すること。また、関数へのポインタ(関数が間接で参照されること)や変数へのポインタ (値が間接で参照されていること)が、オブジェクト指向プログラミングの実行系において、どのような意味を持 つのかを、リポジトリ内にある『Cによるオブジェクト指向プログラミング』を勉強すること。授業中に指示され る宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。およそ3時間ほどの学修(復習)を 必要とする。 [第04回] テーマ:オブジェクト指向プログラミング テーマ:Squeakのプログラミング テーマ:Pythonプログラミング 〔事前学習〕オブジェクト指向プログラミングについて勉強し直し、プログラミング言語としての意味(意義)を 調べて授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習 )を必要とする。 〔事後学習〕1)長期的な課題がJavaとPythonで課される。なぜ同じものを異なるプログラミング言語で作成させ るのかを考察すること。また、オブジェクト指向プログラミングとUnixベースのコマンド実行プロセスの双方を、 Pythonにおけるオブジェクト指向プログラミングとコマンド実行プロセスをきちんとまとめることで総決算するこ と。授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。およそ3時間 ほどの学修(復習)を必要とする。 [第05回] テーマ:論理プログラミング テーマ:Prologプログラミング テーマ:Squeakのプログラミング 〔事前学習〕述語論理(数理論理や命題論理を含む)を調べて授業に臨むこと。前回の内容を問う授業冒頭の短時 間の小テストに備えること。約1時間ほどの学修(予習)を必要とする。 〔事後学習〕講師自身が公開している「論理プログラミングの事始め」のページに記載されている全Prologプログ ラムを実行して動作を確認すること。授業中に指示される「ハノイの塔のプログラム」と「経路探索のプログラム」 を論理プログラミングする宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。およそ3時 間ほどの学修(復習)を必要とする。 [第06回] テーマ:関数プログラミング テーマ:Lispプログラミング テーマ:Squeakのプログラミング 〔事前学習〕ラムダ計算理論をできるだけ調べて授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テスト に備えること。約1時間ほどの学修(予習)を必要とする。 〔事後学習〕講師自身が公開している「関数プログラミングの事始め」のページに記載されている全Lispプログラ ムを実行して動作を確認すること。授業中に指示される「二進木を平坦化するプログラム」と「リスト要素の回転 のプログラム」を関数プログラミングする宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出するこ と。およそ3時間ほどの学修(復習)を必要とする。 [第07回] テーマ:プログラミングスタイル テーマ:制約プログラミング 〔事前学習〕トーマス・クーンさんが著した「科学革命の構造」の重要キーワード『パラダイム』について調査し て授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習)を 必要とする。 〔事後学習〕連想表をリフレクティブに作りながら、フィボナッチ数を計算する場合と、そうでない場合を比較し、 計算量(オーダー記法を含む)を算出すること。加えて、手続きプログラミング、オブジェクト指向プログラミン グ、論理プログラミング、関数プログラミング、制約プログラミング、並行プログラミング、分散プログラミング など、このような種々様々なプログラミングスタイル(プログラミングパラダイム)を身につける(物にする)と いう観点から、プログラミング言語の本当の学びとは何かを考察すること。授業中に指示される宿題レポートに果 敢に取り組み、〆切までにmoodleを介して提出すること。およそ3時間ほどの学修(復習)を必要とする。 [第08回] テーマ:プログラミング言語の形式的記述 〔事前学習〕プログラミング言語を定義できるプログラミング言語(メタプログラミング言語)の存在を調べて授 業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習)を必要 とする。 〔事後学習〕プログラミング言語の言語仕様を記述するためのバッカス・ナウア記法(BNF)と構文図式(レール ロード図)をしっかりと復習し、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して 提出すること。およそ3時間ほどの学修(復習)を必要とする。 [第09回] テーマ:正規表現と自動人形 〔事前学習〕正規表現(正則表現)および自動人形(言語オートマトン)について調べて授業に臨むこと。前回の 内容を問う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習)を必要とする。 〔事後学習〕正規表現のNFAおよびDFAをastah*(UMLモデリングツール)を使って状態遷移図を描く宿題レポート に果敢に取り組み、〆切までにmoodleを介して提出すること。およそ3時間ほどの学修(復習)を必要とする。 [第10回] テーマ:字句解析器生成系 テーマ:字句解析のプログラミング 〔事前学習〕字句解析器について調査すること。また、字句解析器のメタ系(生成系:lex, flex)についても調 べて授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習) を必要とする。 〔事後学習〕授業中に指示される字句解析の小テスト問題の宿題レポートに果敢に取り組み、〆切までにmoodleを 介して提出すること。およそ3時間ほどの学修(復習)を必要とする。 [第11回] テーマ:構文解析の方法 テーマ:木と表 〔事前学習〕木(ツリー)および表(テーブル)について調べて授業に臨むこと。前回の内容を問う授業冒頭の短 時間の小テストに備えること。約1時間ほどの学修(予習)を必要とする。 〔事後学習〕前置・中置・後置、それぞれの記述を渡り歩く(相互変換する)のに木(ツリー)および表(テーブ ル)を仲介することについて、しっかりと復習すること。授業中に指示される宿題レポートに果敢に取り組み、〆 切までにmoodleを介して提出すること。およそ3時間ほどの学修(復習)を必要とする。 [第12回] テーマ:構文解析器生成系(構文規則(BNF)+字句解析→Cプログラム) テーマ:構文解析のプログラミング 〔事前学習〕構文解析器について調査すること。また、構文解析器のメタ系(生成系:yacc, bison)についても 調べて授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習 )を必要とする。 〔事後学習〕授業中に指示される構文解析の小テスト問題の宿題レポートに果敢に取り組み、〆切までにmoodleを 介して提出すること。およそ3時間ほどの学修(復習)を必要とする。 [第13回] テーマ:意味解析の実際(LALR(1)に意味解析を付加して構文木(解析木)を作成) 〔事前学習〕意味解析を調べて授業に臨むこと。また、プログラムの整形プログラムについても調査しておくこと が望ましい。前回の内容を問う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習)を必要と する。 〔事後学習〕長期的な課題である「自らがプログラミング言語の作者」になることについて考察すること。授業中 に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。およそ3時間ほどの学修 (復習)を必要とする。 [第14回] テーマ:ちっぽけな言語(tiny language:ちっぽけな言語の構文図式) テーマ:ちっぽけな言語の処理系の作成 〔事前学習〕どんなプログラミング言語を自作しようとしているのかを想定して授業に臨むこと。前回の内容を問 う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習)を必要とする。 〔事後学習〕長期的な課題として作成しているプログラミング言語の言語仕様を構文図式とBNFの双方を作成する こと。加えて、言語処理系の構成に関してlexとyaccの双方で作成すること。それらを問う宿題レポートに果敢に 取り組み、〆切までにmoodleを介して提出すること。およそ3時間ほどの学修(復習)を必要とする。 [第15回] テーマ:プログラミング&リファクタリングの過程と頒布 テーマ:閉講にあたって 〔事前学習〕いままで学んできた内容を振り返った上で授業に臨むこと。前回の内容を問う授業冒頭の短時間の小 テストに備えること。約1時間ほどの学修(予習)を必要とする。 〔事後学習〕プログラミングパラダイム(プログラミングスタイル)に関する事柄をまとめること。加えて、言語 処理系の内部および構成法に関する事柄をまとめること。総決算のために授業中に指示される宿題レポートに果敢 に取り組み、〆切までにmoodleを介して提出すること。およそ3時間ほどの学修(復習)を必要とする。
|
|
授業の到達目標/Expected outcome
|
|
まず、手続き的なプログラミングのスタイル(まず、それをやって、次に、あれをやり、最後に、これを返す、 というプログラムの作り方の一本槍)から脱却(それ以外の多くの槍を持つこと・パラダイムを異にする多種多様 なプログラミングの戦略と戦術を体得)することを目標とする。同時にプログラミング言語の背後に横たわってい るメタ系(メタ言語:言語を定義する言語:文法を記述する文法)を確かなものにする。 次に、翻訳系(コンパイラ)や解釈系(インタプリタ)を構成している字句解析・構文解析・意味解析・コード 生成・最適化などを現代的に形式的に捕捉できることを到達目標とする。 プログラミング言語は自分で設計して実装できるのだ、という感覚と自信を身につけることも到達目標である。 既存のプログラミング言語を習って使うばかりでなく、自らの思いや考えを的確にコンピュータへと伝える新しい プログラミング言語をデザインできる資質の養成をめざす。 現代では、プログラミング言語を用いて表現したプログラムの相手がコンピュータばかりではなく、世界中のプ ログラマを相手にしなければならない。コンピュータを相手にプログラマが指示を伝えた時代から、プログラマた ちが意思を伝え合い、協行するためのメディアとしてのプログラミング言語の時代が到来していることを実感し、 その設(しつら)えを会得する。 すなわち、学位授与の方針(ディプロマ・ポリシー)の一環である「当該専門科目を充分に理解し、プログラム 作成などの技術力を身につけて、情報化社会に寄与できる応用力を養うこと」が到達目標である。
|
|
身に付く力/Special abilities to be attained
|
|
論理的思考力(課題発見力、計画力、論理的分析力、総合的判断力)、実践力(働きかけ力、実行力、主体性)、 そして、コンピュータ理工学「プログラミング言語を中核とするコンピュータ科学」の知識と技術を身につけるこ とができる。
|
|
履修上の注意/Special notes, cautions
|
|
この授業と「言語オートマトン」を合わせて履修することが望ましい。1年次の「基礎プログラミング演習」と2 年次の「発展プログラミング演習」「応用プログラミング(Java/Python/C)」「ソフトウェア工学I」、そして、 3年次の春学期の「ソフトウェア工学II」「プロジェクト演習」で学んだことが活きる。システムエンジニア(SE )などの情報系の職種を希望している者の履修を強く勧める。 毎回、各自のコンピュータを持参し、必ずネットワークに接続して、授業が始まる前までに稼働状態にしておく こと。講義中に援用するプログラムはネットワークを介して取得する。リポジトリ(SCM: Software Configuration Management、たとえばSubversionやGitなどのソフトウェア構成管理)もアクセスするので、その 作法(マナー)に慣れておくこと。
|
|
評価方法/Evaluation
|
|
毎回の授業の初めに課す小テストを30%、毎回の授業の終わりに課す宿題レポートを40%、長期的な課題を30%、 合計100%として、それらの出来具合を総合的に評価する。法令に「1単位45時間(2単位90時間)の学修」が宣わ れている。授業の終わりに課される宿題レポートは、当該時間(1回すなわち1限分の授業を受けたら約4時間の学 修)を確保するものであるから、その時間に見合うレポート内容(質と量:A4版で数ページ以上)を必要とする。 また、授業の初めに課される短時間の小テストは、当該学修時間の成果を見極めるために実施し、授業への取り組 みや姿勢を(出欠および遅刻などを含めて)つまびらかにするものでもある。小テストの実施と宿題レポート(長 期的な課題を含む)の提出およびフィードバックは、都度moodleを介して行うので、必ず目を通して振り返りをす ること。
|
|
教 材/Text and materials
|
|
教科書:配付資料 参考書:青木淳、浅岡浩子、澤本依里『Smalltalkで学ぶオブジェクト指向プログラミングの本質』(日経BP社 ,2008) 参考書:山下義行『コンパイラ入門―構文解析の原理とlex/yacc、C言語による実装』(サイエンス社,2008) 参考書:ラビ・セシィ『プログラミング言語の概念と構造』(ピアソンエデュケーション,2002) 参考書:ジェラルド・サスマン他『計算機プログラムの構造と解釈』(ピアソンエデュケーション,2000) 参照URL:http://www.cc.kyoto-su.ac.jp/~atsushi/
|
|
質問や相談の方法/Instructor contact
|
|
研究室:第2実験室棟3階65実験室 オフィスアワー:木曜日3限(13:15-14:45) 連絡先:配付資料の表紙に記載されているメールアドレス 授業に関する質問やホウレンソウ(報告・連絡・相談)がある場合には、オフィスアワーの時間に研究室へ訪問 するか、メールで問い合わせること。メールアドレスは配付資料の表紙に記載されている。
|
|
|
|