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

Slides:



Advertisements
Similar presentations
2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
Advertisements

オブジェクト指向 言語 論 知能情報学部 新田直也. 講義概要  私の研究室: 13 号館 2 階 (13-206)  講義資料について :  参考図書 : 河西朝雄 : 「原理がわかる プログラムの法則」,
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
比較プログラム言語論 平成16年4月28日 森田 彦.
アルゴリズムとデータ構造 第2回 線形リスト(復習).
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
本日のスケジュール 14:45~15:30 テキストの講義 15:30~16:15 設計レビュー 16:15~16:30 休憩
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
言語処理系(1) 金子敬一.
比較プログラム言語論 平成17年5月18日 森田 彦.
コンパイラ 2011年10月17日
Java I 第2回 (4/18)
プログラミング入門 (教科書1~3章) 2005/04/14(Thu.).
JavaによるCAI学習ソフトウェアの開発
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
オブジェクト指向言語論 知能情報学部 新田直也.
プログラミング言語論 第6回 型 情報工学科 篠埜 功.
プログラミング言語論 理工学部 情報システム工学科 新田直也.
プログラミング言語論 理工学部 情報システム工学科 新田直也.
情報科学1(G1) 2016年度.
2006/10/19 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井英二郎
情報教育論 第9回 仮定文の仕組み 政策・メディア研究科 岡田 健.
  【事例演習6】  数式インタプリタ      解 説     “インタプリタの基本的な仕組み”.
オブジェクト指向 プログラミング 第一回 知能情報学部 新田直也.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
コンパイラ 2012年10月15日
2007/1/11 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
発表者 2011/01/08 楽しい256バイトイントロの 世界 発表者 2011/01/08.
比較プログラム言語論 平成16年5月19日 森田 彦.
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
プログラミング言語入門 手続き型言語としてのJava
最適化の方法 中田育男著 コンパイラの構成と最適化 朝倉書店, 1999年 第11章.
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
プログラミングⅠ 平成30年10月29日 森田 彦.
プログラミング基礎a 第1回 ハードウェアとソフトウェア プログラミング総論 ~プログラミング言語とは~
プログラミング言語論 第10回 練習問題解答例 情報工学科 篠埜 功.
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
比較プログラム言語論 平成17年5月11日 森田 彦.
Fortranについて 高エネルギー加速器研究機構 平山 英夫.
平成20年10月5日(月) 東京工科大学 コンピュータサイエンス学部 亀田弘之
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
プログラミング基礎a 第1回 ハードウェアとソフトウェア プログラミング総論 ~プログラミング言語とは~
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
プログラミングⅠ 平成31年1月7日 森田 彦.
プログラミング言語論 第9回 情報工学科 木村昌臣 篠埜 功.
コンパイラ 2011年10月20日
C言語 はじめに 2016年 吉田研究室.
プログラミング演習I 2003年4月30日(第3回) 木村巌.
コンパイラ 2012年10月1日
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
情報基礎Ⅱ (第1回) 月曜4限 担当:北川 晃.
ガイダンス 電子計算機 電気工学科 山本昌志 1E
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語 1.
プログラミング言語論 第10回 情報工学科 篠埜 功.
4.プッシュダウンオートマトンと 文脈自由文法の等価性
第6回放送授業.
言語プロセッサ 第12日目 平成20年1月9日.
標準入出力、変数、演算子、エスケープシーケンス
Visual Studio 2013 の起動と プロジェクトの新規作成 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
コンパイラ 2012年10月11日
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
オブジェクト指向言語論 第一回 知能情報学部 新田直也.
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
情報処理Ⅱ 小テスト 2005年2月1日(火).
C#プログラミング実習 第1回.
1.2 言語処理の諸観点 (1)言語処理の利用分野
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
Presentation transcript:

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

レポート(4/28)総括 < テーマ > <回答結果> 高水準言語発展の歴史(経緯)に最も関心 ALGOL60プロジェクトの位置づけを再認識  < テーマ >  本日の講義で、あなたが最も興味を持った点はどのような点ですか?講義の全体的な感想と共に、できる限り具体的に、200字~400字程度で記述して下さい。 言語の歴史 ALGOL60 形式文法 その他 <回答結果> 高水準言語発展の歴史(経緯)に最も関心 ALGOL60プロジェクトの位置づけを再認識 形式文法理論に知的興味

レポート抜粋ー言語発展の歴史① (前略)プログラミング言語が今日まで発展してきたのは、プログラマーや言語の開発者達が、常にそれに満足していなかったためだろう」ということです。一度その言語に満足してしまえば、そこでプログラミング言語の歴史は終わってしまったかもしれないということを考えると、やはり言語の開発者達やプログラマーは常にシンプルで高性能な言語を求めていたのだろうと考えました。(中略) また、昨年習ったJava言語の文の終わりには「;」という規則は、ALGOLから発展されていると知り、プログラミング言語の歴史というものはただ単に「昔は~であった」というだけでなく、今日にも生かされているのだと改めて知る事が出来ました。

