190 likes | 276 Views
第一章 プログラム言語の概要. 胡 振江 ( hu@ipl.t.u-tokyo.ac.jp). 1.1 プログラミング言語の意義. プログラムとは. 計算の手順を記したもの 計算機 計算手順を計算機内に蓄えていることが特徴 計算機内の命令列にしたがう計算の遂行. 機械語. 計算機理解できる言語 機械語の命令の種類は機械ごとに異なる 個々の命令は8から64ビット程度のビット列 人間(プログラマ)にとってわかりにくい. 0 0 0 0 0 0 1 0 1 0 1 1 1 1 0 0 1 0 1 0
E N D
第一章 プログラム言語の概要 胡 振江 (hu@ipl.t.u-tokyo.ac.jp)
プログラムとは 計算の手順を記したもの • 計算機 • 計算手順を計算機内に蓄えていることが特徴 • 計算機内の命令列にしたがう計算の遂行
機械語 • 計算機理解できる言語 • 機械語の命令の種類は機械ごとに異なる • 個々の命令は8から64ビット程度のビット列 人間(プログラマ)にとってわかりにくい 0 0 0 0 0 0 1 0 1 0 1 1 1 1 0 0 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 1 0 1 0 1 0 0 0
アセンブリ語 PushVar "a" PushVar "b" PushVar "c" Bopr Times Bopr Plus • 人間が理解しやすい形式 • 記憶コード(mnemonic code)による命令表記 • プログラム上での位置を示す名札(label)の導入 機械語命令を並べるプログラミング
高水準言語 • 計算機の能力に応じた命令を用いるのではない、問題に合わせて設計される • コンパイラ(compiler):高水準言語を機械語に翻訳するプログラム (高水準言語の一つの文は数個の機械語に対応) a+b*c
プログラミング言語の意義 • 高水準言語を用いる立場は • 人間のほうが計算機よりも貴重であるという観点 • プログラマがプログラミングに費やす時間を削減 • プログラミング言語はアルゴリズムの形式的記述の道具 • 計算機で問題を処理する手順の表現手段 • アルゴリズム構築時の思考の道具 算法言語
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; varfac: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
第一章のまとめ • プログラミング言語は • 計算機に対する処理を指示するためのもの • アルゴリズムを形式的に記述するためのもの • プログラミング言語の分類の基準 • 言語の水準 • 用途 • 計算モデル • プログラミング言語のプログラミング • 言語の定義を与えるには超言語が必要 • プログラミング言語による言語プログラミング