sot08 最近の更新履歴 城西国際大学_経営情報学部_組織情報論2017

24 

Loading....

Loading....

Loading....

Loading....

Loading....

全文

(1)

組織情報論

8

回 プログラムとプログラム言語

1

講師 佐枝三郎

https://sites.google.com/site/jiusaedasoshikiron2017/

プログラムの前提知識とアセンブラ

(2)

バイナリ

データとコンピュータの機械語

コンピュータメモリ上の記録は2進データであり、その最小

単位は、

ON

OFF

のいずれかの状態を表すもの。これを

ビット(

bit

)という。

10101010

コンピュータメモリの単位として、英数字が表現できる

8

ビッ

トを

1

バイト(

byte

)がある。漢字を使う日本語では

1

バイトで

は足りず、2バイト(16ビット)が最小単位となる。

CPU

が処理する記述できる最小単位は、一般的にはコン

ピュータの種類によって、

16

ビット、

32

ビット、あるいは

64

ビットである。これらを1ワード(

word

)という単位と呼ぶ。

3

10

進法記述と2進法、16進法の記述

数値の記述方法 -n進法ー

10

進法:

0

から

9

まで

10

種類の記号を使って、数値を表現する。

2進法:

0

1

2

種類の記号で、数値を表現する。

16

進法:

0

から

9

A, B, C, D, E, F

を加え、

16

個の記号で数値を

表現する。

10

進法の

16

になったら繰り上がり「

10

」となり、

10

法の

256

になったら繰り上がり「

100

」となる。以下同様。

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

10

進法と

16

進法の対応

10

進法の

1000

16

進法の

3E8

16

進法の

1000

10

進法の

4096

(3)

数値、英字、特殊記号の

16

進表現

注)この表では16進数を表現するのに小文字のアルファベットを使用している。

5

16

進数による数値とプログラムの表現

**number** 0

1 10 100

**program** SAMP START

XOR GR1,GR1 ; COUNTER XOR GR2,GR2 ; + VALN XOR GR3,GR3 ; SUM LP ADDA GR2,DELTA

ADDA GR3,GR2 ST GR3,ANS ADDA GR1,ONE CPA GR1,STOP JNZ LP

ST GR3,ANS RET

数値とプログラムの文字表現

数値とプログラムの

16

進数表現

(

コンピュータのメモリ上に存在する状態)

(4)

IT

パスポート試験問題 ①

問題: プログラム言語の役割として,適切なもの

はどれか。

A:

コンピュータが自動生成するプログラムを,

人間が解読できるようにする。

B:

コンピュータに対して処理すべきデータの

件数を記述する。

C:

コンピュータに対して処理手続を記述する。

D:

人間が記述した不完全なプログラムを

完全なプログラムにする。

7

最初のプログラム言語-アセンブラ

1944

年に提案され、

1951

年に稼働した

EDVAC

というコンピュー

ターの開発で、プログラムをメモリ内に入れる設計が行われた

プログラムの変更が容易でかつ高速なコンピューターが可能となった

EDVAC

が現在のコンピューターの原型であり、メモリに内蔵された命令が

現在のプログラムの原型である

メモリに内蔵された命令を機械語と呼び、アセンブラはそれに対応する

すべてのコンピュータは、機械語で稼働し、すべてのコンピュー

タにアセンブラがある

大型コンピュータ(例:

IBM

メインフレーム)

IBM S/370

アッセンブラ

Microsoft Windows

MASM

(マイクロソフト アッセンブラ)

iPhone

iPad

など

Apple

ARM

アッセンブラ

アセンブラを説明する例として「

CASL II

」を取り上げる

CASL II

とは、情報処理技術者試験で使用されるアセンブリ言語

(5)

COMMET II

のアーキテクチャ

記憶装置(メモリ)

ここにデータやプログラムが格納される

COMET

では、

16

ビットを記憶の単位(

1

ワード)として、

65536

ワード

記憶できる

記憶場所は番地(アドレス)で順序と位置が指定される

アドレスは

0

番地から始まり

65535

番地まである

格納できる数値は、整数のみである

1

つの番地には、正の数値のみを利用する場合は、

0

から

65535

まで

格納できる

マイナスの数値も扱う場合は、補数という考え方を用い、

-32768

から

32767

までの数値が記憶できる

1

ワードのビット構成は、次の通り。

9

COMMET II

のアーキテクチャ

コンピュータはデータを記憶する場所としてのメモリ、計算や比較

などの処理を行う

CPU

(各種レジスタ)から構成されている

制御装置とプログラム(命令語)

制御方式は逐次制御(1つずつ順に)であり、メモリ上のプログラム(命

令語)はアドレスの順に実行される

命令語は1ワード(16ビット)、2ワード(32ビット)で構成されている

• 1ワードの命令: 命令の種類だけ指定すればよく、メモリのアドレスを使用しないRET

などの命令

• 2ワードの命令: 命令の種類と使用するレジスタなどを1ワードに、使用するメモリの

番地などを1ワードに記述する命令

