160 likes | 269 Views
プログラミング言語論 第二回. 理工学部 情報システム工学科 新田直也. プログラミング言語に関する チューリング賞. 1966 年 A. J. Perlis コンパイラ 1971 年 John McCarthy Lisp 1972 年 Edsger W. Dijkstra ALGOL 1983 年 Dennis M. Ritchie C 1984 年 Niklaus Wirth Pascal 1991 年 Robin Milner ML 2001 年 Ole-Johan Dahl / Kristen Nygaard Simula
E N D
プログラミング言語論第二回 理工学部 情報システム工学科 新田直也
プログラミング言語に関するチューリング賞 1966年 A. J. Perlis コンパイラ 1971年 John McCarthyLisp 1972年 Edsger W. DijkstraALGOL 1983年 Dennis M. RitchieC 1984年 Niklaus WirthPascal 1991年 Robin Milner ML 2001年 Ole-Johan Dahl / Kristen Nygaard Simula 2003年 Alan Kay Smalltalk
プログラミング言語の仕組み • なぜプログラミング言語は数多くの仕組みを用意しているのか? • 計算に必要な最小限の機能だけを持つ言語:whileプログラム • プログラムに必要とされる機能は計算だけではない. • コンピュータ上で走らせるためやむなく必要となる仕組み. • より高速に計算するために必要な仕組み. • データを包括的に管理するために必要な仕組み. • プログラムを読みやすくするために必要な仕組み. • プログラムを分割管理するために必要な仕組み.
最小プログラミング言語 • まずは,必要最小限の機能から始めよう! • Whileプログラム(D.M.Ritchie, C言語の作者) • 単純だが,どんな計算でもできることが理論的に証明されているプログラム言語(チューリングマシンと等価,計算万能) • プログラム理論の研究で使われる. 例) 表示意味論(denotational semantics),プログラム検証 • 制御構造として,連接,判断(if文),前判定反復(while文のみを持つ)→構造化定理参照
Whileプログラムの構文 • 自然数(0を含む)を表す有限個の変数を持つ. • 代入文は以下の3通りのみ. 変数 = 0; 変数 = 変数; 変数++; (変数 = 変数 + 1;) • 条件式は以下の1通りのみ. 変数 < 変数 • プログラムは再帰的に以下のように構成される. プログラム ::= 代入文 または プログラム プログラム または if (条件式) { プログラム } else { プログラム } または while (条件式) { プログラム }
Whileプログラムの例(加算) • z = x + y の計算 z = x; c = 0; while (c < y) { z++; c++; }
Whileプログラムの例(減算) • z = x - y の計算 z = 0; c = x; while (c < y) { z++; c++; }
Whileプログラムの例(乗算) • z = x * y の計算 z = 0; c = 0; while (c < y) { d = 0; while (d < x) { z++; d++; } c++; }
Whileプログラムで満足できるか? • Whileプログラムが持っているもの • 変数 • 代入文 • 制御構造 • Whileプログラムが持っていないもの • 変数の型 • 演算子, 式 • 手続き(関数)呼び出し • 配列
変数と型 • 実際はプログラムは有限のメモリ上で動作する. • Whileプログラムでは,各変数が取りうる値に上限が設けられていなかった.(1変数当たり無限バイト必要.) x = 1; y = 0; while (x > y) { x++; } • 変数の型宣言とは,各変数に決められたメモリ領域を割り当てること. • 変数を使用する前に型宣言しておかなければならない. • 割り当てられた型に応じて適用可能な演算が変わる.
データ型の分類 • 単純な型 • 基本型(char, int, long, …) • ユーザ定義型(enum) • 構造を持つ型 • 文字列型 • 配列型 • 構造体型 • その他 • データ参照型 • 参照型 • ポインタ型
基本型(Java) • boolean (論理型) 1バイト • byte (バイト型) 1バイト • char (文字型) 2バイト • short (短長整数型) 2バイト • int (整数型) 4バイト • long (倍長整数型) 8バイト • float (短精度浮動小数点型) 4バイト • double (倍精度浮動小数点型) 8バイト
型宣言文 • 変数を使用する前に宣言. • 初期化なし型宣言文 型名 変数名; (例) int x; • 初期化つき型宣言文 型名 変数名 = 初期値; (例) int x = 12;
メモリへの格納形式(整数型) • 整数型 • リトルエンディアン(最下位バイトを一番下のアドレスに) • ビッグエンディアン(最上位バイトを一番下のアドレスに) Intel系 0xffff番地 0x12 0x1234 0x34 0x0000番地 Motrola系 0xffff番地 0x34 0x1234 0x12 0x0000番地
メモリへの格納形式(浮動小数点型) • 単精度(float) • 倍精度(double) s…符号ビット e…指数部 f…仮数部 8 23 1 s e f 下位 11 52 1 s e f 下位
定数表現 • 10進定数100 --- そのまま書く • 8進定数0777 --- 先頭に0を付ける • 16進定数0x53fb --- 先頭に0xを付ける.0~fまでを使う. • 単精度定数3.14F, 1.0E+10F --- 末尾にFを付ける • 単精度定数3.14, 1.0E+10 --- 末尾にFを付けない • 文字定数‘a’ --- シングルクォーテーションで囲む