比較プログラム言語論 平成17年5月18日 森田 彦.

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 知能情報学部 新田直也. 講義概要  私の研究室: 13 号館 2 階 (13-206)  講義資料について :  参考図書 : 河西朝雄 : 「原理がわかる プログラムの法則」,
Advertisements

プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
第1回 確率変数、確率分布 確率・統計Ⅰ ここです! 確率変数と確率分布 確率変数の同時分布、独立性 確率変数の平均 確率変数の分散
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
コンパイラ 2011年10月17日
プログラミング入門 (教科書1~3章) 2005/04/14(Thu.).
データ構造とアルゴリズム論 第6章 探索のアルゴリズム
計算の理論 I 決定性有限オートマトン(DFA) と 非決定性有限オートマトン(NFA)
データ構造と アルゴリズム 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 知能情報学部 新田直也.
5.チューリングマシンと計算.
5.チューリングマシンと計算.
計算の理論 I ー DFAとNFAの等価性 ー 月曜3校時 大月 美佳.
授業展開#11 コンピュータは 何ができるか、できないか.
東京工科大学 コンピュータサイエンス学部 亀田弘之
プログラミング言語論 理工学部 情報システム工学科 新田直也.
情報科学1(G1) 2016年度.
データ構造と アルゴリズム 知能情報学部 新田直也.
心理学情報処理法Ⅰ コンピュータ言語の歴史.
プログラムはなぜ動くのか.
コンパイラ 2012年10月15日
コンパイラ 2012年10月22日
コンパイラ 2011年10月24日
シミュレーション演習 G. 総合演習 (Mathematica演習) システム創成情報工学科
比較プログラム言語論 平成16年5月19日 森田 彦.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
チューリング機械 状態の有限集合 ヘッドの方向を表す。 L:1コマ左へ R:1コマ右へ テープ記号の有限集合 入力記号の有限集合 動作関数
形式言語とオートマトン2013 ー有限オートマトンー 第5日目
形式言語の理論 5. 文脈依存言語.
東京工科大学 コンピュータサイエンス学部 亀田弘之
プログラミング入門 電卓を作ろう・パートIV!!.
計算の理論 II Turing機械の合成 月曜5校時 大月美佳 2004/11/15 佐賀大学理工学部知能情報システム学科.
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
比較プログラム言語論 平成17年5月11日 森田 彦.
平成20年10月5日(月) 東京工科大学 コンピュータサイエンス学部 亀田弘之
計算の理論 II 前期の復習 -有限オートマトン-
計算の理論 I ε-動作を含むNFA 月曜3校時 大月 美佳.
計算の理論 I 正則表現とFAとの等価性 月曜3校時 大月 美佳 平成15年6月16日 佐賀大学知能情報システム学科.
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
東京工科大学 コンピュータサイエンス学部 亀田弘之
プログラミング言語論 第9回 情報工学科 木村昌臣 篠埜 功.
形式言語とオートマトン 中間試験解答例 2016年11月15実施 中島毅.
平成26年4月22日(火) 東京工科大学 コンピュータサイエンス学部 亀田弘之
計算の理論 I 決定性有限オートマトン(DFA) と 非決定性有限オートマトン(NFA)
コンパイラ 2012年10月1日
計算の理論 I 非決定性有限オートマトン(NFA)
電気・機械・情報概論 VBAプログラミング 第1回 2018年6月25日
情報基礎Ⅱ (第1回) 月曜4限 担当:北川 晃.
5.チューリングマシンと計算.
計算の理論 I -プッシュダウンオートマトン-
計算の理論 I ー正則表現とFAの等価性ー 月曜3校時 大月 美佳.
計算の理論 I プッシュダウンオートマトン 火曜3校時 大月 美佳 平成16年7月6日 佐賀大学知能情報システム学科.
形式言語とオートマトン 第14回 プッシュダウンオートマトンと全体のまとめ
自然言語処理2015 Natural Language Processing 2015
4.プッシュダウンオートマトンと 文脈自由文法の等価性
計算の理論 I NFAとDFAの等価性 火曜3校時 大月 美佳 平成16年5月18日 佐賀大学理工学部知能情報システム学科.
コンパイラ 2012年10月11日
比較プログラム言語論 平成16年5月12日 森田 彦.
オートマトンって? (Turing machine).
オブジェクト指向言語論 第一回 知能情報学部 新田直也.
情報数理Ⅱ 第10章 オートマトン 平成28年12月21日.
計算の理論 I -講義について+αー 火曜3校時 大月美佳 平成31年8月23日 佐賀大学理工学部知能情報システム学科.
自然言語処理2016 Natural Language Processing 2016
計算の理論 I ー ε-動作を含むNFA ー 月曜3校時 大月 美佳.
計算の理論 I プッシュダウンオートマトン 月曜3校時 大月 美佳 平成15年7月7日 佐賀大学知能情報システム学科.
計算の理論 II 多テープTuring機械 月曜4校時 大月美佳 平成16年11月29日 佐賀大学知能情報システム学科.
1.2 言語処理の諸観点 (1)言語処理の利用分野
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
アルゴリズム ~すべてのプログラムの基礎~.
Presentation transcript:

