プログラム言語の分類
| 高水準言語 | 例 | |
|---|---|---|
| 手続型言語 | ・順次処理、分岐、繰り返しなどの処理手続きを記述するプログラム ・ほとんどの手続型言語はコンはいる方式を採用 |
・C(AT&ベル研究所で開発されたUNIX OSを記述するためのプログラム言語) ・Fortran、COBOL、PL/I、BASIC、Pascal |
| オブジェクト指向言語 | ・データとデータ処理(メソッド)を一体化したオブジェクトと考え、オブジェクト単位でプログラムを作成していく言語 | ・C++ ・C# ・Java(Sun Microsystems、現在のOracle) ・Java Servlet: サーバ側で実行 ・Java Applet: クライアント側にダウンロードして実行 ・Java Beans: 部品(コンポーネント)として取り扱うための規約 ・VBA ・Python、JavaScript、Rubyなど |
| スクリプト言語 | ・一連の命令を集めて簡単に実行できるようにした簡易プログラム(スクリプト)を、利用者でも開発できるように作られたプログラム言語 | ・JavaScript ・ECMAScript ・VBScript ・PostScript ・Pythone/PHP/Perl/Ruby |
| マークアップ言語 | ・印刷や画面表示を目的としたプログラム言語の一種 | ・HTML ・CSS: Webページのレイアウトだけを定義 ・XML: SGMLとHTMLから派生 ・DTD: ユーザ独自のタグを使って文書の属性情報や論理構造を定義できる |
| 低水準言語 | ||
| アセンブラ言語 | ・0と1の組み合わせを記号に対応させて命令を記述 | ・CASLⅡ |
| 機械語 | ・0と1で命令(プログラム)を記述 | --- |
言語プロセッサ
- 機械語以外のプログラム言語で書かれた原子プログラムを目的プログラムに翻訳するソフトウェア
言語プロセッサの種類
- アセンブラ: アセンブラ言語(低水準言語)のソースプログラムをオブジェクトプログラムに翻訳する(アセンブル)ソフトウェア
- コンパイラ: 高水準言語のソースプログラムをオブジェクトプログラムに翻訳する(コンパイル)ソフトウェア
コンパイラの手順
字句解析
- 文字列パターンを「正規表現」や「有限オートマトン」などの表記(定義)を用いて字句(トークン)単位に分割する
構文解析
意味解析
最適化
- 中間コードを解析して、プログラムの構造を変更(実行時の処理効率を高めたコードに最適化)する
| 最適化の方法 | 内容 |
|---|---|
| 関数のインライン展開 | ・関数を呼び出す場所に、呼び出す関数を展開する |
| 共通部分式の削除 | ・複数個所に存在する同じ式の値を作業用変数に代入、式を作業用変数に置き換える |
| 定数の畳込み | ・定数同士の計算式を、計算結果に置き換える |
| 定数伝搬 | ・変数を定数に置き換える |
| 無用命令の削除 | ・実行結果に影響しない分を削除する(コメントブ文や不要な空白、重複している式など) |
| ループ内不変式の移動 | ・ループ内で値の変化しない式をループの外に移動する |
| ループのアンローリング | ・ループ中の繰り返し処理を展開する(展開したほうが処理が速いため) |
コード生成
- 機械語に変換するが、多くの場合中間コードに変換する
- 中間コード → Javaバイトコード、共通中間言語など
コンパイラの利用目的により種類
- プリコンパイラ(プリプロセッサ): 機械言語や中間コードへのコンパイル前にプログラムに含まれる付加的な機能などを解釈して、高水準言語のプログラムに変換するコンパイラ
- 最適化コンパイラ: 処理過程の最適化に重点を置き、コンパイル後の目的プログラムの大きさや実行速度をできるだけ小さくするコンパイラ
- クロスコンパイラ: 機械語が異なるコンピュータの一方で、もう一方のコンピュータで動作する目的プログラムを生成するコンパイラ
- 実行時コンパイラ: ソースプログラムまたは中間コードで記述された中間コードを実行直前に機械語に変換するコンパイラ
- インタプリタ: 高水準言語で書かれたソースプログラムを1命令ずつ解釈・実行する言語プロセッサ
コンパイラとインタプリタの違い
| 比較項目 | コンパイラ | インタプリタ |
|---|---|---|
| 目的プログラム | 生成する | 生成しない |
| 翻訳単位 | 全文一括(プログラムが完成しないと翻訳不可) | 1命令(プログラム未完成でも翻訳・実行可能) |
| 実行速度 | 速い | 遅い |
| 適応業務 | パッチ処理(一括処理) | 対話型処理(Webフォームでの処理など) |
- ジェネレータ:入力データや出力データの様式、処理の条件などパラメータとして与えることにより、目的プログラムを生成する言語プロセッサ
- トランスレータ:あるプログラム言語で書かれたプログラムを別なプログラム言語のプログラムに変換するソフトウェア
サービスプログラム
- リンカ(リンケージエディタ、連係編集プログラム): 複数の目的プログラム(目的モジュール)を1つの実行プログラム(ロードモジュール)に組み立てる(リンクする)
- ローダ:ロードモジュールをメインメモリにロード(格納)して実行するプログラム
- エディタ:ソースプログラムの入力や修正などの役割を担うプログラム、一般的には文字入力に使用するテキストエディタを指す
- エミュレータ:異なるOS環境を疑似的に作成して、他機種のプログラムを自機種で実行するマイクロプログラム
- シミュレータ:自然科学などの複雑な現象を擬似的に実験するためのプログラム
- 整列/併合プログラム:整列プログラムはデータの整列処理を行うプログラム、併合プログラムは整列された複数のデータをまとめる併合処理を行うプログラム
プログラムの属性
- 再配置可能プログラム(リロケータブルプログラム):プログラムをローダによってメインメモリ上に格納する時、どの位置に格納しても実行可能なプログラム
- 再使用可能プログラム(リユーザブルプログラム):一度メインメモリにロードした後は、リロードせず何度でも繰り返し使用できるプログラム
- 再入可能プログラム(リエントラントプログラム):複数のタスクで同時に使用しても正しい結果が得られるプログラム
- 再帰プログラム(リカーシブプログラム):プログラム実行中に自分自身を呼び出すプログラム




