情報システムプロジェクト1 http://www.info.kindai.ac.jp/project1 2019年4月10日.

Slides:



Advertisements
Similar presentations
情報システムプロジェクト I 第2回 FileScanner.java ~ファイル入力、文字切り出し機能を持つ プログラムの作成~
Advertisements

オブジェクト指向 言語 論 知能情報学部 新田直也. 講義概要  私の研究室: 13 号館 2 階 (13-206)  講義資料について :  参考図書 : 河西朝雄 : 「原理がわかる プログラムの法則」,
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
情報基礎演習I(プログラミング) 第9回 6月22日 水曜5限 江草由佳
情報処理Ⅱ 第1回 2006年10月6日(金).
プログラミング 平成24年1月11日 森田 彦.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
東京工科大学 コンピュータサイエンス学部 亀田弘之
プログラミング入門 電卓番外編 ~エクセルで関数表示~.
プログラミング基礎I(再) 山元進.
Java I 第2回 (4/18)
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
プログラミング入門2 第1回 導入 情報工学科 篠埜 功.
オブジェクト指向言語論 知能情報学部 新田直也.
プログラミング基礎I(再) 山元進.
情報基礎A 第13週 VBAプログラミング VBAの基本文法7・実際のデータ処理
コンパイラ 第1回 コンパイラの概要 38号館4階N-411 内線5459
データ構造とアルゴリズム論 第4章 レコード構造を使った処理-クラスの利用
情報基礎A 第10週 プログラミング入門 VBAの基本文法2 データ型・If ~Then~Else
コンパイラ 第9回 コード生成 ― スタックマシン ―
情報処理Ⅱ 2005年10月7日(金).
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
プログラミング言語論 理工学部 情報システム工学科 新田直也.
プログラミング言語論 理工学部 情報システム工学科 新田直也.
第8回 プログラミングⅡ 第8回
プログラミングIII演習 第1回目.
  【事例演習6】  数式インタプリタ      解 説     “インタプリタの基本的な仕組み”.
オブジェクト指向 プログラミング 第一回 知能情報学部 新田直也.
プログラミング 平成24年10月30日 森田 彦.
第10回 プログラミングⅡ 第10回
【プログラミング応用】 必修2単位 通年 30週 授業形態:演習.
プログラミング 平成25年11月5日 森田 彦.
データ構造と アルゴリズム論 平成29年9月27日 森田 彦.
プログラミング言語入門 手続き型言語としてのJava
言語プロセッサ2007 平成19年9月26日(水) (Ver.2 平成19年10月3日変更)
コンパイラ 第4回 字句解析 ― 字句解析プログラムの作成 ―
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
データ構造とアルゴリズム論 第3章 ファイルを用いたデータ入出力2
ソフトウェア制作論 平成30年10月3日.
データ構造とアルゴリズム論 第3章 ファイルを用いたデータ入出力
コンパイラ 第13回 上昇型構文解析(1) 38号館4階N-411 内線5459
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
東京工科大学 コンピュータサイエンス学部 亀田弘之
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
プログラミングⅠ 平成31年1月7日 森田 彦.
コンパイラ 2011年10月20日
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
データ構造とアルゴリズム論 第4章 レコード構造を使った処理-クラスの利用
C言語 はじめに 2016年 吉田研究室.
コンパイラ 2012年10月1日
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
地域情報学 C言語プログラミング 第4回 while文、do~while文、switch文、 2次元配列、ポインタ 2017年11月10日
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
統合開発環境のための プログラミング言語拡張 フレームワーク
第6回放送授業.
標準入出力、変数、演算子、エスケープシーケンス
コンパイラ 2012年10月11日
オブジェクト指向言語論 第一回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
skill-net(MILESTONE CAI,笈川他,1982)[Fortranの課題選択など]
プログラミング演習I 2003年6月11日(第9回) 木村巌.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング 平成28年10月25日 森田 彦.
湘南工科大学 2013年10月22日 情報理論2 湘南工科大学情報工学科 准教授 小林 学.
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
1.2 言語処理の諸観点 (1)言語処理の利用分野
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
Presentation transcript:

情報システムプロジェクト1 http://www.info.kindai.ac.jp/project1 2019年4月10日

実習内容 コンパイラの作成 講義科目「コンパイラ」の受講は必須 情報分野の「いにしえ」よりの主要課題 いかなるプログラミング巧者でも,基礎理論の学習抜きではきわめて困難 基礎を順序だてて学べば,さほど困難ではない 講義科目「コンパイラ」の受講は必須