比較プログラム言語論 平成17年5月18日 森田 彦

レポート(5/11)総括 < テーマ > <興味を持った点> <感想>  < テーマ >  本日の講義で、あなたはどの様な点に最も興味を持ちましたか?そしてその理由は?それらをできる限り具体的に、200字~400字程度で記述して下さい。  <興味を持った点> コンパイルの過程(流れ) 最適化 コンパイラとインタプリタ  <感想> コンパイルの過程を理解してからプログラミングを行った方が良い?

興味Ⅰ-コンパイルの過程①- 今回の講義で最も興味を持ったのはプログラムの実行のながれです。プログラム実行と言っても内部ではいくつもの工程を経て実行されていることがわかったからです。特にその工程の中にある翻訳(コンパイル)ですが、単に構文を解析するだけではなく、プログラムの無駄な部分を最適化することによって処理時間の短縮や容量の縮小などの向上を図っている重要な工程であることを知りました。今までJBuilderで何気なくプログラムの実行を行っていましたが、その中でも最適化が行われていたことは知りませんでした。

興味Ⅰ-コンパイルの過程②- 私が今日の講義で興味を持ったことは、コンパイルの過程です。入力された原始プログラムから一句一句の字句に分解していることははじめて知りました。いっぺんに処理していると思っていたのでコンピュータというのは何を処理するにも分解してから、効率を上げるための最適化と同じように、簡略化してからひとつひとつ処理していくものなのだと思いました。 今日の講義で一番興味を持った事は、コンパイルの過程です。 字句・構文・意味の解析や、最適化などの面倒な作業を、人間に代わってコンピュータが自動でやってくれるし、こちらの方に間違いがない限りその結果に間違いが生じないというのも、一見当たり前のようですが実はすごい事だと思います。

興味Ⅱ-最適化①- 今日の講義では『コンパイルの過程』に興味を持ちました。その中でも『最適化』です。プログラミングをするときに何気なく書いているもの、たたきこみ、共通式に置換等。コンパイラにそんな機能があるとは知りませんでした。あらかじめたたきこみ等を使用してプログラミングしなくても結局は同じ速さで処理をするプログラムが出来るのですね。小さなプログラムならたいして関係ないのでしょうが、大きなプログラムであらかじめ最適化されたもの、してないものだとどのぐらいコンパイルに時間がかかるのかふと気になりました。

興味Ⅱ-最適化②- 今までどれがうまいプログラミングコードでどれが冗長なプログラミングコードかが、いまいちピンときませんでした。ただ文字列をそろえて見やすければいいのかな、といった程度のことでした。しかし、この最適化の「共通式の置換」「サブルーチンの組み込み」を見て、なるほどと思いました。(中略)・・・プログラミングの時間、領域の効率化を図る。それが出来ているコードがうまいプログラミングなんだと実感しました。 最適化によるメリットは理解できましたが、最適化された後のデメリットも詳しく知りたいと思いました。 <質問>

最適化と分かりやすさについて 無駄な処理をなくすことは必要 しかし、一般に最適化を進めるとプログラムの処理内容が分かりにくくなる。 <例>半径rの円の面積Sと球の体積Vを求める場合 double pi=3.14; S=pi*r*r; V=4*pi*r*r*r/3; double pi=3.14; S=pi*r*r; V=4*S*r/3; 最適化 原則:プログラムは分かりやすく。後はコンパイラの最適化に任す。 しかし、処理時間のかかるプログラムでは、プログラマによる最適化の工夫(アルゴリズムの工夫も含む)が必要。

