講義スライド

Download Report

Transcript 講義スライド

比較プログラム言語論
平成17年5月11日
森田 彦
レポート(4/28)総括
< テーマ >

本日の講義で、あなたが最も興味を持った点はどのような点です
か?講義の全体的な感想と共に、できる限り具体的に、200字~400
字程度で記述して下さい。
<回答結果>
高水準言語発展の流れ(経
緯)に最も関心
27%
その他
なでしこ
7%
形式
文法
理論
13%
34%
言語発展の
流れ
ALGOL60プロジェクトの位
置づけを再認識
形式文法理論に知的興味
ALGOL60
19%
日本語プログラミング言語の
存在に驚き
レポート抜粋ー言語発展の流れ①


ノイマン型コンピュータの登場から、ウィルクスの苦悩
が始まり、手間がかかるという問題から、高水準な言
語が必要になってきた。アセンブリ言語からA-0、
FORTRAN、COBOL、ALGOLと広範囲に普及するた
めの簡単な(言語)仕様を(求めて)、より高水準言語
へと進化させていったこと、今回は何がではなく、この
流れに興味を持った。
プログラミング言語が作られていく中でいかに簡単に、
早く、使えるか、また向き不向きなど、初期のプログラ
ミング言語の問題点など現代のプログラミング言語が
できるまでの流れに興味を持った。ALGOLの開発に
よって現代のC言語やPASCALなどのベースになっ
たのは本当に偉大だったと思う。
レポート抜粋ー言語発展の流れ②

現在広く扱われているプログラミング言語が、今の使
いやすい形式に至るまでに多くの研究者達の困難が
あったのだということがわかり感銘を受けた。チョムス
キーが発表した形式文法理論は、文脈の主語述語の
流れのようにスムーズに理解できるものと知り、それ
までのプログラミング言語の基本的構成から変えてし
まう業績というのにも納得しました。ここから発展し、後
継言語の基盤ともなったALGOL60の仕組に興味を
持ちました。最初はJavaにばかり興味があったのです
が、歴史を知ることでよりプログラミングの奥深さに触
れることができたような気がします。
レポート抜粋ーALGOL60 ①


私が今回の講義で興味を持った点は、ALGOL60です。
当時の研究者が共同で開発した、文脈自由文法言語
として、それ以後のプログラミングの主体になり、構文
規則の「文の区切りに;を用いる」や「使用する変数は
全て宣言する」などはC言語やPASCALなど後続言語
に受け継がれ、プログラミング言語の発展に大きな影
響を与えたと思ったからです。
僕はALGOL60プロジェクトのことにとても興味を持ち
ました。なぜなら、このプロジェクトによって費やされた
時間や人の努力というものが、どれほどすごいもので
あったのかが、何となくですが、ものすごく凄まじいも
のを感じたからです。
レポート抜粋ーALGOL60 ②


私は、講義の最後のALGOL60のプロジェクトの一部
メンバーがプログラミングの手法の研究をしていたとこ
ろに興味を持ちました。それまでのプログラミング言語
の発展には、より人間にわかりやすい高水準言語の
開発が主な目的だったのに対し、正しい(バグのない)
プログラミングとはどういうものなのか、ということに関
心をもったのは、それまでとは別の視点からプログラミ
ング言語を研究し、新しい言語を開発するという可能
性を広げられるという意味でもすばらしいことだと感じ
たからです。
(前略)・・・ALGOL60により、バグの無いプログラミン
グという新しい手法の研究が行われたことから、その
先どういう風に進歩していくのか気になった。
レポート抜粋ー形式文法理論①

私が今日の授業で最も興味を持った点は、プログラミ
ング言語は主に文脈自由文法で成り立っているという
ことです。文脈依存文法は書き換えをする際に前後の
記号に依存して文ができるわけですが、それに比べて
文脈自由文法は構成要素が決まると文が生成される
ということでした。そこで興味を持ったのが、文脈自由
文法であると日本語として成り立たない場合もあると
思うのですが、プログラミング言語としては成り立つと
いう点でした。日本語の意味として文が成り立たなくて
も、プログラミング言語としての意味は成り立ってコン
ピュータに命令を与えられるということがとても不思議
に思えました。
文脈依存性の導入例-Java言語の場合
問) 以下の結果はどう表示される?
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;
b=(a+2)*3;
・・・
int 予約語
a 名前
, 区切り
b 名前
; 区切り
a 名前
b 名前
= 予約語
= 予約語
4 定数
; 区切り
( 区切り記号
+ 予約語
2 定数
) 区切り記号
* 予約語
3 定数
; 区切り
a 名前
構文(・意味)解析
コンパイル過程へ


字句の並びが、文法的に正しいかどうかをチェッ
クする。→ 文脈自由文法に沿って構文解析
構文解析結果を中間言語に表現
ポーランド記法、三つ組み、四つ組などの記法がある。
四つ組の場合:(演算子,被演算子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;
y=2*x+4;
・・・
・・・
z=3*(2*x+4);
z=3*y;
繰り返し文の再編

繰り返し文の中で値が変化しない演算式があっ
た場合は、それを繰り返し処理の前に移動する。
for (int i=1; i<=100; i++) {
c=2;
c=2;
for (int i=1; i<=100; i++) {
y[i]=c*i+2;
}
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);
・・・
呼び出し命令ではなく、直接、
関数の処理を書き込む。
コード生成
コンパイルの過程へ

最適化された中間言語プログラムから目的プロ
グラム(機械語)を生成。
中間言語
(+,a,2,R3)
アセンブリ言語
ADD R3,R1,R2
レジスタ
R1
R2
R3
aの値
2
(a+2)の値
第4回目レポート
< テーマ >
 本日の講義で、あなたはどの様な点に最も興味を持ち
ましたか?そしてその理由は?それらをできる限り具体
的に、200字~400字程度で記述して下さい。
 なお、上の記述を行った上で,講義の感想や質問、そし
て以前のレポートに対するコメント等を付加しても結構
です。
 提出先:[email protected]
 件名:「学籍番号(半角)+半角空白+氏名」を記
入して下さい。
例) s03xxxx 学院太郎
Java言語の戦略(コンパイラとインタプリタの
融合)
なぜ、JavaはJavaの実行環境があれば、どのOSや機種で
も動作するのに、他の言語は、特定のOSや機種に制限さ
れてしまうのか?
<Java言語>
<通常の言語>
ソース
ソース
翻訳
翻訳
バイトコード
機械語
Windows
機械語
Mac
機械語
Linux
実行
実行
実行
機械語はプラットフォーム毎
に異なる。
JVM
Windows
実行
JVM
Mac
実行
JVM
Linux
実行