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

Slides:



Advertisements
Similar presentations
プログラミング言語論 第3回 BNF 記法について(演習付き) 篠埜 功. 構文の記述 プログラミング言語の構文はどのように定式化できるか? 例1 : for ループの中に for ループが書ける。 for (i=0; i
Advertisements

2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
オブジェクト指向 言語 論 知能情報学部 新田直也. 講義概要  私の研究室: 13 号館 2 階 (13-206)  講義資料について :  参考図書 : 河西朝雄 : 「原理がわかる プログラムの法則」,
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
比較プログラム言語論 平成16年4月28日 森田 彦.
アルゴリズムとデータ構造 第2回 線形リスト(復習).
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
C言語によるプログラミングスタイル 制御システム工学科 山北 昌毅.
言語処理系(1) 金子敬一.
比較プログラム言語論 平成17年5月18日 森田 彦.
プログラミング基礎I(再) 山元進.
コンパイラ 2011年10月17日
Java I 第2回 (4/18)
プログラミング入門 (教科書1~3章) 2005/04/14(Thu.).
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
オブジェクト指向言語論 知能情報学部 新田直也.
プログラミング基礎I(再) 山元進.
情報とコンピュータ 静岡大学工学部 安藤和敏
プログラミング言語論 第6回 型 情報工学科 篠埜 功.
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
応用情報処理V 第1回 プログラミングとは何か 2004年9月27日.
プログラミング言語論 理工学部 情報システム工学科 新田直也.
プログラミング言語論 理工学部 情報システム工学科 新田直也.
情報科学1(G1) 2016年度.
プログラミング論 II 電卓,逆ポーランド記法電卓
  【事例演習6】  数式インタプリタ      解 説     “インタプリタの基本的な仕組み”.
応用情報処理V 第1回 プログラミングとは何か 2003年9月29日.
オブジェクト指向 プログラミング 第一回 知能情報学部 新田直也.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
コンパイラ 2012年10月15日
シミュレーション演習 G. 総合演習 (Mathematica演習) システム創成情報工学科
比較プログラム言語論 平成16年5月19日 森田 彦.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
【プログラミング応用】 必修2単位 通年 30週 授業形態:演習.
プログラミング言語入門 手続き型言語としてのJava
関数の定義.
最適化の方法 中田育男著 コンパイラの構成と最適化 朝倉書店, 1999年 第11章.
プログラミング 平成23年12月21日 森田 彦.
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
プログラミング基礎a 第1回 ハードウェアとソフトウェア プログラミング総論 ~プログラミング言語とは~
プログラミング言語論 第10回 練習問題解答例 情報工学科 篠埜 功.
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
Fortranについて 高エネルギー加速器研究機構 平山 英夫.
プログラミング基礎a 第1回 ハードウェアとソフトウェア プログラミング総論 ~プログラミング言語とは~
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
プログラミングⅠ 平成30年10月22日 森田 彦.
プログラミングⅠ 平成31年1月7日 森田 彦.
プログラミング言語論 第9回 情報工学科 木村昌臣 篠埜 功.
コンパイラ 2011年10月20日
C言語 はじめに 2016年 吉田研究室.
プログラミング演習I 2003年4月30日(第3回) 木村巌.
コンパイラ 2012年10月1日
プログラミング言語論 第10回 情報工学科 篠埜 功.
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
第6回放送授業.
言語プロセッサ 第12日目 平成20年1月9日.
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
コンパイラ 2012年10月11日
情報とコンピュータ 静岡大学工学部 安藤和敏
比較プログラム言語論 平成16年5月12日 森田 彦.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
プログラミング 平成24年12月11日 森田 彦.
オブジェクト指向言語論 第一回 知能情報学部 新田直也.
skill-net(MILESTONE CAI,笈川他,1982)[Fortranの課題選択など]
情報処理Ⅱ 2005年11月25日(金).
1.2 言語処理の諸観点 (1)言語処理の利用分野
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
Presentation transcript:

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

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

レポート抜粋ー言語発展の流れ① ノイマン型コンピュータの登場から、ウィルクスの苦悩が始まり、手間がかかるという問題から、高水準な言語が必要になってきた。アセンブリ言語からA-0、FORTRAN、COBOL、ALGOLと広範囲に普及するための簡単な(言語)仕様を(求めて)、より高水準言語へと進化させていったこと、今回は何がではなく、この流れに興味を持った。 プログラミング言語が作られていく中でいかに簡単に、早く、使えるか、また向き不向きなど、初期のプログラミング言語の問題点など現代のプログラミング言語ができるまでの流れに興味を持った。ALGOLの開発によって現代のC言語やPASCALなどのベースになったのは本当に偉大だったと思う。

レポート抜粋ー言語発展の流れ② 現在広く扱われているプログラミング言語が、今の使いやすい形式に至るまでに多くの研究者達の困難があったのだということがわかり感銘を受けた。チョムスキーが発表した形式文法理論は、文脈の主語述語の流れのようにスムーズに理解できるものと知り、それまでのプログラミング言語の基本的構成から変えてしまう業績というのにも納得しました。ここから発展し、後継言語の基盤ともなったALGOL60の仕組に興味を持ちました。最初はJavaにばかり興味があったのですが、歴史を知ることでよりプログラミングの奥深さに触れることができたような気がします。

レポート抜粋ーALGOL60 ① 私が今回の講義で興味を持った点は、ALGOL60です。当時の研究者が共同で開発した、文脈自由文法言語として、それ以後のプログラミングの主体になり、構文規則の「文の区切りに;を用いる」や「使用する変数は全て宣言する」などはC言語やPASCALなど後続言語に受け継がれ、プログラミング言語の発展に大きな影響を与えたと思ったからです。 僕はALGOL60プロジェクトのことにとても興味を持ちました。なぜなら、このプロジェクトによって費やされた時間や人の努力というものが、どれほどすごいものであったのかが、何となくですが、ものすごく凄まじいものを感じたからです。

レポート抜粋ーALGOL60 ② 私は、講義の最後のALGOL60のプロジェクトの一部メンバーがプログラミングの手法の研究をしていたところに興味を持ちました。それまでのプログラミング言語の発展には、より人間にわかりやすい高水準言語の開発が主な目的だったのに対し、正しい(バグのない)プログラミングとはどういうものなのか、ということに関心をもったのは、それまでとは別の視点からプログラミング言語を研究し、新しい言語を開発するという可能性を広げられるという意味でもすばらしいことだと感じたからです。 (前略)・・・ALGOL60により、バグの無いプログラミングという新しい手法の研究が行われたことから、その先どういう風に進歩していくのか気になった。

レポート抜粋ー形式文法理論① 私が今日の授業で最も興味を持った点は、プログラミング言語は主に文脈自由文法で成り立っているということです。文脈依存文法は書き換えをする際に前後の記号に依存して文ができるわけですが、それに比べて文脈自由文法は構成要素が決まると文が生成されるということでした。そこで興味を持ったのが、文脈自由文法であると日本語として成り立たない場合もあると思うのですが、プログラミング言語としては成り立つという点でした。日本語の意味として文が成り立たなくても、プログラミング言語としての意味は成り立ってコンピュータに命令を与えられるということがとても不思議に思えました。

文脈依存性の導入例-Java言語の場合 問) 以下の結果はどう表示される? 連結 加算 文脈依存! int a=1; int b=2; 問) 以下の結果はどう表示される? void jButton1_actionPerformed(ActionEvent e) { int a=1; int b=2; String Ans=“和=” + ( a+b ); jTextField1.setText(Ans); } 連結 加算 文脈依存!