最適化とデフラグの関係は? 最適化はプログラムの時間効率と領域効率を向上させるものということですが、コンパイルの最適化とディスクデフラグの最適化とは何か違う点があるのでしょうか ? デフラグ:Defragmentationの略。             → ディスク最適化とも言う。 記憶装置(ハードディスク)内のファイル(の記憶場所)を並べ替え、空き領域の断片化を最小にすること。 基本的には、コンパイルの最適化とは別物

ディスク・デフラグ

興味Ⅲ-コンパイラとインタプリタ①- 今回の講義で、私が一番興味を持ったのが、コンパイラの場合とインタプリタの場合の実行結果までの流れの違いである。コンパイラもインタプリタも高水準プログラムを翻訳し、実行して結果を出すという作業であるが、コンパイラはデバックに時間はかかるが、実行速度が速いという特徴があり、インタプリタは逆にデバックには便利だが実行速度は遅いという特徴があるということであった。    それを踏まえて、一見コンパイラの方が実行速度が速い分便利でいいじゃないかと思ったが、インタプリタはその分結果が出るまでの細かい作業を確認しながらできるという利点があることを聞いて、それぞれにちゃんとその時々の用途に分けて必要とされる要素があるのだととても感心した。

興味Ⅲ-コンパイラとインタプリタ②- 今回の講義で興味を持ったのは、コンパイラとインタプリタの違いです。まず、コンパイラとインタプリタの違いとは、ただ機械語に変換する際に、動作がひとつひとつ区切って行うか、一度にすべて行ってしまうかの違いだけと思っており、動作内容自体は、まったく同じことを行っていると思っていた。そして、どちらかというと、インタプリタのほうが、実行速度が速いと思っていた。 コンパイラは、全訳した文を読み上げる事に対応。 インタプリタは同時通訳に対応。

興味Ⅲ-コンパイラとインタプリタ③- 今回の講義で興味を持ったことは、コンパイラとインタプリタです。コンパイラではデバックに手間がかかるが、実行速度が速いという点が、インタプリタではデバックには便利だが、実行速度が遅いという点がある。この場合、どちらのほうがいいのだろうか。たいていは、使用目的で変えるのだろうが、コンパイラとインタプリタはどういう風に使い分けられているのだろうか。 コンパイラとインタプリタではどちらが主流なのか気になった。 インタプリタ→ BASICで導入(デバッグの有利さを優先)。その他、 Prologや JavaScript、Perl(パール)などで採用。 コンパイラ→ その他のほとんど全ての言語で採用

感想 普段JBuilderなどで打っている字句がこのような意味をもっているとは知らなかったので、この字句(の意味)を踏まえてプログラムを打つと理解するのが速くなるのではないでしょうか?最適化のたたきこみをみると非常にプログラムがわかりやすく感じました。プログラムを打つ場合こういう風に単純に考えれば結構できそうな気がしました。 理解するにはこういう処理などの過程を知ったほうがいいと思いました。 私は簡単なプログラミングの作業でもアルファベット一つ間違えただけで認識してくれないコンピュータに多々腹が立ちましたが、一文字一文字がきちんと意味を持ってるんだなという気がしました。 コンパイルの過程はプログラミングの理解に有益?

<本日のテーマ> 翻訳システム(コンパイラ)の数学理論 <内容> チューリング機械 オートマトン 形式文法とオートマトンの関係

計算可能とは? チューリングの考え 1937年 アラン・チューリング(Turing) 計算理論のモデルとしてチューリング機械を提唱 計算可能とは? チューリングの考え 1937年 アラン・チューリング(Turing) 計算理論のモデルとしてチューリング機械を提唱 計算とは(チューリングの考え)   紙に書かれた記号を読み、それに基本的な思考操作を加えて新しい記号を書く。→この操作の繰り返し チューリング機械   上の“計算”を機械的に実行するモデル→計算過程をある理想的な機械で表現→計算可能とはどういうことかを研究した。

チューリング機械 テープ、ヘッド、有限状態制御部 コンピュータの原型モデル チューリング機械の動作 ①ヘッドが見ている記号を書き換える → 記憶装置 → 入出力装置 コンピュータの原型モデル → CPU チューリング機械の動作   ①ヘッドが見ている記号を書き換える   ②ヘッドを左に動かす   ③ヘッドを右に動かす   ④計算を終了する

チューリング機械の例 アルゴリズムに対応! 状態遷移関数で表現→計算可能 記号”0”を記号”1”に置き換える 有限状態制御部の規則(状態遷移関数)   (Q1,1)=(Q2,1,R)    (Q2,B)=(Q2,B,L)    (Q2,1)=(S,0,R)   Q1,Q2,S:状態   1,0,B:テープの記号   R,L:ヘッドの移動 アルゴリズムに対応! 1 B ・・・ Q1 1 B ・・・ Q2 1 B ・・・ Q2 0 B ・・・ S 状態遷移関数で表現→計算可能