出欠について ⇒「遅刻」 (遅刻2回で欠席1回とカウント) 理由の如何を問わず欠席3回以上で不受 実習開始時に着席していない  ⇒「遅刻」 (遅刻2回で欠席1回とカウント) 実習開始後20分に段階で着席していない  ⇒「欠席」 理由の如何を問わず欠席3回以上で不受

受講姿勢について 実習中は自席に着席すること 質問があればTAまたは教員に 実習中の飲食は不可(休憩時間のみ可) 全員が、気持ちよく受講できるように以下の事を守って下さい 実習中は自席に着席すること 質問があればTAまたは教員に 実習中の飲食は不可(休憩時間のみ可) 携帯電話の電源は切り,卓上に出さない 特別な理由がない限り,帽子は脱ぐこと 私語はしない  上記ルールを守れない学生には、やむを得ず教室からの退去をお願いすることになります

受講姿勢について 著しく受講態度の悪い場合にはイエローカードを出します イエローカードが出た場合は、教卓前の席、または別室に移動し、教員の見ている前で作業をしてもらいます

実習ノートについて 予習時:各授業で行う作業内容の計画を立てる 実習時:作業内容の進捗状況を記録する どのような作業を行うのか、どれだけ時間をかけるのか 実習時:作業内容の進捗状況を記録する 作業開始時刻・終了時刻 動作確認・バグがあった場合はその内容等 実習開始時に教員がノートチェックし、計画に不備がある場合は再提出 ノートを忘れると減点

コンパイラ (compiler) コンパイラ 原始プログラム(source program)を  目的プログラム(object program)に  変換(翻訳)するプログラム 原始プログラム (source program) 入力 コンパイラ (compiler) 出力 目的プログラム (object program)

原始プログラムと目的プログラム コンパイラ 高水準言語 低水準言語 Java, C等 機械語, アセンブラ等 人間が読み書き可能 複合文、入れ子構造 低水準言語 機械語, アセンブラ等 人間には理解が難しい 命令コードとオペランド