レポート抜粋ー形式文法理論② 今日の授業で一番興味をもったのは数理言語理論が発展して形式文法理論ができたことです。この理論ができていなければ、今のプログラム言語もできていなっかったと思うし、文法の種類が4つあることにもビックリしたがプログラミング言語は文脈自由文法(言語)ということを知れたことが一番ためになったしもっと詳しく知りたいと思った。 チョムスキーの文法の種類には種類が4つあって、日本語のように、主部、述部、動詞、名詞、助詞など組み合わせて、文となるものや、規則がないものなどがあるということに驚いた。去年プログラミング演習の授業を受けていたけど、規則があって、プログラミングとは、絶対にその式通りにいかなくてはいけないものだと思っていたので、新しい発見だった。

レポート抜粋ーなでしこ 一番興味を持ったのは日本語でプログラミングが出来る「なでしこ」についてでした。登録されている日本語の文法通り記述するだけでプログラムが組めるなんて驚きです。 日本語プログラム「なでしこ」はプログラミングの敷居を低くするかもしれないのでとても注目できる言語だと思いました。 日本語のプログラミング言語というものにも惹かれました。アルファベットのプログラミングは僕にはわかりずらく、日本語でプログラムが出来たらどんなに楽だろうと思いました。しかし、プログラミング入門には良いかもしれないが、難しいプログラムを行う場合に困難になってくるので、一概に良いものとは言えない。

レポート抜粋ー質問 気になったのは「なでしこ」が日本で作られたように、他のプログラミング言語の中で日本人が開発したものはないのでしょうか?どのプログラミング言語も海外で開発されたものばかりなので・・・・。 ウィルクスはA-0やFORTRANの開発に携わっていたのですか? FORTRANは数学的な計算用向けに開発されたのに、なぜ会計などの事務処理には不適合だったのだろうか? 日本語プログラミング言語として「なでしこ」を挙げていましたが、「ひまわり」という日本語プログラミング言語が何年か前から気になっております。

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

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

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

プログラム実行までの流れ 原始プログラム 翻訳(コンパイル) 目的プログラム リンケージエディト 複数のモジュールをリンク 実行結果 実行 実行可能プログラム 第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  件名:「学籍番号(半角)+半角空白+氏名」を記入して下さい。    例) s03xxxx 学院太郎

Java言語の戦略(コンパイラとインタプリタの融合) なぜ、JavaはJavaの実行環境があれば、どのOSや機種でも動作するのに、他の言語は、特定のOSや機種に制限されてしまうのか? ソース 翻訳 JVM Windows JVM Mac JVM Linux 実行 <Java言語> バイトコード ソース 翻訳 機械語Windows 機械語Mac 機械語Linux 実行 <通常の言語> 機械語はプラットフォーム毎に異なる。