Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
2018/5/10
1
プログラミング言語論 A
(Concepts on Programming Languages)
趙 建軍 (Jianjun Zhao)
1
第5回
命令型言語 (1)(Imperative Programming Languages)
2018.05.10
2
2018/5/10
2
3
講義の内容
抽象機械計算モデル 命令型言語パラダイム 代入文、変数の概念と状態 制御文 構造化プログラミング データ型 副プログラムと手続き
2018/5/10
プログラミングパラダイム (1)
プログラミングパラダイム (programming paradigm) は、プログラマにプログラムの見方を与えるものと言える。例えば:
オブジェクト指向プログラミング (object-oritentedprogramming) において、プログラムとはオブジェクトをつくりそれを管理するものである。
関数型プログラミング (functional programming) においては、状態を持たない関数の評価の連続である。
4
2018/5/10
3
プログラミングパラダイム (2)
命令型言語パラダイム
関数型言語パラダイム
論理型言語パラダイム
オブジェクト指向型言語パラダイム
5
プログラミングパラダイム (3)
6
2018/5/10
4
計算モデル (computation model) の必要性
世の中の情報システム (コンピュータや生物) は非常に複雑
この情報システムがどのような原理に基づくかを知るには数学的基盤を持つ抽象的な枠組みを導入する必要がある
7
計算モデルとは
コンピュータによる計算機構を抽象的に捉(とら)えた数学的な枠組みであり, これにより計算に関する様々な議論が可能になる 計算するとはどういうことであるかの説明 計算モデルが変わるとプログラミング言語
の設計も変わる
プログラミング言語パラダイムの最重要かつ主要な構成要素
8
2018/5/10
5
計算モデル
情報システムの抽象的な枠組み=計算モデル
9
代表的な計算モデル
(逐次) 計算モデル (sequential computation model) 抽象機械計算モデル 関数型計算モデル 論理型計算モデル 項書き換え型計算モデル
(並列, 分散) 計算モデル (concurrent, distributed) プロセス代数 (プロセスカルキュラス) イベント機械モデル (ペトリネット)
10
2018/5/10
6
代表的な計算モデル
(逐次) 計算モデル (sequential computation model) 抽象機械計算モデル 関数型計算モデル 論理型計算モデル 項書き換え型計算モデル
(並列, 分散) 計算モデル (concurrent, distributed) プロセス代数 (プロセスカルキュラス) イベント機械モデル (ペトリネット)
11
抽象機械計算モデル (abstract machine)
主にオートマトン理論での計算システムの理論的モデルを意味する
122018/5/10
2018/5/10
7
13
文法とオートマトンの関係
Grammar (文法)
Regular Expression(正規表現)
Context-Free Grammar (文脈自由文法)
Context-Sensitive Grammar(文脈依存文法)
Automaton (機械)
Finite-State Automaton
(有限オートマトン)
Push-Down Automaton(プッシュダウン・オートマトン)
Turing Machine
(チューリング機械)
2018/5/10
14
文法とオートマトンの関係
Grammar (文法)
Regular Expression(正規表現)
Context-Free Grammar (文脈自由文法)
Context-Sensitive Grammar(文脈依存文法)
Automaton (機械)
Finite-State Automaton
(有限オートマトン)
Push-Down Automaton(プッシュダウン・オートマトン)
Turing Machine
(チューリング機械)
2018/5/10
2018/5/10
8
15
チューリング機械 (Turing machine)
チューリング機械は計算模型のひとつで、計算機を数学的に議論するための単純化・理想化された仮想機械である
論文「計算可能数についての決定問題への応用」, 1936
アラン・チューリング(Alan Turing)
2018/5/10
16
アラン・チューリング
計算機科学分野のノーベル賞
Alan Mathison Turing 1912年6月23日-1954年6
月7日
2018/5/10
2018/5/10
9
チューリング機械 (Turing machine)
チューリング機械は抽象機械計算モデルにおける計算の典型例
2018/5/10 17
18
チューリング機械の動作① 入力テープを1つ読む(入力記号)② 現在の状態と入力記号の組合せに応じて
1. ヘッドを動かす(右、左、動かさない)2. ヘッド位置に記号を書く3. 次の状態を決める
③ 1.に戻って繰り返す
2018/5/10
2018/5/10
10
例 計算とは、計算機の内部状態を変えてゆくもの 計算が終わったときの計算機の内部状態が計算
の結果
s:35 s:36
実行前の内部状態
実行後の内部状態
for i:=1 to 10 do t:=t+1
s:=s+1
t:35 t:45
192018/5/10
20
命令型言語パラダイム
状態を次々に変化させることで計算をさせる計算モデルでは、命令型プログラミング言語 (imperative programming languages) が発展する チューリング機械は状態遷移表を持つが、表が
大きくなったとき表形式は得策でない
フローチャートは状態遷移図であり、分かりやすいが書き下すのが困難
そのため命令型言語が適していると考えられる
2018/5/10
2018/5/10
11
命令型言語
最も一般的なパラダイム ノイマン型コンピュータが、その計算モデ
ルである 命令(つまり代入文)の繰り返しにより、
変数の値(「状態」 という)を動的に変化させ、計算を行う
21
22
命令型言語の特徴
変数と変数への代入 (代入型言語ともいう) 変数と変数の構造 データ型 データ型と手続きの結びつき (抽象データ型)
制御構造の発展 構造化プログラミング
手続き(Procedure) 手続き呼び出しと値引渡し 再帰呼び出し
2018/5/10
2018/5/10
12
23
変数の概念
変数は記憶装置のある領域に対応する 記憶装置の記憶内容がその機械の「状態」
であるため、
2018/5/10
24
変数の概念
記憶装置 シーケンシャルアクセスメモリ(sequential
access memory): 決められた順にのみアクセスできる記憶装置
ランダムアクセスメモリ(random access memory): 番地をつかってどの場所も自由にアクセスできる記憶装置
ノイマン型の計算機はランダムアクセスメモリを主記憶にもつ
2018/5/10
2018/5/10
13
25
ランダムアクセスマシン(RAM) チューリング機械よりも現実に近い計算機のモ
デル チューリング機械は記憶装置もテープだったの
に対し、RAMマシンは番地つきのランダムアクセスメモリをもつ
番地
2018/5/10
26
代入文
A := A+2;
B[i] := X^2+i;
左辺の式:メモリの場所を示すAやB[i]の値に意味があるのでなく、記憶場所を指し示す変数が左辺にあるとき表す記憶場所を左辺値という
右辺の式:値を示すA、X、iはメモリそのものでなく、その値を指し示す変数が左辺にあるとき表す値を右辺値という
2018/5/10
2018/5/10
14
27
命令と命令の制御
抽象機械計算モデルでは次の文がある 状態を変化させる形式、命令文 命令の順序を決める形式、制御構造(制御文) プログラムの解釈を変える形式、宣言文 コメント文
変数内容の変化が基本であり、他の文はそのための仕掛け
命令文:代入文、入出力文
宣言文:変数の宣言、データ型の定義、手続きの定義
2018/5/10
28
命令の制御と制御構造
制御構造は、命令の順序を決める文 逐次実行 (合成) S1;S2
分岐 if-then、if-then-else、switch-case (多分岐)
繰り返し while 条件 do-end (前判定) repeat-until 条件 (後判定)
(副プログラムの呼出しと復帰)2018/5/10
2018/5/10
15
29
GOTO 文
GOTO 文は無条件分岐 命令にラベルをつけておくとGOTO文は常
に、そのラベルの箇所に制御を移すL1 X:=X+1;
if X>100 GOTO L2;GOTO L1;
L2 ...
機械語にあるため、FORTRAN以来、命令型言語の多くが採用している
制御が自由に変えられるため、多用すると分かりにくいプログラムになる ― スパゲッティプログラム
2018/5/10
30
命令の制御と制御構造
プログラムは、それぞれの箇所が何をしているのか理解できるように書かなければならない プログラムのテキストの構造(段落) プログラムの実行順序の構造
一致するとき、そのプログラムは構造化(structured)されているという
必要な制御構造を容易に記述できる制御文が必要
それを備える言語: 構造的プログラミング言語structured programming languages
一致する必要がある
2018/5/10
2018/5/10
16
31
構造的プログラミング
プログラムのテキスト上の段落と、命令の制御の段落(実行される時間的な固まり)が一致する
プログラムのテキスト上の段落と、機能的な段落が一致する
読みやすく、保守が容易 (可読性) GOTO文の排除
2018/5/10
32
構造化された制御フロー
代表的な制御形式 逐次実行 分岐 if-then、if-then-else ループ while、repeat
その段落への入り口、出口が1つのみ(single entry/single exit)
2018/5/10
2018/5/10
17
332018/5/10