第6回放送授業
「ソフトウェアのしくみ」
7 高水準プログラム言語
7.1 高水準プログラム言語の種類
手続き型プログラム言語 オブジェクト指向プログラム言語 関数型プログラム言語 論理プログラム言語 その他、問い合わせ型言語や スクリプト言語など
7.2 手続き型プログラム言語
C、Fortran、Basic など もっとも多い 構造化プログラミングとする モジュール化する 大域変数をなるべく使わない モジュール間のやりとりは、引数、戻り値を利用し、明示的に
7.3 オブジェクト指向 プログラム言語
C++、SmallTalk、Java、Python、Ruby、Perl など 手続き型言語を兼ねるものが多い Object とは Method
7.4 関数型プログラム言語
Lisp など 参照透明性がある 副作用がない(厳密には守られない ことが多い) 第一級関数である SUM(5, MULTI(3, 2), 1) (SUM 5 (MULTI 3 2) 1)←LISP
7.5 論理プログラム言語
Prologなど 三段論法 人間 ( ソクラテス ). 死ぬ (X) :- 人間 (X). ?- 死ぬ ( ソクラテス ).
その他スクリプトなど Windows のコマンド Web の Java スクリプト PHP など
7.6 Web に適合した言語
文字列処理を得意とした言語 Perl,Python,Ruby,PHP,Javaなど
7.7 コンパイラとインタプリタ
コンパイラの仕事 ソースプログラム ↓ コンパイラ(インタプリタ) 目的プログラム(機械語) ↓ ライブラリーのリンク 実行プログラム
中間言語 ソースプログラム ↓ 第1フェーズ トークンへの分離 構文解析(構文木作成) 中間表現 ↓ 第2フェーズ 制御の解析 最適化 目的プログラム
トークンへの分離 [’A’-’Z’’a’-’z’][’A’-’Z’’a’-’z’’0’-’9’]* 構文チェック:バッカス・ナウア記法 list ::= ’(’ expression* ’)’ expression ::= atom | list atom ::= number | symbol number ::= [+-]?[’0’-’9’]+ symbol ::= [’A’-’Z’’a’-’z’].*
構文木作成 中間表現生成
アセンブラー言語生成 ジャンプの解析 簡単な最適化 機械語生成
ライブラリーリンク 実行プログラム生成
7.8 デバグ
bug(虫) debug debugger