レポート抜粋ー言語発展の歴史② 今日の講義で興味・関心を持ったことはコンピュータのプログラムを人間の考えかたに近づけるということです。単純にすごいことだと思った。 もし 本当に人間と同じような考えかたでプログラムできるとしたら、もっと色々なことがコンピュータによって出来るようなきがします。 私個人としては、プログラム言語がもっと簡単になり誰にでも操れるようなプログラム言語がでてくることを期待しています。

レポート抜粋ーALGOL60 今日の講義で興味を持ったことは、ALGOL60についてです。このALGOL60によって、PASCALやC言語が継承されていったことは、この言語世界でも歴史がちゃんとあることを感じました。そして今もなお、プログラミング言語のプロジェクトの研究が行われ、さらにハグのない、正しいプログラミングを開発しようとしているのだと思うと、どこまでプログラミング言語が発展していくのか、そして進化していくのか予想がつきません。もっと性能が優れた言語、誰もが使いやすい言語、などが今後作られていけばいいと思いました。ウィルクスの苦悩や、チョムスキーの形式文法論を無駄にしないようにするためにも、今後も発展していくべきだと思います。

レポート抜粋ー形式文法理論 今回の講義でプログラミング言語が文法によって構成されているということがおどろきました。しかも文法にも種類があること。 今までプログラミングやアルゴリズム論をやってきてもぜんぜん気づきませんでした。といことは、まったく意味もわからずやってきたということで、意味を理解していてやってたいらもっとわかったのかなとおもいました。もったいなことをしたと思います。プログラミング言語は文脈自由文法が主で構成要素が決まったら文を生成できる。というのは要素を入力すればちゃんと意味の通る文になるということですよね?それをできるように作った人はすごいと思います。

レポート抜粋ー質問① (ALGOL60が)形式文法理論による文脈自由文法言語として制定され、当時の言語研究の到達点というのは、その時代の時に研究は止まってしまったということなのですか?なぜ完全に言語研究は到達したといえたのですか? 「エスペラント」っていう世界標準語を目標として作られた言語、あれもこの「形式文法理論」にのっとって開発!?されているのかちょっと疑問に思いました。

補足 エスペラント語 エスペラント→ザメンホフのペンネーム 1887年 ポーランドのザメンホフが提唱 世界共通の言語を目指す 補足 エスペラント語 1887年 ポーランドのザメンホフが提唱 世界共通の言語を目指す   より正確に言うと、目指したのは・・・  諸民族の対等な交流の手段としての中立言語 背景には、 「諸民族の平和と共存」 というテーマがある 成立時期は形式文法理論のはるか以前 エスペラント→ザメンホフのペンネーム 「希望しつつあるもの」という意味

レポート抜粋ー質問② A-0が上手くいかなかった一方、翌年のFORTRANが成功したようですが、A-0とFORTRANの違いは何だったのですか?  またもうひとつ質問なのですが、ALGOL68は規模が大きくなりすぎて次第に使われなくなっていったとおっしゃっていましたが、Javaはどうなのでしょう? Javaはパッケージがむやみに増えないように配慮されているとのことですが、現状ではあまりに重過ぎます。肥大したプログラム言語と同じように、重たいプログラム言語も淘汰されていくのではないのですか? Javaは現状、マイナーOSユーザに優しく面白くはあっても、快適ではありません。実際、力を入れていたはずの携帯端末方面では、auがBREWを使い始めています。 最適化

レポート抜粋ー4/14の質問への補足 1999年12月にDigital Mars社のWalter BrightがD言語を発表。 質問: C言語の次にD言語はリリースされるのでしょうか? 1999年12月にDigital Mars社のWalter BrightがD言語を発表。 C++やJava言語の後継に位置づけられる。 言語理論の完全性よりも、実用性を重視。 現在のコンパイラ理論の蓄積を結集して、とにかく、大きなシステムを効率よく開発できるように工夫。 日本語版(翻訳)サイト http://www.kmonos.net/alang/d/

プログラミング言語は分かりにくい!? 自分が気づいた点はプログラム言語の種類はたくさんありますがどれも簡単にはプログラムできないということです。それぞれの用途や適応により数多くの言語が生み出されたことは解りますし、簡単になってきていることも理解できます。しかし、簡単にプログラムできるほど手軽にはなっていないと思います。自分が理解できていないというのもあるかもしれませんが、関数がたくさんあることで似たような式も多く、どれを使えばいいのかわからないことも多々あります。計算式を自動的に検出してくれるなどの機能があれば楽になると思いますが、それだと逆にプログラミングの楽しみがなくなるのかなとも思いました。

プログラミング言語翻訳の仕組み <本日のテーマ> <内容> アセンブラとコンパイラ コンパイラとインタプリタ プログラム実行までの流れ コンパイルの過程   ① 字句解析、構文解析、意味解析   ② 最適化   ③ コード生成

