c-MOS NOT ゲート

第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