プログラミング言語の概要 - Takeichi Lab

第一章 プログラム言語の概要
胡 振江
([email protected])
1.1 プログラミング言語の意義
プログラムとは
計算の手順を記したもの

計算機


計算手順を計算機内に蓄えていることが特徴
計算機内の命令列にしたがう計算の遂行
機械語
00000010101111001010
00000010111111001000
00000011001110101000

計算機理解できる言語


機械語の命令の種類は機械ごとに異なる
個々の命令は8から64ビット程度のビット列
人間(プログラマ)にとってわかりにくい
アセンブリ語
PushVar "a"
PushVar "b"
PushVar "c"
Bopr Times
Bopr Plus

人間が理解しやすい形式


記憶コード(mnemonic code)による命令表記
プログラム上での位置を示す名札(label)の導入
機械語命令を並べるプログラミング
高水準言語
a+b*c


計算機の能力に応じた命令を用いるのではない、
問題に合わせて設計される
コンパイラ(compiler):
高水準言語を機械語に翻訳するプログラム
(高水準言語の一つの文は数個の機械語に対応)
プログラミング言語の意義

高水準言語を用いる立場は



人間のほうが計算機よりも貴重であるという観点
プログラマがプログラミングに費やす時間を削減
プログラミング言語はアルゴリズムの形式的記
述の道具


計算機で問題を処理する手順の表現手段
アルゴリズム構築時の思考の道具
算法言語
1.2 プログラミング言語の種類
プログラミング言語の特徴
プログラミング言語の選択
プログラミング言語の取扱い



構文論(syntax)
記号をどのように並べるのか
意味論(semantics)
記号の並びの表わす意味はなにか
語用論(pragmatics)
利用者が記号をどのように使うか
意味上で同等な機能が
異なる構文で表現されることも
水準による分類

低水準言語:



高水準言語:



計算機に近い機械語・アセンブリ語
計算機のレジスタ、メモリ、入出力装置などを参照
プログラムにハードウェアの特性は現われない
コンパイラによるレジスタ割当て、メモリ割付け
機械向き高水準言語:

高水準言語の特徴をもちハードウェア機能の指定可
能
用途による分類

汎用言語(general purpose language)


特殊目的言語(special purpose language)


狭い分野を対象とした言語
算法言語(algorithmic language)


多くの分野で使われることを目的とした言語
アルゴリズムの記述による処理を目標とした言語
実時間言語(real time language)


事象の発生に応じた動作を記述するための言語
プロセス制御言語(process control language)
計算モデルによる分類

計算モデル(computation model)
プログラムやデータの処理過程の抽象化

分類




命令型言語(imperative language)
関数型言語(functional language)
論理型言語(logic programming language)
対象指向型言語(object oriented language)
命令型言語

特徴


記憶域の状態変化が計算の効果
状態変化を指定する命令主体の言語
function factorial(n:integer):integer;
var fac:integer;
begin fac:=1;
while n> 0 do
begin fac:=fac*n; n:=n-1 end;
factorial:= fac
end;
関数型言語

特徴


数学の関数の適用によるアルゴリズムの表現
入力と出力との関係のみを記述したもの
factorial n
| n==0 = 1
| otherwise = n*factorial(n-1)
状態なし
論理型言語

特徴


命題を証明する推論過程を計算とみなす
推論規則を適用する基本操作


単一化(ユニフィケーション, unification)
逆戻り(バックトラッキング, backtracking)
オブジェクト指向言語

特徴


計算過程の対象(object)を個体としてとらえる
対象間のメッセージ(message)によって計算
が進行
プログラミング言語の
プログラミング
言語を記述する言語:超言語

言語の概念の記述に用いる超言語には・・・



数学的な取扱いが重要
証明の手段が必要
プログラミング言語を超言語として・・・



超言語の概念が数学的に確立されていること
抽象的な機能の説明に具体性をもたせられる
超言語の処理系によってその機能を確認する
関数型言語 Haskell
第一章のまとめ

プログラミング言語は



プログラミング言語の分類の基準




計算機に対する処理を指示するためのもの
アルゴリズムを形式的に記述するためのもの
言語の水準
用途
計算モデル
プログラミング言語のプログラミング


言語の定義を与えるには超言語が必要
プログラミング言語による言語プログラミング