アセンブラとコンパイラ 高水準プログラミング言語を実行するには 機械語への翻訳(変換)が必要 翻訳システムの名称  機械語への翻訳(変換)が必要 翻訳システムの名称  アセンブリ言語→機械語:アセンブラ  高水準言語→機械語:コンパイラ

コンパイラとインタプリタ コンパイラ インタプリタ 高水準言語プログラム 翻訳 翻訳・実行 デバッグに手間がかかる。 実行 実行速度が速い。 実行 デバッグには便利。 実行速度は遅い。 実行結果

プログラム実行までの流れ 原始プログラム 翻訳(コンパイル) 目的プログラム リンケージエディト 複数のモジュールをリンク 実行結果 実行 実行可能プログラム 第4回目レポートへ

コンパイルの過程 字句解析、構文解析、意味解析 最適化 コード生成 原始プログラム 中間言語1 中間言語2 目的プログラム プログラム実行までの流れへ

字句(・意味)解析 原始プログラムを字句に分解する。 字句:名前、定数、予約語、区切り記号 ・・・ int a,b; a=4;  ・・・  int 予約語 a 名前 , 区切り b 名前 ; 区切り a 名前 = 予約語 4 定数 ; 区切り b 名前 = 予約語 ( 区切り記号 a 名前 + 予約語 2 定数 ) 区切り記号 * 予約語 3 定数 ; 区切り

構文(・意味)解析 字句の並びが、文法的に正しいかどうかをチェックする。→ 文脈自由文法に沿って構文解析 構文解析結果を中間言語に表現 コンパイル過程へ 字句の並びが、文法的に正しいかどうかをチェックする。→ 文脈自由文法に沿って構文解析 構文解析結果を中間言語に表現 ポーランド記法、三つ組み、四つ組などの記法がある。 四つ組の場合:(演算子,被演算子1,被演算子2,結果)と表す。 例: b=(a+2)*3; の場合    (+,a,2,R1)    (*,R1,3,R2)    (=,R2,φ,b) R1,R2:レジスタ φ:空値(対応項目なし)

最適化 コンパイル過程へ 構造解析により生成された中間言語プログラム→冗長な部分を省き、プログラムの時間効率と領域効率を向上させる。→次のような方法(種類)がある。  ① たたみ込み  ② 共通式の置換  ③ 繰り返し文の再編  ④ レジスタ割り付けの再編  ⑤ 式評価の変更  ⑥ サブルーチンの組み込み

たたみこみ 演算結果の置き換え→事前に計算可能な変数については、その計算結果で置き換える。 例 a=3; b=a+8; b=11;

共通式の置換 複数回現れるが、その演算結果が同じとなる式→共通式 2度目以降に現れた共通式→最初の式に置換 x=3; x=3; y=2*x+4; ・・・ z=3*(2*x+4); x=3; y=2*x+4; ・・・ z=3*y;

繰り返し文の再編 繰り返し文の中で値が変化しない演算式があった場合は、それを繰り返し処理の前に移動する。 for (int i=1; i<=100; i++) { c=2; y[i]=c*i+2; } c=2; for (int i=1; i<=100; i++) { y[i]=c*i+2; }

頻繁に参照あるいは演算される変数の値をレジスタに格納しておく。 式評価の変更 演算順序の入れ換えにより、演算の回数を減らす。 レジスタ割付の再編  頻繁に参照あるいは演算される変数の値をレジスタに格納しておく。 式評価の変更  演算順序の入れ換えにより、演算の回数を減らす。 c:=a*x+a*y; c:=a*(x+y); 乗算の回数が1回減少

サブルーチンの組み込み 手続きや関数(Javaではメソッドに対応)を呼び出す箇所で、直接その処理を組み込む。 ・・・ double Heikin(int x, int y) { return (x+y)/2.0; } ・・・ z=Heikin(x,y); 呼び出し命令ではなく、直接、関数の処理を書き込む。

コード生成 最適化された中間言語プログラムから目的プログラム(機械語)を生成。 レジスタ 中間言語 ADD R3,R1,R2 アセンブリ言語 コンパイルの過程へ 最適化された中間言語プログラムから目的プログラム(機械語)を生成。 中間言語 ADD R3,R1,R2 アセンブリ言語 (+,a,2,R3) aの値 2 (a+2)の値 R1 R2 R3 レジスタ

第4回目レポート  < テーマ >  本日の講義で、あなたが最も興味を持った点はどのような点ですか?講義の全体的な感想と共に、できる限り具体的に、200字~400字程度で記述して下さい。 なお、上の記述を行った上で,質問や以前のレポートに対するコメント等を付加しても結構です。 提出先:hiko@edu.sgu.ac.jp  件名:「学籍番号(半角)+半角空白+氏名」を記入して下さい。    例) s02xxx 学院太郎