Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "比較プログラム言語論 平成17年5月11日 森田 彦."— Presentation transcript:

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

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

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

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

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

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

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

8 文脈依存性の導入例-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); } 連結 加算 文脈依存!

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

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

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

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

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

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

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

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

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

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

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

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

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

22 繰り返し文の再編 繰り返し文の中で値が変化しない演算式があった場合は、それを繰り返し処理の前に移動する。
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; }

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

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

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

26 第4回目レポート  < テーマ >  本日の講義で、あなたはどの様な点に最も興味を持ちましたか?そしてその理由は?それらをできる限り具体的に、200字~400字程度で記述して下さい。 なお、上の記述を行った上で,講義の感想や質問、そして以前のレポートに対するコメント等を付加しても結構です。 件名:「学籍番号(半角)+半角空白+氏名」を記入して下さい。    例) s03xxxx 学院太郎

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


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

Similar presentations


Ads by Google