原始プログラムと目的プログラム コンパイラ 高水準言語 低水準言語 Java, C等 機械語, アセンブラ等 人間が読み書き可能 複合文、入れ子構造 低水準言語 機械語, アセンブラ等 人間には理解が難しい 命令コードとオペランド main () { int n, m, max; max = inputint; m = 2; while (m < max) { n = 2; while (! (m % n == 0)) ++n; if (m == n) outputint (m); m++; } 0 PUSHI 2 1 INPUT 2 ASSGN 3 REMOVE 4 PUSHI 0 5 PUSHI 2 6 ASSGN 7 REMOVE 8 PUSH 0 9 PUSH 2 :

K19言語 C風言語 データ型は整数(int)型のみ 変数宣言部で初期値指定が可能 配列は1次元 制御構造は while, for, if (else節なし) 入出力は標準入出力のみ 入力は式中に e.g. m= (inputint*67)/7; 出力は出力文 e.g. outputint (k);   メソッド・関数の定義機能無し プログラム例は指導書 付録A

実習で作成するコンパイラ K19 VSM K19 VSM Java K19 VSM JBC Java JBC M VSM M JBC M 原始言語 : K19言語(C風言語) 目的言語 : VSM(Virtual Stack Machine)アセンブラ言語 記述言語 : Java K19 sort.k VSM sort.asm K19 VSM Java Kc.java 作成するコンパイラ K19 VSM JBC Kc.class Java JBC M javac 既存のコンパイラ VSM M vsm 授業で配布する インタプリタ JBC M java 既存のインタプリタ

コンパイラの構成 原始プログラム K19言語 字句解析 構文解析 表管理 制約検査 中間コード生成 最適化 目的コード生成 字句解析誤り処理 表管理 構文解析 構文解析誤り処理 制約検査 制約検査誤り処理 中間コード生成 最適化 目的コード生成 目的プログラム VSMアセンブラ言語

処理の流れ outputint (ab); 字句解析系 “outputint” “(” 変数名 “)” “;” 構文解析系 マイクロ構文の文法に従い解析 “outputint” “(” 変数名 “)” “;” 構文解析系 マクロ構文の文法に従い解析 <outputint_st> ::= “outputint” “(” <exp> “)” “;” コード生成系 VSMアセンブラの文法に従い生成 1. PUSH 1 2. OUTPUT

プログラムの構造 (字句解析系・構文解析系) FileScanner.java LexicalAnalyzer.java Kc.java ファイル探査部 字句解析部 構文解析部 Token char char nextChar(); //1文字読み込む Token nextToken(); // トークンを切り出す void parse<A>(); // 非終端記号<A>を // 解析をする Token.java K19言語 原始プログラム トークン定義部 Symbol.java boolean checkSymbol(Symbol); // トークンを識別する トークン名列挙部

プログラムの構造(コード生成系) Kc.java PseudoIseg.java Instruction.java 構文解析部 命令表格納部 Instruction.java void parse<A>(); // 非終端記号<A>を // 解析をする int appendCode(); // 命令を加える void replaceCode(); // 命令を変更する void dump2file(); // 命令を出力する 命令部 Operetor.java VarTable.java 命令名列挙部 変数表格納部 Var.java boolean registerNewVariable(); // 変数を加える boolean exist(); // 変数の存在判定 boolean checkType(Type); // 型識別 変数部 VSMアセンブラ 目的プログラム Type.java 型名列挙部

実習の概要 準備 (第1~3週) Javaの復習 (ファイル入出力、変数表の作成) 字句解析 (第4~6週) 構文解析 (第7~9週) 準備 (第1~3週)  Javaの復習 (ファイル入出力、変数表の作成)  VSMの構造の理解 (手動コンパイル) 字句解析 (第4~6週) 構文解析 (第7~9週) コード生成 (第10~12週) 拡張 (第13週~)

成績について 提出されたプログラム : 70% 週次レポート : 10% インタビューテスト : 20% 字句解析プログラム、構文解析プログラム、コード生成プログラム等 週次レポート : 10% 実習ノート インタビューテスト : 20% 字句解析部、構文解析部、コード生成部

課題プログラムの提出 以下のスケジュールでコンパイラの完成を目指してください 提出はそれぞれ次の週の実習開始時 第4週 小規模マイクロ構文に対する字句解析プログラム 第6週 字句解析プログラム 第9週 構文解析プログラムの完成と試験 第12週 VSMコード生成プログラムの完成と動作確認 他人のプログラムを写して提出した場合,写した者も写させた者も,不合格となる.必ず自分の力で完成させること.

作成途中プログラムの提出 毎週授業開始時および授業終了時に、作成途中プログラムを提出してください 開始時のプログラムと終了時のプログラムを比較し、その差が少ない場合は警告を出します 充分に予習を行い、180分の授業時間を有効に使えるように準備しておいてください

インタビューテスト 授業中、何回かインタビューテストを行います 教員が作成したプログラムに関する質問をしますので答えてください  授業中、何回かインタビューテストを行います  教員が作成したプログラムに関する質問をしますので答えてください  自分で作成したプログラムなら当然答えられる質問をしますので、答えられない場合は、他人のプログラムを写したとみなします 第6,7週 字句解析部についてのインタビューテスト 第9,10週 構文解析部についてのインタビューテスト 第12,13週 コード生成部についてのインタビューテスト

今日の実習内容 準備(必要なファイルのダウンロード) 指導書 p.7 問題2.1, 2.2 k19言語プログラムの作成  Kc19によるコンパイルと vsm による実行 指導書 付録D VSMの復習  p.57 問題D.1  p.61 問題D.2

準備 公式ページ(http://www.info.kindai.ac.jp/project1)  から教材(projI19.tgz)のダウンロード projI19 フォルダの移動 ダウンロードフォルダにて、projI19.tar をダブルクリック projI19フォルダを書類フォルダ(~/Documents) に移動 projI19 フォルダの中身を確認   ProjI19.tar kc material submitK19.sh

教材 ProjI19.tar: エクリプスのプロジェクトファイル kc: submitK19.shで使用される提出用ディレクトリ (触る必要なし) material : LexerAnswers: LexicalAnalyzer テスト用 *.k: K19言語によるサンプルプログラム  kc: 完成品の class ファイル vsm: バーチャルスタックマシン本体 submitK19.sh: 提出用シェルスクリプト

ProjI19 プロジェクトのインポート エクリプスを起動 パッケージ・エクスプローラーをマウスで右クリック [インポート]を左クリックすると、[インポート]というタイトルのついた窓が現れる [一般]→[既存プロジェクトをワークスペースへ]を選択 [次へ]をクリック [アーカイブ・ファイルの選択(A):] にチェックを入れる [参照]をクリック [インポートするプロジェクトを含むアーカイブの選択]というタイトルの窓が現れるので、 ~/Documents/projI19/ProjI19.tar を選択 [プロジェクト:] 内で ProjI19 にチェックを入れて[完了]をクリック 今後全てのプログラムは、この中のkcパッケージ内に作成する

デフォルト文字コードをUTF-8へ kcパッケージ内のJavaファイルを Eclipseで 開くと文字化けする人だけ [ウィンドウ]→[設定]→[一般]→[ワークスペース] テキスト・ファイル・エンコード枠内の「その他(O)」 にチェック 「UTF-8」と直接入力→ [適用(A)]→[OK]