COMMET IIでは、メモリが65535ワードあるため、2ワードの命令なら約

32000個の命令が格納できる

レジスタ

制御装置の中にあり、計算処理の際にデータを一時的に置く場所

レジスタに、メモリからデータを取り出して、計算処理を行う

レジスタは、

GR

16

ビット)、

SP

16

ビット)、

PR

16

ビット)、

FR

3

ビット)の

4

(6)

COMMET II

のアーキテクチャ

レジスターの種類

GR

(汎用レジスタ :

General Register

GR0

GR7

8

個があり、算術、論理、比較、シフトなどの演算に使用する

このうち、

GR1

GR7

のレジスタは、指標レジスタ(

index register

)としてアド

レスの修飾にも使用する

SP

(スタックポインタ :

Stack Pointer

スタックの最上段のアドレスを保持している。スタック操作命令

(PUSH,

POP)

やコール、リターン命令

(CALL, RET)

で使用する。

PR

(プログラムレジスタ :

Program Register

次に実行すべき命令語の先頭アドレスを保持している。

FR

(フラグレジスタ :

Flag Register

OF

Overflow Flag

)、

SF

Sign Flag

)、

ZF

Zero Flag

)と呼ぶ

3

個のビットからな

り、演算命令などの実行によって次の値が設定される

これらの値は、条件付き分岐命令で参照される

11

COMMET II

のアーキテクチャ

FR

(フラグレジスタ )のフラグの意味

OF

: 算術演算命令の場合は、演算結果が

-32768

32767

に収まらなく

なった場合

1

になり、それ以外は

0

になる。論理演算命令の場合は、演算結

果が

0

65535

に収まらなくなった場合

1

になり、それ以外は

0

になる。

SF

: 演算結果の符号が負(ビット

15

1

)の場合

1

、それ以外は

0

になる

ZF

: 演算結果が

0

(全部のビットが

0

)の場合

1

、それ以外は

0

になる

COMMET II

のレジスタ構成

16

ビット

PR

16

ビット

SP

16

ビット

GR0

FR

OF

16

ビット

GR1

16

ビット

GR2

16

ビット

GR7

SF ZF

(7)

アセンブラの主要な命令

コンピュータの主要な命令は次の四つである

メモリのデータとレジスタのデータのやり取り

ロード(LD): レジスタにメモリのデータを持ってくる

ストア(

ST)

: レジスタのデータをメモリに格納する

レジスタ間、レジスタとメモリのデータの計算

数値計算(

ADDA

など)、論理計算(

ADDL

など)

レジスタ間、レジスタとメモリの内容の比較、及びその結果の

判定

二つの値が等しい、どちらかが大きいなど(CPAなど)

次に行う命令の指定(命令が置かれている場所の指示)

通常は命令を順番にひとつずつ行っていく(JUMP、JPLなど)

ジャンプという命令は、ある場所を指定し、次にはその場所に飛び、

そこの命令を行う

条件付きジャンプは、ある条件が成立したら、指定した場所に飛びそ

この命令を行い、成立しなければ次の命令を行うものである

この四つの要素が、すべてのプログラム言語の基本機能

となっている

13

START :開始

LD (

レジスタへの取り込み)

LD GR1,N :Nをレジ1に設定 LD GR2,ZERO :0をレジ2設定

LOOP :戻り先

ADDA GR2,ONE :レジ2に1足す

ADDA GR3,GR2 :レジ3にレジ2足す

CPA GR1,GR2 :比較

JZE EXIT :0以下はEXITへ JUMP LOOP :LOOPへ

EXIT ST GR3,ANS : ANSにGR3入れる

RET :計算の終わり

(スタックポインタ)

GR1

(レジスタ)

GR2(

レジスタ)

フラグレジスタ

GR3(

レジスタ)

0001

0002

0003

0004

0005

0006

0007

0008

0009

0010

0012

LD GR3,ZERO : 0をレジ3設定

ONE DC 1 :ONEに1を設定 ZERO DC 1 :ZEROに0を設定

N DC 10 :Nに10を設定 ANS DS 1 :答の場所確保

END :プログラムの終わり

0011

0013

0014

0015

0016

0017

メモリの内容

CPU

の中身

負 ゼロ オ

プログラムカウンタ

0002

10

(8)

START :開始

ST (

レジスタからメモリへ)

LD GR1,N :Nをレジ1に設定

LD GR2,ZERO :0をレジ2設定

LOOP :戻り先

ADDA GR2,ONE :レジ2に1足す

ADDA GR3,GR2 :レジ3にレジ2足す

CPA GR1,GR2 :比較

JZE EXIT :0以下はEXITへ JUMP LOOP :LOOPへ

EXIT ST GR3,ANS : ANSにGR3入れる

RET :計算の終わり

(スタックポインタ)

GR1

(レジスタ)

GR2(

レジスタ)

フラグレジスタ

GR3(

レジスタ)

0001

0002

0003

0004

0005

0006

0007

0008

0009

0010

0012

LD GR3,ZERO : 0をレジ3設定

ONE DC 1 :ONEに1を設定

ZERO DC 1 :ZEROに0を設定

N DC 10 :Nに10を設定 ANS DS 1 :

END :プログラムの終わり

0011

0013 0014 0015 0016 0017

メモリの内容

CPU

の中身

負 ゼロ オ

プログラムカウンタ

0011

55

55

15

START :開始

ADDR

(

レジスタとメモリを足す)

LD GR1,N :Nをレジ1に設定

LD GR2,ZERO :0をレジ2設定

LOOP :戻り先

ADDA GR2,ONE :レジ2に1足す

ADDA GR3,GR2 :レジ3にレジ2足す

CPA GR1,GR2 :比較

JZE EXIT :0以下はEXITへ JUMP LOOP :LOOPへ

EXIT ST GR3,ANS : ANSにGR3入れる

RET :計算の終わり

(スタックポインタ)

GR1

(レジスタ)

GR2(

レジスタ)

フラグレジスタ

GR3(

レジスタ)

0001

0002

0003

0004

0005

0006

0007

0008

0009

0010

0012

LD GR3,ZERO : 0をレジ3設定

ONE DC 1 :ONEに1を設定 ZERO DC 1 :ZEROに0を設定

N DC 10 :Nに10を設定 ANS DS 1 :

END :プログラムの終わり

0011

0013 0014 0015 0016 0017

メモリの内容

CPU

の中身

負 ゼロ オ

プログラムカウンタ

0006

3

4

(9)

START :開始

通常のプログラムの動き

LD GR1,N :Nをレジ1に設定

LD GR2,ZERO :0をレジ2設定

LOOP :戻り先

ADDA GR2,ONE :レジ2に1足す

ADDA GR3,GR2 :レジ3にレジ2足す

CPA GR1,GR2 :比較

JZE EXIT :0以下はEXITへ JUMP LOOP :LOOPへ

EXIT ST GR3,ANS : ANSにGR3入れる

RET :計算の終わり

(スタックポインタ)

GR1

(レジスタ)

GR2(

レジスタ)

フラグレジスタ

GR3(

レジスタ)

0001

0002

0003

0004

0005

0006

0007

0008

0009

0010

0012

LD GR3,ZERO : 0をレジ3設定

ONE DC 1 :ONEに1を設定

ZERO DC 1 :ZEROに0を設定

N DC 10 :Nに10を設定 ANS DS 1 :

END :プログラムの終わり

0011

0013 0014 0015 0016 0017

メモリの内容

CPU

の中身

負 ゼロ オ

プログラムカウンタ

0001

0002

0003

17

START :開始

JUMP (

違う場所にジャンプ)

の時のプログラムの動き

LD GR1,N :Nをレジ1に設定 LD GR2,ZERO :0をレジ2設定

LOOP :戻り先

ADDA GR2,ONE :レジ2に1足す

ADDA GR3,GR2 :レジ3にレジ2足す

CPA GR1,GR2 :比較

JZE EXIT :0以下はEXITへ JUMP LOOP :LOOPへ

EXIT ST GR3,ANS : ANSにGR3入れる

RET :計算の終わり

(スタックポインタ)

GR1

(レジスタ)

GR2(

レジスタ)

フラグレジスタ

GR3(

レジスタ)

0001

0002

0003

0004

0005

0006

0007

0008

0009

0010

0012

LD GR3,ZERO : 0をレジ3設定

ONE DC 1 :ONEに1を設定 ZERO DC 1 :ZEROに0を設定

N DC 10 :Nに10を設定 ANS DS 1 :

END :プログラムの終わり

0011

0013 0014 0015 0016 0017

メモリの内容

CPU

の中身

負 ゼロ オ

プログラムカウンタ

0010

55

0005

0006

(10)

START :開始

LD GR1,N :Nをレジ1に設定

LD GR2,ZERO :0をレジ2設定

LOOP :戻り先

ADDA GR2,ONE :レジ2に1足す

ADDA GR3,GR2 :レジ3にレジ2足す

CPA GR1,GR2 :比較

JZE EXIT :0以下はEXITへ JUMP LOOP :LOOPへ

EXIT ST GR3,ANS : ANSにGR3入れる

RET :計算の終わり

(スタックポインタ)

GR1

(レジスタ)

GR2(

レジスタ)

フラグレジスタ

GR3(

レジスタ)

0001

0002

0003

0004

0005

0006

0007

0008

0009

0010

0012

LD GR3,ZERO : 0をレジ3設定

ONE DC 1 :ONEに1を設定

ZERO DC 1 :ZEROに0を設定

N DC 10 :Nに10を設定 ANS DS 1 :

END :プログラムの終わり

0011

0013 0014 0015 0016 0017

メモリの内容

CPU

の中身

負 ゼロ オ

プログラムカウンタ

0008

10

0009

0011

比較(

CPA

)と結果が

0

の場合

のジャンプ(

JZE)

[正]

10

19

START :開始

LD GR1,N :Nをレジ1に設定 LD GR2,ZERO :0をレジ2設定

LOOP :戻り先

ADDA GR2,ONE :レジ2に1足す

ADDA GR3,GR2 :レジ3にレジ2足す

CPA GR1,GR2 :比較

JZE EXIT :0以下はEXITへ JUMP LOOP :LOOPへ

EXIT ST GR3,ANS : ANSにGR3入れる

RET :計算の終わり

(スタックポインタ)

GR1

(レジスタ)

GR2(

レジスタ)

フラグレジスタ

GR3(

レジスタ)

0001

0002

0003

0004

0005

0006

0007

0008

0009

0010

0012

LD GR3,ZERO : 0をレジ3設定

ONE DC 1 :ONEに1を設定 ZERO DC 1 :ZEROに0を設定

N DC 10 :Nに10を設定 ANS DS 1 :

END :プログラムの終わり

0011

0013 0014 0015 0016 0017

メモリの内容

CPU

の中身

負 ゼロ オ

プログラムカウンタ

0008

10

0009

0011

比較(

CPA

)と結果が

0

の場合

のジャンプ(

JZE) [

]

20

(11)

プログラム言語の成立と変遷

21

1950

1960

1970

1980

1990

2000

2010

プログラム言語の発展

アセンブラ アセンブラ アセンブラ アセンブラ (機械語 (機械語 (機械語 (機械語 対応 対応 対応 対応)

COBOL

(事務処理) (事務処理) (事務処理) (事務処理)

FORTRAN

(科学技術 (科学技術(科学技術 (科学技術

計算) 計算) 計算) 計算)

ALGOL

(アルゴリズ (アルゴリズ (アルゴリズ (アルゴリズ ム研究) ム研究)ム研究) ム研究)

PL/I

(汎用処理) (汎用処理) (汎用処理) (汎用処理)

Lisp

(論理計算 (論理計算 (論理計算 (論理計算

研究) 研究) 研究) 研究)

Simula

(アルゴリズ (アルゴリズ (アルゴリズ (アルゴリズ ム研究) ム研究)ム研究) ム研究)

BASIC

(教育用) (教育用) (教育用) (教育用)

Smalltalk(オ(オ(オ(オ ブジェクト指 ブジェクト指 ブジェクト指 ブジェクト指

向) 向)向) 向)

CommonLisp

(論理計算 (論理計算(論理計算 (論理計算

研究) 研究) 研究) 研究)

C

(汎用処理) (汎用処理) (汎用処理) (汎用処理)

C++

(汎用・オブ (汎用・オブ (汎用・オブ (汎用・オブ ジェクト) ジェクト) ジェクト) ジェクト)

Java

(汎用・オブ (汎用・オブ (汎用・オブ (汎用・オブ ジェクト) ジェクト) ジェクト) ジェクト)

C#

(汎用・オブ (汎用・オブ(汎用・オブ (汎用・オブ ジェクト) ジェクト) ジェクト) ジェクト)

JavaScript

( ( (

(Web・オブ・オブ・オブ・オブ ジェクト) ジェクト) ジェクト) ジェクト)

Ruby

(汎用・オブ (汎用・オブ (汎用・オブ (汎用・オブ ジェクト) ジェクト) ジェクト) ジェクト)

Perl

(汎用・オブ (汎用・オブ (汎用・オブ (汎用・オブ ジェクト) ジェクト)ジェクト) ジェクト)

Python

(汎用・オブ (汎用・オブ (汎用・オブ (汎用・オブ ジェクト) ジェクト) ジェクト) ジェクト)

Haskel

(論理計算 (論理計算(論理計算 (論理計算

研究) 研究) 研究) 研究)

Visual BASIC

(汎用・ (汎用・ (汎用・ (汎用・MS))))

(12)

プログラム言語の現在価値

各言語に対する現在の需要はどのようなものか

– Googleで、「XX言語 求人」で検索したヒット数をグラフ化したものが以下のグラフ – Ruby言語、C言語、python言語に関する需要が非常に高いと考えられる

– C#, Javaなどの基幹システム向けオブジェクト指向言語がその次に登場 – COBOL、 アセンブラ、 FORTRANも、継続的な需要がある

23 プログラム言語 googleのヒット数

c言語 1910000

Ruby言語 419000

c#言語 387000

Python言語 323000

COBOL言語 291000

Java言語 238000

PL/1言語 60000

FORTRAN言語 47200

Haskel言語 41200

Lisp言語 36700

アセンブラ言語 20700

各言語の求人需要

c言語 Ruby言語 c#言語

Python言語 COBOL言語 Java言語

PL/1言語 FORTRAN言語 Haskel言語

Lisp言語 アセンブラ言語

プログラム言語とは

プログラム言語は、手続き型プログラミング言語

(Procedural Programming Language

)と宣言型プログラミン

グ言語

(Declarative Programming Language)

に分けられる

手続き型言語は、処理を時系列的に(順番に)記述するタイプ

の言語である

処理内容を順番に記述していくため、考え方が単純でプロ グラミング

が簡単

処理の順序を間違えると想定しない結果となり、原因追究が大変に

なる

宣言型言語は、処理内容をその数学的性質に着目して、数式

を書くように記述するプログラム言語

処理内容を数学の公理のように表現できる場合、簡潔でエレガント

なプログラムを書くことができる

明確な時間順序を含むような処理内容の記述には不向きである

宣言型言語は、情報科学の分野の研究で多く利用されて

いるが、企業の実務で利用されるプログラム言語はほとん

どが手続き型言語である

(13)

主要な手続き型言語

1950

年代の後半には、現在でも利用されている

FORTRAN

COBOL

などの手続き型言語が登場した

その後、コンピュータの主流が、大型コンピュータ(メインフレーム)

から、サーバやパソコンへ変わっていくに従い、その環境に適した

C

言語、

Java

言語が多く利用されるようになる

1980

年代後半から、オブジェクト指向プログラミングという手法が普

及し、この手法を実装できるオブジェクト指向言語が登場し、現在は

この種の言語が主流になっている

コンパイル型:(プログラムのテキストを機械語に翻訳し、機械語になっ

たものを実行する方式)

Java

C++

C#

など

スクリプト型:(プログラムのテキストをそのまま読み込み、実行する方

式)

Python

Perl

Ruby

など

これらの主要なプログラム言語の内容を簡単に紹介する

プログラムのサンプルとして、「1から

10

までを集計する」プログラムを

しめす

25

FORTRAN

(科学技術計算用言語)

FORTRAN (

フォートラン

)

は、最初にコン

パイラが作られたプログラム言語

FORTRAN

は「

Formula Translator

(

数式

変換器

)

の頭の文字を付けたもの

1957

年に

IBM704

というコンピュータ上で

稼働する、最初のコンパイラ(翻訳ソフト

ウェア)がリリースされた

現在も科学技術系計算分野では、多く

では使用され続け、約

50

年以上の歴史

がある

長く使用されている理由

実行性能を重視する設計思想であり、科

学技術計算に焦点を当てた言語仕様で

ある

言語仕様を時代に合わせ、変更・拡張

し、利用者が他の新しい言語に離れな

かった

FORTRAN

仕様の変遷をみると、

FORTRAN I

から始まり、

FORTRAN

II/III/IV

FORTRAN 66, FORTRAN

77,Fortran 90, Fortran 95

等となって現在

に至っている

FORTRAN

のプログラム例

SUM = 0

DO 100 I = 1,10

SUM = SUM + I

100 CONTINUE

WRITE(6,1000) SUM

1000 FORMAT(1H ,F10.0)

STOP

END

(14)

COBOL(

事務処理用言語)

FORTRAN

が科学技術計算用言語であるの

に対し、

COBOL

は事務処理用言語である

COBOL

の名称は

Common Business Oriented

Language

に由来する

1960

年に最初の言語仕様が策定され、同じ

年に最初のコンパイラが開発された。

FORTRAN

同様に、時代と共に言語仕様を少

しずつ改変しながら、現在まで使用され続

けている

COBOL

のプログラムは、プログラム言語の

中で非常に特徴的な構文を持つ

プログラムの保守性を高めるため、宣言部

が長い

計算式や代入文の代わりに、プログラムの

可読性を高めるため、

“MOVE 0 TO

WK-SUM.”

“ADD I TO WK-SUM.”

が使用される

COBOL

では任意桁数の整数型演算が可能

である

COBOL

が事務処理用言語であるためである

COBOL

のプログラム例

IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE. ENVIRONMENT DIVISION. DATA DIVISION.

WORKING-STORAGE SECTION. 01 I PIC 9(02) VALUE 0. 01 SUM PIC 9(04) VALUE 0. PROCEDURE DIVISION.

PERFORM VARYING COUNTER FROM 1 BY 1 UNTIL I > 10

ADD I TO SUM END-PERFORM DISPLAY SUM STOP RUN.

27

Java(

ネットワーク指向言語)

Java (

ジャバ

)

は、

1990

年初めに家電組み込み用言語として開発された

インターネットの拡大期であったため、言語仕様をネットワーク対応に焦点をあ

て、全世界的に普及した

1995

年に最初の処理系が開発され、その後も改良が続けられている

Java

の構文は、

C

言語をオブジェクト指向型言語に拡張した

C++

言語に類似し

ている

その結果、従来の

C, C++

プログラマが習得しやすく、

Java

人口が飛躍的に増加

Java

の特徴は、いったんバイトコード(中間言語)に変換され、それを

Java

仮想

マシンが読み込み、プログラムが実行される点である

その結果、

Java

の仮想マシンはどのようなハードウェア、

OS

にも対応され、プラット

フォーム非依存な言語となっている

WORA

Java

の標語 (

Write Once, Run Anywhere

Web

アプリや様々な分野で、最も使用されるプログラム言語のひとつである

Java

のプログラム例

class Sample {

public static void main(String[] args){ float sum = 0;

for(int i = 1; i <= 10; i++) sum += i; System.out.println(sum); }

(15)

Python(

スクリプト型言語)

Python

は,

1990

年頃にオランダの

Rossum

開発したスクリプト型プログラム言語である

現在は

3.4

のバージョンまで公開されている

Python

の特徴

プログラムコードの可読性が高くなるように

言語が設計されており、その構文のおかげ

で、

C

などの言語に比べて、より少ないコード

行数でプログラムを表現することができる

Python

は複数のプログラミングコンセプトを

取り入れており、オブジェクト指向、命令型、

関数型、手続き型などのプログラミングスタ

イルが使用できる

スクリプト言語として使われることが多いが、

スクリプト以外の幅広い領域でも使用されて

いる

Python

のインタープリタは、さまざまなオペ

レーションシステムで使用することができる。

Python

は、

Google

Yahoo

などに代表される

有名企業でも利用され、初心者が習得しや

すい簡潔さと、大手企業でも採用される十

分な

奥深

さを

兼ね備

えた言語である

Python

のプログラム例

i = 0

sum = 0

while i < 10:

i += 1

sum += i

print sum

29

1980

1985

1990

1995

2000

2005

2010

マークアップ言語などの発展

SGML

(Standard Generalized Markup

Language)

XML

(Extensible Markup Language)

HTML

(HyperText Markup Language)

DHTML

( Dynamic HTML)

XHTML

(Extensible HyperText Markup

Language)

XBRL

(Extensible Business Reporting Language)

WSDL

(Web Services Description

Language)

XBRL

(Extensible Business Reporting Language)

XBRL

(Extensible Business Reporting Language)

Javasclipt

VBsclipt

(16)

主要なマークアップ言語

SGML (Standard Generalized Markup Language)

1979年に発表された「GML」の後継言語として1986年に国際規格として制

定された

メタ言語であり、文書にマークアップを含める構文や、どんなタグがどこで使

えるのかなどを記述する構文規則を規定できる

SGMLの文脈におけるタグは、文書の要素について、それの意味を説明する

ためのものである

文書作成者は文書の構造を、自分の意図に従って構築し、他人がその意

味を理解しやすいものにできる

HTML (Hyper Text Markup Language)

HTMLはハイパーテキストによる、WEB上のページ参照のフレームワーク。

マークアップはテキストを要素で括って意味付けし、テキストの特定要素に

URIを用いた他ページへのリンクを記載すれば、ユーザエージェントはそれを

解釈して指定された他ページを表示する

マークアップの種類に、引用や画像の埋め込み、文書のタイトルの指定など

を定める要素があり、ユーザエージェントはそれらを解釈しそれに合わせた

表示を行う。HTMLはこれらのマークアップ規則を定めている。現在は

HTML5.0が最新バージョン。

31

主要なマークアップ言語

XML (Extensible Markup Language)

XML

SGML

の後継であり、目的に対応したマークアップ言語開発に汎用的に用

いる言語仕様である。

マークアップ言語とは、コンピュータ言語の一種で、文章の論理的な構

(段

ど)や

見栄え

(フォント

など)に関する指定を、文章とともにテ

ストフ

イル

記述

するための言語である。

XML

は、拡張可能な言語の一

に分

され、

XML

を使うことで使用者は

分たち

自身

で複数のタグを定

することができる。

XML

の最も重要な目的は、

なる

情報

システムの

で、

にインターネットを

て、構

造化

された文

や構

造化

された

ータの

共有

を、

容易

にすることである

務や技術分

における、

フトウェア

通信

情報交

換に用いる

式や、様

な種

ータを保存するためのフ

イルフォーマットなどの定

に使われている。現在は

XML1.1

が最新バージョン

XML

を利用した

個別

向けマークアップ言語

– MathML: 数式を記述するためのマークアップ言語、数式特有な様々な特殊記号などを WEB上で表現するための言語

– XBRL: 企業の財務諸表などを記述するためのマークアップ言語、日本の上場企業の有価

証券報告書はXBRLで提出することが義務付けられている

– WDSL: Webサービスを記述するための、マークアップ言語、Webサービスがどのような機

能を持つか、利用するためにはどのような要求をすればいいかを記述する言語

(17)

XML

のサンプル

<表>

<データrecord="1">

<日付>5月10日</日付>

<勘定科目>交通費</勘定科目> <金額>1,260</金額>

<備考>B社まで、タクシー</備考> </データ>

<データrecord="2">

<日付>5月10日</日付>

<勘定科目>交際費</勘定科目> <金額>15,000</金額>

<備考>B社Aさんを接待</備考> </データ>

<データrecord="3">

<日付>5月13日</日付>

<勘定科目>会議費</勘定科目> <金額>900 </金額>

<備考>喫茶店で打ち合せ</備考> </データ>

</表>

<!DOCTYPE 表[

<!ELEMENT 表(データ+) >

<!ELEMENT データ(日付,勘定科目,金額,備考) > <!ATTLIST データrecord CDATA #REQUIRED > <!ELEMENT 日付(#PCDATA) >

<!ELEMENT 勘定科目(#PCDATA) > <!ELEMENT 金額(#PCDATA) > <!ELEMENT 備考(#PCDATA) > ]>

XML/DTD

33

●どのような

ータ構

ータ

目がある

か、それ

れの

目の関

を定

する

ータ

ースのス

ーマに当たる

XML/DTD

ータ構

に従って、

ータを

記述

する

●この例は

会社

で使用した

交通費

する

書類

の例

XML

ータ

コンパイラの仕組み

人が書く言葉から、機械語(

CASL II)

(18)

コンパイラ

コンパイラは言語プロセッサの代表的なもの

プログラム言語で記述されたソースコード(原始プログラ

ム)をオブジェクトコード(目的プログラム)に翻訳するこ

とを、

Compile

(コンパイル)という。

ソースコード

(Source Code)

: 人間が読めるテキスト形式の

プログラム

オブジェクトコード

(Object Code)

: 機械語形式のコンピュー

タが読めるプログラム

CASLII

は、機械語と一対一対応をしたもの。機械語と考えて

もよい。

プログラム言語とは、

COBOL

FORTRAN

Java

Python

どの、人間に理解しやすい、コンピュータにさせる仕事の

内容を記述しやすい言語体系のこと

35

コンパイルの手順図

FORTRAN

は、数学や

理の式の計算用

考え

られた言語

変数は

A

B

CX

DAT

など、最初が

字の文字

配列

DAT(100)

1

BOX(10,10) 2

など

n

の構

四則

演算は

X=A+B

DAT-CX)

など

分岐は

IF

– IF (条件式 ) THEN [ 処理1 ]

ELSE

[ 処理2 ] ENDIF

ループは

DO

– DO 100 I = 1,10 [ 処理 ] 100 CONTINUE

コンパイルの手

を技術計算用の高

言語

FORTRAN

説明

する。

(19)

例題

DAT

という要素が

100

の配列に格納されたデータ

から、最大値を見つけるプログラム

DIMENSION REAL DAT(100)

DIMENSION REAL MAX, KOTAE

DIMENSION INTEGER I

C

MAX = -9999

DO 100 I=1, 100

IF ( DAT(I) > MAX ) THEN

MAX = DAT(I)

ELSE

ENDIF

KOTAE = 0

100 CONTINUE

C

KOTAE = MAX

STOP

END

37

コンパイル手順の詳細 -

FORTRAN

例として

句解析]

– ソースコードに含まれる文字列、FORTRANの場合は、「DIMENSION REAL DAT(100)」などを分

解し、「DIMENSION」、「REAL」、「DAT」のように、トークンと呼ばれる単語の単位に分割する。

構文

解析]

– プログラム(コード)が、文法的に正しいかをチェックする。FORTRANの場合は、「DO 100 I =1,100 」というソースコードの場合には、「DO」の次には数字の文字列が、その次には変数

(最初が英字の文字列)が来る、その次は数字、カンマ、数字の並びが来るルールである。 構文的に間違っていると判断しエラーとする。この時の文法ルールを記述するのがBNF

(バッカス記法)である。

[意味解析]

– 対象言語の意味的なルールが守られ実行可能かを判断する。FORTRANの場合は、配列

(DATなど)の添え字は、INTEGER(整数型)でなければならない。意味的にFORTRANのルー

ルに適切でないと判断しエラーとする。

コード最

適化]

– ソースコードレベルで、実行時により速く実行できるよう、冗長な部分や繰り返し部分を整理

し、オブジェクトコードのサイズをできるだけ小さくするよう変換する。

コード

– 整理されたソースコードを、ビットパターンに変換しオブジェクトコードを生成する。

(20)

トークンへの分解

行数 トークン

1

DIMENTION

予約

1

REAL

予約

1

DAT

変数

1

(

演算

1

100

数値

1

)

演算

5

MAX

変数

5

=

演算

5

-9999

数値

6

DO

予約

6

100

数値「

行数 トークン

6

I

変数

6

1

数値

6

100

数値

7

IF

予約

7

演算

7

DAT

演算

7

演算

7

I

変数

7

演算

7

>

演算

7

MAX

変数

7

演算

7

THEN

予約

39

構文解析と

BNF

記法

構文解析は、作成されたプログラムが、プログラム言語の文法に

適合しているかを検査することであり、正しいプログラムの文法を

事前に

BNF

記法で記述する必要がある

BNF

記法とは、正式にはバッカス・ナウア記法(

Backus-Naur Form

であり、文脈自由文法を定義するのに用いられるメタ言語のこと。

この記法は、

1960

年ごろJ.バッカス氏とP.ナウア氏が、

ALGOL60

という、の文法定義のために考案したものである。

ALGOL60

は、

1950

年代後

、アメリカの

FORTRAN

の言語に対

して、

ロッパの

研究

者が開発したプログラミング言語。

アル

ムの

研究

目的で作成され、アル

記述

の標

言語として普

及し、その後の

C

言語などのプログラミング言語設計に大きな

影響

与え

た。

現在は最初の

BNF

記法を拡張した、

EBNF (Extended BNF)

が使わ

れ、様々なコンパイラの文法定義や、

XML

の構文定義にも利用さ

れている。

(21)

BNF

記法

1

BNF

記法はプログラム言語の文法を表現する記法

1

桁の

10

数を表現する

BNF

<digit> ::= 0|1|2|3|4|5|6|7|8|9

規則2

・・・・・・・

」が来た

2

」が来た

X

」が来た

規則0 規則1

1

2

BNF

記法

2

より広い概念に文法を拡張する。

0

以上の

10

整数を表現する。

つの

定義

必要

<number> ::=<digit>{<digit>}

<digit> ::= 0|1|2|3|4|5|6|7|8|9

2

」が来た

12

N(0) = 1

る。

N(1) = 2

る。

1X

」が来た

N(0) = 1

る。

1

(22)

BNF

記法

3

簡単な四則演算プログラムの文法を

BNF

記法で書いてみる。

プログラムは「

main

1+10*5-3

」の

うに

{}

まれた

範囲

計算式(

<expression>

)を計算する機能を持つ。

計算式の中で用いられる

要素

要素

間の

関係

が、以

BNF

で記

される。

<program> ::= main '{' <expression> '}'

<expression> ::= <term>{ <opeas> <term> }

<term> ::= <factor>{ <opemd> <factor> }

<factor> ::= <number>|( <expression> )

<number> ::= <digit>{<digit>}

<opeas> ::= + |

-<opemd> ::= * | /

<digit> ::= 0|1|2|3|4|5|6|7|8|9

意味解析とコード最適化

意味解析の処理内容

記述された内容の整合性のチェック

この例題では

・ 未定義な変数を使って計算していないか

・ 定義した配列(

DIMENSION

)の次元と、使用している

配列の次元が、対応しているか

・ 配列の添え字に使用する変数は

INTEGER

型か

コード最適化

重複する、冗長な処理を整理する

この例題では

DO

ループの中で、同じ変数へ同じ値の代入を、繰り返して

いる。

・ 「

KOTAE = 0

」 をループ(繰り返し)の外に出す。

(23)

機械語への変換

(アセンブラで機械語を表示)

DIMENSION REAL DAT(100)

DIMENSION REAL MAX, KOTAE

DIMENSION INTEGER I

C

MAX = -9999

DO 100 I=1, 100

IF ( DAT(I) > MAX ) THEN

MAX = DAT(I)

ELSE

ENDIF

KOTAE = 0

100 CONTINUE

C

KOTAE = MAX

STOP

END

DAT

DS 100

MAX DS 1

KOTAE DS 1

I DS 1

M9999 DC -9999

P0 DC 0

P1 DC 1

P100 DC 100

45

機械語への変換

(アセンブラで機械語を表示)

DIMENSION REAL DAT(100)

DIMENSION REAL MAX, KOTAE

DIMENSION INTEGER I

C

MAX = -9999

DO 100 I=1, 100

IF ( DAT(I) > MAX ) THEN

MAX = DAT(I)

ELSE

ENDIF

100 CONTINUE

C

KOTAE = 0 (

適化

移動

KOTAE = MAX

STOP

END

LD GR1, M9999

ST GR1,MAX

LD GR2,C0

L100 CPA GR2,P100

JPL E100

LD GR3,DAT, GR2

CPA GR3,GR1

JMI EXIT

ST GR1, MAX

EXIT ADDA GR2,P1

JUMP L100

E100 NOP

(24)

機械語への変換

(アセンブラで機械語を表示)

DIMENTION REAL DAT(100)

DIMENSION REAL MAX, KOTAE

DIMENSION INTEGER I

C

MAX = -9999

DO 100 I=1, 100

IF ( DAT(I) > MAX ) THEN

MAX = DAT(I)

ELSE

ENDIF

100 CONTINUE

C

KOTAE = 0 (

適化

移動

KOTAE = MAX

STOP

END

LD GR1, P0

ST GR1,KOTAE

LD GR2,MAX

ST GR2, KOTAE

47

機械語への変換

DIMENSION REAL DAT(100)

DIMENSION REAL MAX,

KOTAE

DIMENSION INTEGER I

C

MAX = -9999

DO 100 I=1, 100

IF ( DAT(I) > MAX ) THEN

MAX = DAT(I)

ELSE

ENDIF

100 CONTINUE

C

KOTAE = 0 (

適化

移動

KOTAE = MAX

STOP

END

LD GR1, M9999 ST GR1,MAX LD GR2,C0 L100 CPA GR2,P00

JPL E100 LD GR3,DAT, GR2 CPA GR3,GR1 JMI EXIT

ST GR1, MAX EXIT ADDA GR2,P1

JUMP L100 E100 NOP

DAT DS 100 MAX DS 1 KOTAE DS 1 I DS 1 M9999 DC -9999 P0 DC 0 P1 DC 1 P100 DC 100

LD GR1, P0 ST GR1,KOTAE LD GR2,MAX ST GR2, KOTAE MAIN START

END RET

Updating...

参照

Updating...

関連した話題 :