オートマトン オートマトン(automaton)  元々は、人や動物のまねをする装置を指す→ロボット→自動計算機械のモデル→チューリング機械がその代表例  情報科学では・・・ 状態遷移関数によって定義された操作を繰り返す仮想機械を指す。 状態遷移関数の種類によって色々なオートマトンを定義可能

有限オートマトン テープ、ヘッド、有限状態装置から構成 ヘッドは一方向のみ動く 有限オートマトンMの定義 M=(Q,Σ,δ,q0,F)  ヘッドは一方向のみ動く 有限オートマトンMの定義  M=(Q,Σ,δ,q0,F)  Q:状態、Σ:入力記号、δ:状態遷移関数  q0:初期状態、F:受理状態

有限オートマトンの例 Q={q0,q1,q2,}、 Σ={a,b}、 F={q2} δ(q0,a)=q1, δ(q0,b)=q0 , ・・・ 入力記号 受理状態 状態 Q={q0,q1,q2,}、 Σ={a,b}、 F={q2}  δ(q0,a)=q1,  δ(q0,b)=q0 ,  δ(q1,a)=q1,  δ(q1,b)=q2 ,  δ(q2,a)=q1,  δ(q2,b)=q0 入力記号“ab”が受理されるか?  δ(q0,ab)= δ(δ(q0,a),b)=δ(q1,b)=q2 入力記号”ba”は受理されるか? 形式文法と似ている・・・? 受理! 受理されない! δ(q0,ba)= δ(δ(q0,b),a)=δ(q0,a)=q1

形式言語理論との関係 言語の種類 受理するオートマトン 句構造文法言語 チューリング機械 文脈依存文法言語 線形有界オートマトン 文脈自由文法言語 プッシュダウンオートマトン 正規文法言語 有限オートマトン コンパイラ(+コンピュータ)→オートマトンの一種

オートマトンの考え 人間の計算(思考)過程→状態の変化 状態を記号で表現すれば→記号の変化規則を状態遷移関数で表現できる 状態遷移関数で、“思考”を数学的に表現できる。→言語も“思考”の一例 プログラミング言語も(適当な状態遷移関数を定義できれば)コンピュータ(オートマトン)で理解(解読)可能 計算可能な問題はコンピュータで全て処理可能

ALGOL60プロジェクトの背景 形式文法理論の誕生 チューリング機械に始まるオートマトン理論の発展 オートマトン理論と形式文法理論の融合 プログラミング言語理論の基礎が確立  ‘60年代はコンパイラ開発の時代 ’70年代はプログラミング方法の研究へ

第5回目レポート  < テーマ >  ①あなたはコンパイルの過程を理解してからプログラミングを行った方が良いと思いますか?YesかNoを答えた上で、その理由(あなたの考え)を記述して下さい。 ②本日の講義で、あなたはどの様な点に最も興味を持ちましたか?そしてその理由は?それらをできる限り具体的に、200字~400字程度で記述して下さい。 なお、上の記述を行った上で,質問や以前のレポートに対するコメント等を付加しても結構です。 提出先:hiko@edu.sgu.ac.jp  件名:「学籍番号(半角)+半角空白+氏名」を記入して下さい。    例) s03xxxx 学院太郎

計算可能とは? 例1)33を求める。→計算可能 例2)3∞を求める。→計算不能 例3)フェルマーの定理   X1=3   X2=3*X1=3*3=9   X3=3*X2=3*9=27 例2)3∞を求める。→計算不能 例3)フェルマーの定理    方程式 Xn+Yn=Zn (n は3以上の自然数)を満たす自然数解(X,Y,Z)はない。→約350年間証明不能 →1995年に解決 → 計算可能な問題に!  こういった個々の問題の証明ではなく、「一般に計算可能とはどういうことか?」と言う点を追求しようとした。 <チューリングのねらい>

33の計算 2進数で表すと・・・ X1=3 X2=3*X1=3*3=9 X3=3*X2=3*9=27 1 0 1 0 1 0                 2進数で表すと・・・  X1=3                  X2=3*X1=3*3=9     X3=3*X2=3*9=27  1 0 1 0 1 0 適当な状態遷移関数を定義すればチューリング機械で計算できる。