1.1 オートマトンと状態遷移図

5.3 型
(1)型の種類
①あらかじめ用意された基本となる型
例:整数、浮動小数点、文字型、文字列、
倍精度浮動小数点、10進数
②型と型構成の宣言
例:Cの構造体、Visual BASICのユーザ型宣言
③演算子と処理の定義
例:C#のOperator宣言
(2)配列
同じデータ型のデータの集まり
①要素の型
②配列の大きさ(上限添字と下限添字)
③多次元も可能
④動的な配列の大きさの宣言
例:Visual Basicの Redim
JavaやC#での newによる生成
(3)構造体
異なるデータの集まり(構造体、ユーザ定義体など)
①要素の名前
②要素の型
例:
Pascal
C
Basic
type codedata = record op, opr1, opr2:integer end;
typedef struct { int op, opr1,opr2 ;} codedata;
type codedata
op as integer
opr1 as integer
opr2 as integer
end type
再帰的な型
例:2分木の定義
typdef struct Binary_Tree{
int Val; struct Binary_Tree *Left, *right;}Tree;
(4)プログラム実行時の型の付与
① BASIC(VBを含む)、Lispなどのインタプリタでは、
実行時の値によって型が決まる。
② Adaの型引数(正確には実行時ではないが型変数に近
い)
(5)型の検査(type checking)
プログラム中で型の整合性が取れているかをチェックす
ること。
① Pascalでは厳密な型チェックを行う。
② インタプリタを前提とする言語では、この型チェック
によって自動的に型変換を行うことが多い。
③ FORTRAN や C では、型の検査はそれほど厳密ではな
い。
Cの左辺値(left value)と右辺値(right value)
代入の左辺は左辺値でなければならない。
左辺値:変数名またはポインタ値(配列はポイン
タ)
【Lispでは】
基本的に引数に対して Eval を行うかどうか
(setq A B)
A← eval(B)
(6)型の等価(type equivalence)
型の等価は、同じ基本型から出発して同じ構成法で作成
された型を等価とする考え方。
① 構造等価(structural equivalence)
名前が異なるが構造が同じ
【例】 typedef float*type0;
typedef type0 t1[10];
typedef float *t2[10];
② 名前等価(name equivalence)
同じ型名だけが同じ型と判断(Pascal)
(7)多重定義(overload)
2つ以上の実体に対して同じ名前を用いること
通常は引数の型が異なるものに対して同じ名前を用いる。
したがって、
①同じ名前
②同じ引数の個数
③型の並びが同じ
ものを特定の実体としてみなす。C#では、
int Add(int A, B){ return A+B;}
float Add(float A, B) { return A+B;}
は別の関数とみなされる。