プログラミング言語論 第二回 理工学部 情報システム工学科 新田直也 プログラミング言語に関する チューリング賞 1966年 1971年 1972年 1983年 1984年 1991年 2001年 A. J. Perlis コンパイラ John McCarthy Lisp Edsger W. Dijkstra ALGOL Dennis M. Ritchie C Niklaus Wirth Pascal Robin Milner ML 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 (論理型) byte (バイト型) char (文字型) short (短長整数型) int (整数型) long (倍長整数型) float (短精度浮動小数点型) double (倍精度浮動小数点型) 1バイト 1バイト 2バイト 2バイト 4バイト 8バイト 4バイト 8バイト 型宣言文 変数を使用する前に宣言. 初期化なし型宣言文 型名 変数名; (例) int x; 初期化つき型宣言文 型名 変数名 = 初期値; (例) int x = 12; メモリへの格納形式(整数型) 整数型 リトルエンディアン(最下位バイトを一番下のアドレスに) Intel系 0xffff番地 0x1234 0x12 0x34 0x0000番地 ビッグエンディアン(最上位バイトを一番下のアドレスに) Motrola系 0x1234 0xffff番地 0x34 0x12 0x0000番地 メモリへの格納形式(浮動小数点型) 単精度(float) 1 8 23 s e f s…符号ビット e…指数部 f… 仮数部 下位 倍精度(double) 1 11 52 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’ --- シングルクォーテーションで囲む
© Copyright 2024 ExpyDoc