>サイトトップへ >このカテゴリの一覧へ

X 3008-1994 (ISO/IEC 7185: 1990)

(1) 

目次

ページ

1.

  適用範囲

5

1.1

5

1.2

5

2.

  引用規格

5

3.

  用語の定義

5

3.1

  誤

5

3.2

  拡

6

3.3

  処理系定義

6

3.4

  処理系依

6

3.5

  処理系

6

4.

  定義の方法

6

5.

  規格準拠性

7

5.1

  処理系

7

5.2

  プログラム

8

6.

  要求事項

8

6.1

  字句要素

8

6.1.1

  一般規則

9

6.1.2

  特殊記号

9

6.1.3

  識別子

9

6.1.4

  指令

9

6.1.5

  数

9

6.1.6

  ラベル

10

6.1.7

  文字列

10

6.1.8

  字句分離符

10

6.1.9

  字句の代替表現

11

6.2

  ブロック・有効範囲・駆動

11

6.2.1

  ブロック

11

6.2.2

  有効範囲

11

6.2.2.1

11

6.2.2.2

12

6.2.2.3

12

6.2.2.4

12

6.2.2.5

12

6.2.2.6

12

6.2.2.7

12


X 3008-1994 (ISO/IEC 7185: 1990)

目次

(2) 

ページ

6.2.2.8

12

6.2.2.9

12

6.2.2.10

12

6.2.2.11

12

6.2.3

  駆動

12

6.2.3.1

12

6.2.3.2

12

6.2.3.3

13

6.2.3.4

13

6.2.3.5

13

6.3

  定数定義

13

6.4

  型定義

13

6.4.1

  一般規則

13

6.4.2

  単純型

14

6.4.2.1

  一般規則

14

6.4.2.2

  標準の単純型

14

6.4.2.3

  列挙型

14

6.4.2.4

  部分範囲型

15

6.4.3

  構造型

15

6.4.3.1

  一般規則

15

6.4.3.2

  配列型

15

6.4.3.3

  レコード型

16

6.4.3.4

  集合型

18

6.4.3.5

  ファイル型

18

6.4.4

  ポインタ型

20

6.4.5

  型の適合性

20

6.4.6

  代入可能性

20

6.4.7

  型定義部の例

20

6.5

  変数の宣言及び表し方

21

6.5.1

  変数宣言

21

6.5.2

  純変数

22

6.5.3

  成分変数

22

6.5.3.1

  一般規則

22

6.5.3.2

  添字付き変数

22

6.5.3.3

  フィールド表記

23

6.5.4

  被指示変数

23

6.5.5

  バッファ変数

24

6.6

  手続き宣言・関数宣言

24

6.6.1

  手続き宣言

24


X 3008-1994 (ISO/IEC 7185: 1990)

目次

(3) 

ページ

6.6.2

  関数宣言

26

6.6.3

  引数

28

6.6.3.1

  一般規則

28

6.6.3.2

  値引数

29

6.6.3.3

  変数引数

29

6.6.3.4

  手続き引数

29

6.6.3.5

  関数引数

29

6.6.3.6

  引数並びの同形性

29

6.6.3.7

  整合配列引数

30

6.6.3.7.1

  一般規則

30

6.6.3.7.2

  値整合配列

31

6.6.3.7.3

  変数整合配列

31

6.6.3.8

  整合性

31

6.6.4

  標準手続き・標準関数

31

6.6.5

  標準手続き

31

6.6.5.1

  一般規則

31

6.6.5.2

  ファイル操作手続き

32

6.6.5.3

  動的割当て手続き

33

6.6.5.4

  変換手続き

34

6.6.6

  標準関数

35

6.6.6.1

  一般規則

35

6.6.6.2

  算術関数

35

6.6.6.3

  変換関数

35

6.6.6.4

  順序関数

35

6.6.6.5

  論理関数

36

6.7

  式

36

6.7.1

  一般規則

36

6.7.2

  演算子

38

6.7.2.1

  一般規則

38

6.7.2.2

  算術演算子

38

6.7.2.3

  論理演算子

39

6.7.2.4

  集合演算子

39

6.7.2.5

  関係演算子

39

6.7.3

  関数呼出し

40

6.8

  文

40

6.8.1

  一般規則

40

6.8.2

  単純文

40

6.8.2.1

  一般規則

40

6.8.2.2

  代入文

41


X 3008-1994 (ISO/IEC 7185: 1990)

目次

(4) 

ページ

6.8.2.3

  手続き呼出し文

41

6.8.2.4

  goto 文

41

6.8.3

  構造文

41

6.8.3.1

  一般規則

42

6.8.3.2

  複合文

42

6.8.3.3

  条件文

42

6.8.3.4

  if 文

42

6.8.3.5

  case 文

42

6.8.3.6

  繰返し文

42

6.8.3.7

  repeat 文

43

6.8.3.8

  while 文

43

6.8.3.9

  for 文

43

6.8.3.10

  with 文

45

6.9

  入出力

46

6.9.1

  手続き read

46

6.9.2

  手続き readln

47

6.9.3

  手続き write

47

6.9.3.1

  write 引数

48

6.9.3.2

  文字型

48

6.9.3.3

  整数型

48

6.9.3.4

  実数型

49

6.9.3.4.1

  浮動小数点表現

49

6.9.3.4.2

  固定小数点表現

50

6.9.3.5

50

6.9.3.6

  文字列型

50

6.9.4

  手続き writeln

51

6.9.5

  手続き page

51

6.10

  プログラム

51

附属書 A(参考)  構文規則

54

附属書 B(参考)  索引

59

附属書 C(参考)  標準の識別子

63

附属書 D(参考)  誤り

64

附属書 E(参考)  処理系定義の機能

67

附属書 F(参考)  処理系依存の機能

68


日本工業規格

JIS

 X

3008

-1994

 (ISO/IEC

7185

: 1990

)

プログラム言語 Pascal

Programming Language Pascal

日本工業規格としてのまえがき 

この規格は,1990 年に発行された ISO/IEC 7185 (Information technology−Programming languages−Pascal)

を翻訳し,技術的内容及び規格票の様式を変更することなく作成した日本工業規格である。

なお,この規格で点線の下線を施してある“参考”は,原国際規格にはない事項である。

1.

適用範囲

1.1

この規格は,プログラム言語 Pascal の処理系及び規格準拠プログラムに対する要求事項を規定する

ことによって,Pascal の構文規則及び意味規則を定める。処理系及びプログラムの,規格に対する準拠の

仕方に,それぞれ 2 水準を置く。

1.2

この規格は,次の事項を規定しない。

(a)

プログラム及びデータの大きさ又は複雑さについて,特定のデータ処理システム又は処理系が処理で

きる限界並びにそれらの限界を超えた場合の措置。

(b) Pascal

の処理系を実現するためのデータ処理システムの最低条件。

(c)

プログラムブロックを駆動する方法及び Pascal プログラムを変換し実行する環境を制御するための指

令。

(d) Pascal

で書いたプログラムをデータ処理システムが実行できるように変換するための機構。

(e)

誤り又は警告を報告する方法。

(f)

人間が読むことを想定してプログラムを公表する際の印刷上の表現。

2.

引用規格  この規格では,次に示す規格を引用することによって,この規格の要件の一部とする。そ

れぞれの規格には,この規格の発行時点での有効な版を明示してある。どの規格にも改正の可能性がある

から,この規格に従った合意を形成するに当たっては,それぞれの規格の最新版を調べて適用することが

望ましい。有効な国際規格がどれであるかは,ISO 及び IEC の参加団体が保持している。

ISO 646 : 1983

  Information processing−ISO 7-bit coded character set for information interchange

参考  JIS X 0201-1976(情報交換用符号)がこの規格と整合している。

3.

用語の定義  この規格で用いる主な用語の定義は,次のとおりとする。

3.1

誤り (error)    この規格の要求事項に対するプログラムの違反であって,処理系が必ずしも検出しな

くてよいもの。

参考1.  この規格に違反するかしないかが,読み込むデータに依存するプログラム,又は処理系定義

の機能をその処理系がどう定義しているかに依存するプログラムを作ることができる場合,


2

X 3008-1994 (ISO/IEC 7185: 1990)

その要求事項に対する違反を誤りと規定する。処理系は,これらの情報を使わなくても,そ

うした違反があると報告できることもある。しかし,違反となるかどうかが,実行してみる

か,実行をシミュレートしてみるか,又はそうした情報をもとにして検証手順を踏んでみる

かしなければ分からない場合が必ずある。要求事項に対する違反のうち,違反となるかどう

かがそうした情報を使わずに判定できるものは,誤りといわない。

2.

処理系は,できる限り多くの誤りをできる限り完全に検出するように努めることが望ましい。

ただし,その検出が過大な負担となる場合は,この限りでない。

3.2

拡張 (extension)    この規格の 6.に対する変更のうち,この規格に準拠するプログラム(5.2 参照)

を排除することがないもの。

ただし,

幾つかの特定のつづりの識別子の使用を禁じてもよい

6.1.2 及び 6.1.3

参照)

3.3

処理系定義  (implementation-defined)    処理系によって異なっているかもしれないが,個々の処理系

では定義されている。

3.4

処理系依存 (implementation-dependent)    処理系によって異なっているかもしれず,個々の処理系で

定義されているとも限らない。

3.5

処理系  (processor)    プログラムを入力として受け取り,その実行の準備を行い,それをデータとと

もに実行して結果をもたらすためのシステム又は機構。

参考  処理系とは,インタプリタ又はコンパイラと実行時システムといったものだけではなく,その

背後にある計算機とオペレーティングシステム又はそれと同等の機構をも含めていう。例えば,

コンパイラ単独では処理系とはいわない。

4.

定義の方法  この規格では,プログラム要素の構文を規定するのに Backus−Naur 記法に基づいた記述

法を用いる。本来の Backus−Naur 記法に幾つかの変更を加えて,記述をより便利にし,再帰的な生成の代

わりに繰返しによる生成ができるようにした。この記述法で使う記号の意味を

表 に示す。プログラム要

素についてのそれ以上の規定は,文章又は等価なプログラムの断片によって示す。こうしたプログラムの

断片は,この規格の関連する要求事項に従った意味をもつ。そこでは,6.で標準の識別子として定義する

識別子は,それぞれ対応する標準の実体を表す。

表 1  構文の記述に使う記号

記号

意味

=

定義する

>

部分的に定義する

|

又は

定義の終わり

[x] x

又は空

{x} x

を 0 個以上並べたもの

(x | y)

x

又は y(一つにまとめて扱うために用いる)

‘xyz’

終端記号 xyz

超識別子

非終端記号

超識別子は,漢字,仮名及び英字の列とする。

生成規則の中の終端記号又は非終端記号の列は,その各々が生成する最終的な文字列をその順に連結し

たものを表す。6.1 では,この連結は,字句どおりのものとする。すなわち,他の文字をそれらの間に置い

てはならない。6.2 以下での連結は,6.1 の規則に従う。

Pascal

のプログラムを書くのに必要な文字は,6.1 で定義する字句及び字句分離符を書くのに必要となる


3

X 3008-1994 (ISO/IEC 7185: 1990)

文字として間接的に定める。

終端記号及び非終端記号についての関係を表すのに,

“の”

“の中の”

“含む”又は“直接に含む”とい

ういい方をする場合,その意味は,次のとおりとする。

・  y の

x

――y を定義している生成規則の右辺に現れる x

・  y の中の

...

x

――“y の

x

”と同義

・  x を含む

..

y

――1 回又は何回かの生成を経て,x を生成する y

・  x を直接に含む

.....

y

――x を含む

..

y

のうち,その x を含む

..

他の y を含ま

..

ないもの

これらの規約は,6.において構文上の要求事項,及び意味上の規定を与える際の構文上の条件を規定す

るのに用いる。

この規格の中の

参考は,規格の内容をより明らかにし,規格を適用する際の助けとするための記述とす

る。

参考は,この規格の一部ではない。

この規格の中の

例は,参考と同等とする。

5.

規格準拠性  この規格に対する準拠の仕方は,水準 0 及び水準 1 の 2 種類とする。水準 0 は,整合配

列引数を含まない。水準 1 は,整合配列引数を含む。

5.1

処理系  この規格に準拠する処理系とは,次の条件を満たすものをいう。

(a)

水準 0 の準拠の場合,6.のうち 6.6.3.6(e)6.6.3.7 及び 6.6.3.8 以外で規定する言語の全機能を,6.に定義

する意味をもって受け入れる。

(b)

水準 1 の準拠の場合,6.に規定する言語の全機能を,6.に定義する意味をもって受け入れる。

(c)  6.

に規定する言語のどの機能を実現するにあたっても,プログラム中に 6.の規定と違う書き方をする

よう求めたり,何かを追加して書くよう求めたりすることがない。

(d)

すべての処理系定義の機能に対して,その定義を与えた文書が用意してある。

(e)

この規格のすべての要求事項(それに対する違反を誤りと規定する場合を除く。

)に対して,与えられ

たプログラムが違反しているかどうかを判定し,その結果をプログラムブロックの実行に先立って処

理系の利用者に報告することができる。違反があれば,プログラムブロックの実行を禁止しなければ

ならない。

(f)

誤りと規定する違反のそれぞれに対して,次のいずれかの扱いをする。

(1)

用意した文書に,誤りについては報告しないと明記し,用意した文書の中にそうした扱いをする個々

の場合を記した独立した節を設けておく。

(2)

プログラムの実行準備の段階で,誤りがある,又は実行時に誤りが起こるかもしれないと報告する。

そのような報告を出した場合にも,実行準備を継続することができる。その場合,プログラムブロ

ックの実行を禁止することもできる。

(3)

プログラムの実行中に,誤りが起こったと報告する。

更に,プログラムの実行中に誤りを報告したときには,その実行を終了する。文の中で誤りが生じ

たとき,その文の実行は完了しない。

参考1.  したがって,処理をプログラムの実行直前で終えるか,実行途中まで継続するかは,利用者

が指定できる。

(g)  6.

に規定のない機能又はそこで禁止する機能を処理系が受け入れる場合には,それらの機能のすべて

を記した文書が用意してある。そうした拡張は,

“extensions to Pascal as speciffied by ISO/IEC 7185”と

明記する。


4

X 3008-1994 (ISO/IEC 7185: 1990)

参考  日本語による場合は,“JIS X 3008 に対する拡張”と明記する。

(h)

こうした拡張のいかなる使用に対しても,誤りに対するのと同様に処置することができる。

(i)

処理系依存の機能のいかなる使用に対しても,誤りに対するのと同様に処置することができる。

参考2.  5.1で用いた“できる”という言葉は,報告及びその後の処置が利用者の指定によって切り替

えられる仕組みにしておいてもよいことを示す。

処理系が,この規格に完全に又は部分的に準拠している,と表示する場合には,次の様式によらなけれ

ばならない。

準拠の表示は,その処理系の使用時に出力するか,又は用意した文書に明記しておくかでな

ければならない。処理系がこの規格に完全に準拠している場合,準拠の表示は,次のとおりとする。

“本処理系”  complies with the requirements of level“番号”of ISO/IEC 7185.

参考

日本語による場合は,次のとおりとする。

“本処理系”は,JIS X 3008 の水準“番号”に準拠している。

処理系がこの規格の一部だけに準拠する場合,上の準拠の表示を行ってはならない。その場合の準拠の

表示は,次のとおりとする。

“本処理系”complies with the requirements of level“番号”of  ISO/IEC 7185, with the following

exceptions:

“この規格の要求事項のうち処理系が準拠していないものの完全な一覧表,又はそうし

た文書の参照”

参考

日本語による場合の書出しは,次のとおりとする。

“本処理系”は,次の事項を除いて JIS X 3008 の水準“番号”に準拠している。

いずれの場合も,

“本処理系”の部分は,その処理系を間違いなく識別できる名前で置き換え,

“番号”

の部分は,該当の水準番号で置き換えなければならない。

参考3.  この規格に完全には準拠しない処理系は,準拠していない事項についての完全な明細をその

準拠の表示に書かなくてもよい。準拠していない事項を識別するのに十分な情報を網羅した

文書を参照しておくだけでよい。

5.2

プログラム  この規格に準拠するプログラムとは,次の条件を満たすものをいう。

(a)

水準 0 の準拠の場合,6.のうち 6.6.3.6(e),  6.6.3.7 及び 6.6.3.8 以外で規定する言語の機能だけを使って

いる。

(b)

水準 1 の準拠の場合,6.に規定する言語の機能だけを使っている。

(c)

処理系依存の機能についての特定の解釈に依存していない。

参考1.  この規格に準拠するプログラムは,処理系定義の特定の値又は機能に依存していてもよい。

2.

規格準拠プログラム及び規格準拠処理系に対する規定は,規格準拠プログラムを規格準拠処

理系で処理した場合に,常に同じ結果が得られることを保証するものではない。結果は,同

じかもしれないし,異なるかもしれない。それはプログラムによる。このことを例示する簡

単なプログラムに次のものがある。

program x (output) ; begin writeln (maxint) end.

6.

要求事項

6.1

字句要素

参考  6.1 に示す構文規則は,文字から字句要素を構成する方法及びこれらの字句要素の分離の仕方を

与える。これらには,6.1 以外で規定する構文に対する規則がそのまま当てはまるわけではない。


5

X 3008-1994 (ISO/IEC 7185: 1990)

6.1.1

一般規則  Pascal プログラムを構成する字句要素は,特殊記号,識別子,指令,符号なし数,ラベ

ル及び文字列とする。文字列(6.1.7 参照)中を除いて,英字の表現の違い(大文字・小文字の別,字体の

違いなど)は,プログラムの意味に何ら影響を与えない。

英字 =

‘a’ | ‘b’ | ‘c’ | ‘d’ | ‘e’ | ‘f’ | ‘g’ |  ‘h’ |  ‘i’

 |

‘j’ | ‘k’ | ‘l’ | ‘m’ | ‘n’ | ‘o’ | ‘p’ |  ‘q’ |  ‘r’

 |

‘s’ | ‘t’  | ‘u’ | ‘v’ | ‘w’ | ‘x’ | ‘y’ |  ‘z’.

数字 =

‘0’ |  ‘1’ | ‘2’ | ‘3’ | ‘4’

 |

‘5’ |  ‘6’ | ‘7’ | ‘8’ | ‘9’.

6.1.2

特殊記号  特殊記号は,それぞれ特別な意味をもち,構文上の単位を区切る働きをもつ。

特殊記号

=

‘+’|‘-’|‘*’|‘/’|‘=’|‘<’|‘>’|‘[’|‘]’

|

‘.’|‘,

’|‘:’|‘;’|‘↑’|‘(’|‘)’

|

‘<>’|‘<=’|‘>=’|‘: =’|‘..’|予約語

.

予約語

=

‘and’|‘array’|‘begin’|‘case’|‘const’|‘div’

|

‘do’|‘downto’|‘else’|‘end’|‘file’|‘for’

|

‘function’|‘goto’|‘if’|‘in’|‘label’|‘mod’

|

‘nil’|‘not’|‘of’|‘or’|‘packed’|‘procedure’

|

‘program’|‘record’|‘repeat’|‘set’|‘then’

|

‘to’|‘type’|‘until’|‘var’|‘while’|‘with’

6.1.3

識別子  識別子は,どんな長さでもよい。識別子を構成している文字を,英字の大文字・小文字の

区別をせずに順に並べたものを,その識別子の

つづりという。識別子は,どの予約語とも異なったつづり

でなければならない。

標準の識別子と規定するものは,特別な働きをもつ(6.2.2.10 及び 6.10 参照)。

識別子  =  英字  {  英字  |  数字  }  .

例 X

time

readinteger

WG4

AlterHeatSetting

InquireWorkstationTransformation

InquireWorkstationIdentification

6.1.4

指令  指令は,手続き宣言又は関数宣言の中

..

でだけ用いる。指令は,標準の指令 forward だけとす

る(6.6.1 及び 6.6.2 参照)

。指令は,どの予約語とも異なったつづりでなければならない。

指令  =  英字  {  英字  |  数字  }  .

参考  多くの処理系が,拡張として,指令 external を用意している。この指令は,手続き頭部又は関

数頭部に対応する手続きブロック又は関数ブロックが,プログラムブロックの外にあることを

示すのに用いる。通常,対応するブロックは,何らかの処理を加えられた上で,ライブラリ中

に置かれる。

6.1.5

数  符号なし整数は,整数型(6.4.2.2 参照)の値を 10 進法で表す。符号なし実数は,実数型(6.4.2.2

参照)の値を 10 進法で表す。英字 e 及びそれに続く指数は,その前の部分の表す値に 10 の指数乗を乗ず

ることを意味する。符号なし整数が表す値は,閉区間 [0, maxint] 内になければならない(6.4.2.2 及び 6.7.2.2

参照)


6

X 3008-1994 (ISO/IEC 7185: 1990)

符号付き数  =  符号付き整数  |  符号付き実数  .

符号付き実数  =  [  符号  ]  符号なし実数  .

符号付き整数  =  [  符号  ]  符号なし整数  .

符号なし数  =  符号なし整数  |  符号なし実数  .

符号  =  ‘+’  |  ‘‐’  .

符号なし実数  =  数字列  ‘.’  小数部  [  ‘e’  指数  ]

              |  数字列  ‘e’  指数  .

符号なし整数  =  数字列  .

小数部  =  数字列  .

指数  =  [  符号  ]  数字列  .

数字列  =  数字  {  数字  }  .

例 1e10

1

+100

‐0.1

5e-3

87.35E+8

6.1.6

ラベル  ラベルは,数字列とし,その数字列の表す整数値によって区別する。その値は,閉区間 [0,

9999]

内になければならない。ラベルの

数字列が表す整数値を,そのラベルの

つづりという。

ラベル  =  数字列  .

6.1.7

文字列  文字列要素を 1 個だけ含む

..

文字列は,文字型(6.4.2.2 参照)の値を表す。2 個以上の文字

列要素を含む

..

文字列は,その文字列が含む

..

文字列要素と同じ個数の成分をもつ文字列型(6.4.3.2 参照)の

値を表す。同じ個数の成分をもつ文字列は,すべて同じ文字列型をもつ。

文字列要素として許される表記の集合から文字型の値の部分集合への処理系定義の 1 対 1 対応がなけれ

ばならない。文字列の中の

...

文字列要素は,それと対応する文字型の値を表す。

文字列  =  ‘’’  文字列要素  {  文字列要素  }  ‘’’  .

文字列要素  =  アポストロフィ表記  |  文字列用文字  .

アポストロフィ表記  =  ‘’’’  .

文字列用文字  =  処理系定義の文字集合の文字の一つ  .

参考  アポストロフィ自身を,文字列用文字にはできない。文字列中でアポストロフィを表したい場

合には,アポストロフィ表記を用いる。

例 ’A’

’;’

’’’’

’Pascal’

’THIS IS A STRING’

6.1.8

字句分離符  }  も*)  も含まない文字及び改行から成る列を注釈本体という。このとき,構文要素

(

‘{  ’  |  ‘(*’)  注釈本体    (  ‘}’  |  ‘*)  ’)

は,その{  又は(*が文字列中又は注釈本体中にある場合を除いて,

注釈という。

参考  以下の例示においては,注釈中の文字として漢字又は仮名を用いることがある。これは,この


7

X 3008-1994 (ISO/IEC 7185: 1990)

規格を読みやすくするためのものであって,これらの文字が含まれる注釈を受け入れることを

処理系に要求するものではない。

参考1.  注釈は,{  で始まって*)  で終わってもよいし,(*で始まって  }で終わってもよい。

2.

列 (*) は注釈本体の一部とはなりえない。一方,列{ )はなりえる。

注釈,空白(文字列中を除く。

)及び改行を

字句分離符という。0 個以上の字句分離符を,相続く字句の

間,プログラムの最初の字句の前,又はプログラムの最後の字句の後に置いてもよい。相続く字句のそれ

ぞれが,識別子,予約語,ラベル又は符号なし数である場合,その間には少なくとも 1 個の字句分離符を

置かなければならない。一つの字句の中に字句分離符があってはならない。

6.1.9

字句の代替表現  6.1.16.1.8 に示す字句及び字句分離符の表現(文字の列(*及び*)は除く。)を,

これらの字句及び字句分離符の

基準表現とする。

基準表現を扱うことのできない処理系でも Pascal が使えるようにするために,代替表現を設ける。必要

な文字が文字集合に含まれている場合,

処理系は,

基準表現も代替表現もともに処理しなければならない。

それぞれの字句又は字句分離符を表現の違いで区別して扱ってはならない。基準表現が扱えるかどうか,

代替表現のうち@が扱えるかどうかは,処理系定義とする。

字句の代替表現は,次のとおりとする。

基準表現

代替表現

↑ @

[ (.

] .)

参考1.  文字↑は,ISO 646の国別表現によっては文字^と同等とみなされている。この規格では,見

やすさを考慮して,文字↑を用いる。

参考  文字↑は,JIS X 0201 の文字^に対応する。

注釈両端の{  及び  }は,基準表現とする。(*  及び *)は,代替表現とする(6.1.8 参照)

参考2.  1.2(f)も参照のこと。

6.2

ブロック・有効範囲・駆動

6.2.1

ブロック  ラベルを含む

..

ラベル宣言部を直接に含む

.....

ブロックは,中に

..

そのラベルがある文をちょう

ど一つだけ直接に含ま

.....

なければならない。ブロックの

ラベル宣言部の中の

...

ラベルの出現は,そのラベルの

定義位置となる。この定義位置の領域は,そのブロックとする。そのラベルのそれぞれの引用(6.2.2.8 

照)は,ラベルとする。ブロックの駆動の内部では,そのラベルのすべての引用は,その駆動のアルゴリ

ズムの中のその文に対応するプログラム内位置を表す  (6.2.3.2(b)参照)

ブロック  =  ラベル宣言部  定数定義部  型定義部  変数宣言部  手続き関数宣言部  実行部  .

ラベル宣言部  =  [  ‘label’  ラベル  {  ‘,

’  ラベル  }  ‘;’  ]  .

定数定義部  =  [  ‘const’  定数定義  ‘;’  {  定数定義  ‘;’  }  ]  .

型定義部  =  [  ‘type’  型定義  ‘;’  {  型定義  ‘;’  }  ]  .

変数宣言部  =  [  ‘var’  変数宣言  ‘;’  {  変数宣言  ‘;’  }  ]  .

手続き関数宣言部  =  {  (  手続き宣言  |  関数宣言  )  ‘;’  }  .

実行部は,そのブロックが駆動されたときに実行されるアルゴリズムの動作を指定する。

実行部  =  複合文    .

6.2.2

有効範囲

6.2.2.1

プログラムブロックに含ま

..

れるすべての識別子及びラベルには,

定義位置がなければならない。


8

X 3008-1994 (ISO/IEC 7185: 1990)

6.2.2.2

定義位置は,

領域(プログラムの文面の一部)及び有効範囲(その領域の一部又は全部)をもつ。

6.2.2.3

各定義位置の領域は,別に規定する(6.2.1,  6.2.2.10,  6.3,  6.4.1,  6.4.2.3,  6.4.3.3,  6.5.1,  6.5.3.3,  6.6.1,

6.6.2, 6.6.3.16.8.3.10

及び 6.10 参照)

6.2.2.4

定義位置の有効範囲は,その定義位置の領域全体(それに囲まれるすべての領域を含む。

)とす

る。ただし,その例外を 6.2.2.5 及び 6.2.2.6 に規定する。

6.2.2.5

領域 A に対する定義位置をもつ識別子又はラベルがあり,A に囲まれる領域 B に対するそれと同

じつづりの識別子又はラベルの定義位置がある場合,領域 B(B に囲まれるすべての領域を含む。

)は,領

域 A に対するその定義位置の有効範囲から除外する。

6.2.2.6

フィールド表記の

フィールド指定部に相当する領域は,それを囲む有効範囲から除外する。

6.2.2.7

ある領域に対する定義位置をもつ識別子又はラベルがあるとき,それと同じつづりの識別子又は

ラベルの,同じ領域に対する別の定義位置があってはならない。

6.2.2.8

識別子又はラベルの定義位置の有効範囲の中の,それと同じつづりの識別子又はラベルのそれぞ

れの出現を,その定義位置をもつ識別子又はラベルの

引用という。ただし,定義位置での出現(定義とし

ての出現という。)は除く。有効範囲の外側での出現は,引用ではない。

参考  識別子又はラベルの定義位置の有効範囲の中では,その有効範囲を囲む領域に対する定義位置

をもつそれと区別できない識別子又はラベルの引用は,ありえない。

6.2.2.9

識別子又はラベルのプログラムブロックに含ま

..

れるすべての引用は,その識別子又はラベルの定

義位置より前にあってはならない。ただし,書下しポインタ型の

被指示型の型名としての引用のうち,そ

の書下しポインタ型がその型名の定義位置を含む型定義部に含ま

..

れるものを除く。

6.2.2.10

標準の値,標準の型,標準の手続き又は標準の関数を表す標準の識別子には,プログラムを囲む

領域に対する定義位置があるものとして扱う(6.1.3, 6.3, 6.4.1 及び 6.6.4.1 参照)

参考  標準の識別子のうち,input 及び output は,変数を表すものだから対象外となる。

6.2.2.11

識別子又はラベルは,どの引用においても,それが定義位置で表すものを表す。

参考1.  構文の定義において,識別子の引用は,“…名”の形(例えば,“型名”)で記述する。一方,

定義位置に対しては,

“識別子”を用いる。

2.

この形は,その引用が表す実体の性質を提示する。例えば,変数名は変数を表す。

6.2.3

駆動

6.2.3.1

手続き名又は関数名が,あるブロックの

手続き関数宣言部にそのブロックを領域とする定義位置

をもつとき,その手続き名又は関数名はそのブロックに

局所的であるという。

6.2.3.2

ブロックの駆動は,次のものを包含する。

(a)

そのブロックの

実行部に対するアルゴリズム。そのアルゴリズムが完了したとき,駆動も終了する

6.8.2.4 参照)

(b)

そのブロックの

ラベル宣言部の中の

...

各ラベルの定義位置に対して,対応するプログラム内位置(6.2.1

参照)

(c)

そのブロックを領域とする定義位置をもつ各変数名に対して,その変数名に結合した型をもつ変数。

(d)

そのブロックに局所的な各手続き名に対して,その手続き名に結合した手続きブロック及びその手続

きブロックの仮引数をもつ手続き。

(e)

そのブロックに局所的な各関数名に対して,その関数名に結合した関数ブロック,その関数名に結合

した結果の型及びその関数ブロックの仮引数をもつ関数。

(f)

そのブロックが関数ブロックであるときは,その関数ブロックに結合した結果の型をもつ結果。


9

X 3008-1994 (ISO/IEC 7185: 1990)

参考  各駆動の包含する,アルゴリズム,プログラム内位置,変数,手続き及び関数は,他の駆動の

包含するものと異なる。

6.2.3.3

手続き又は関数の駆動とは,その手続きの手続きブロック又はその関数の関数ブロックの

ブロッ

クの駆動のことをいう。手続き又は関数の駆動は,次の駆動の

内部にあるという。

(a)

その手続き又は関数を包含する駆動。

(b)  (a)

の駆動を内部とするすべての駆動。

参考  ブロック B の駆動は,B を含むブロックの駆動の内部だけにありうる。したがって,B の駆動

が,B の別の駆動の内部にあることはない。

ブロックの駆動の内部にあっては,ラベル,変数名又はそのブロックに局所的な手続き名若しくは関数

名の引用は,その駆動での対応するプログラム内位置,変数,手続き又は関数をそれぞれ表す。ただし,

関数名が表す関数の駆動の内部において,代入文の中の

...

その関数名は,その駆動の結果を表す。

6.2.3.4

駆動の包含するアルゴリズムに含まれる手続き呼出し文又は関数呼出しで,ブロックの駆動を指

定するものを,そのブロックの駆動の

駆動位置という。

6.2.3.5

駆動が包含するすべての変数(プログラム引数並びに含まれるものを除く。

)及び駆動の結果は,

その駆動が開始された時点で全面的不定とする。アルゴリズム,プログラム内位置,変数,手続き及び関

数は(もしあれば)

,その駆動が終了するまで存在する。

6.3

定数定義  定数定義は,値を表す識別子を導入する。

定数定義  =  識別子  ‘=’  定数  .

定数  =  [  符号  ]  (  符号なし数  |  定数名  )

|

  文字列  .

定数名  =  識別子  .

ブロックの

定数定義部の

定数定義の中の

...

識別子の出現は,その識別子の定義位置となる。この定義位置

の領域は,そのブロックとする。定数定義の

定数は,その定数定義の

識別子の引用を含んではならない。

その識別子のそれぞれの引用は,定数名とする。それぞれの引用は,定数定義の

定数が表す値を表す。符

号を含む

..

定数の中の

...

定数名は,実数型又は整数型の値を表さなければならない。標準の定数名は,6.4.2.2

及び 6.7.2.2 に規定する。

6.4

型定義

6.4.1

一般規則  型定義は,型を表す識別子を導入する。型は,すべての値及び変数がもつ属性とする。

かきくだ

書下し型のそれぞれの出現は,他のどの書下し型の出現とも異なる型を表す。

型定義  =  識別子  ‘=’  型表記  .

型表記  =  型名  |  書下し型  .

書下し型  =  書下し順序型  |  書下し構造型  |  書下しポインタ型  .

ブロックの

型定義部の

型定義の中の

...

識別子の出現は,その識別子の定義位置となる。この定義位置の領

域は,そのブロックとする。その識別子のそれぞれの引用は,型名とする。それぞれの引用は,型定義の

型表記が表す型を表す。型定義の

型表記は,その型定義の

識別子の引用を含んではならない。ただし,書

下しポインタ型の

被指示型の型名としての引用を除く。

型は,単純型,構造型及びポインタ型とする。標準の型名及びそれに対応する標準の型は,6.4.2.2 及び

6.4.3.5

に規定する。

単純型名  =  型名  .

構造型名  =  型名  .


10

X 3008-1994 (ISO/IEC 7185: 1990)

ポインタ型名  =  型名  .

型名  =  識別子  .

型名は,それの表す型に応じて,単純型名,構造型名又はポインタ型名という。

6.4.2

単純型

6.4.2.1

一般規則  単純型は,値の順序集合を定める。順序型の値は,整数の順序数をもつ。順序型の二

つの値の順序関係は,それらの順序数の順序関係と同じとする。順序型名は,順序型を表す型名でなけれ

ばならない。実数型名は,実数型を表す型名でなければならない。

単純型  =  順序型  |  実数型名  .

順序型  =  書下し順序型  |  順序型名  .

書下し順序型  =  列挙型  |  部分範囲型  .

順序型名  =  型名  .

実数型名  =  型名  .

6.4.2.2

標準の単純型  標準の単純型は,次のとおりとする。

(a)

整数型  標準の型名 integer は,整数型を表す。整数型は,順序型とする。その値の集合は,整数の部

分集合とする(6.7.2.2 参照)

。整数型の値は,6.1.5 に規定する符号付き整数で表す。整数型の値の順

序数は,その値そのものとする。

(b)

実数型  標準の型名 real は,実数型を表す。実数型は,単純型とする。その値の集合は,実数の処理

系定義の部分集合とする。実数型の値は,6.1.5 に規定する符号付き実数で表す。

(c)

論理型  標準の型名 Boolean は,論理型を表す。論理型は,順序型とする。その値の集合は,標準の

定数名 false 及び true が表す真理値の列挙とする。ここで,false は true に先行する。false 及び true が

表す真理値の順序数は,それぞれ整数値 0 及び 1 とする。

(d)

文字型  標準の型名 char は,文字型を表す。文字型は,順序型とする。その値の集合は,処理系定義

の文字の集合の列挙とする。その中には図形表現のないものがあってもよい。文字値の順序数は,文

字値を 0 から始まる連続した非負整数値に移す処理系定義の写像によって定まる整数型の値とする。

この写像に関して,次の(1)(3)の条件が成立する。

(1) 

数字の 0∼9 を表現する文字値は,数の順に順序づけられ,連続している。

(2) 

大文字の A∼Z を表現する文字値(使用できるとき)は,アルファベット順に順序づけられるが,

連続しているとは限らない。

(3) 

小文字の a∼z を表現する文字値(使用できるとき)は,アルファベット順に順序づけられるが,連

続しているとは限らない。

参考  標準の単純型に適用できる演算子は,6.7.2 に規定する。

6.4.2.3

列挙型

列挙型  =  ‘(  ’  識別子並び  ‘  )

’  .

識別子並び  =  識別子  {  ‘,

’  識別子  }  .

列挙型の

識別子並びの中の

...

識別子の出現は,その識別子の定義位置となる。この定義位置の領域は,そ

の列挙型を直接に含む

.....

ブロックとする。その識別子のそれぞれの引用は,定数名とする。ブロックの駆動

の内部では,その識別子の引用は,すべてその列挙型が表す型をもち,その型の値のうちで,その識別子

並びの中の

...

その識別子の前に並んだ識別子の個数に等しい順序数をもつ値を表す。

参考  列挙型の定数は,その定義を与えた列に従って順序付けられる。その順序数は,0 から順番に

与えられる。


11

X 3008-1994 (ISO/IEC 7185: 1990)

例  (red, yellow, green, blue, tartan)   

(club, diamond, heart, spade)

(married, divorced, widowed, single)

(scanning, found, notpresent)

(Busy, InterruptEnable, ParityError, OutOfPaper, LineBreak)

6.4.2.4

部分範囲型  部分範囲型は,部分範囲の最小値及び最大値を指定する。部分範囲型の

最初の定数

は最小値を示し,部分範囲型の

2

番目の定数は最大値を示す。最小値は,最大値よりも小さいか,又は等

しくなければならない。二つの定数の型は,同じ順序型でなければならない。この順序型を,部分範囲型

親の型という。

部分範囲型  =  定数  ‘..’  定数  .

例 1..100

-10..+10

red..green

’0’..’9’

6.4.3

構造型

6.4.3.1

一般規則  書下し構造型は,その書下し構造型の

詰めなし構造型に応じて,配列型,レコード型,

集合型及びファイル型に分類する。構造の値の成分は,値とする。

構造型  =  書下し構造型  |  構造型名  .

書下し構造型  =  [  ‘packed’  ]  詰めなし構造型  .

詰めなし構造型  =  配列型  |  レコード型  |  集合型  |  ファイル型  .

書下し構造型が字句 packed を直接に含む

.....

場合,その型を

詰めありという。構造型に対する詰めありの指

定は,たとえその型の変数に対する演算又はその成分へのアクセスが記憶量又は実行時間の上で非能率に

なるとしても,値のデータ記憶域を節約するよう処理系に指示する。

構造型に対する詰めありの指定は,その構造型のデータ記憶域での表現だけに影響する。すなわち,成

分の型も構造型である場合,その成分のデータ記憶域が節約されるのは,その成分の型自身に詰めありの

指定があるときに限る。

参考  6.4.3.2, 6.4.5, 6.6.3.3, 6.6.3.8, 6.6.5.4 及び 6.7.1 に示す場合には,型が詰めありか否かによってそ

の型をもつ実体の扱いに違いが生じる。

6.4.3.2

配列型  配列型は,

そえ

がた

型の示す値から個々の成分への写像としての構造をもつ。それぞれの成

分は,配列型の成分型の型表記が表す型をもつ。

配列型  =  ‘array’  ‘[’  添字型  {  ‘,’  添字型  }  ‘]’  ‘of’  成分型  .

添字型  =  順序型  .

成分型  =  型表記  .

1.  array [1..100] of rea1

array [Boolean] of colour

二つ以上の添字型の列を指定する配列型は,次の配列型の省略形とする。

・  もとの指定の最初の添字型を添字型とする。

・  もとの指定の 2 番目以降の添字型の列をもち,もとの指定と同じ成分型をもつ配列型を成分型と

する。この配列型は,もとの指定が詰めありのとき,かつそのときに限り,詰めありとする。

省略形と完全形とは,等価とする。


12

X 3008-1994 (ISO/IEC 7185: 1990)

参考1.  次の二つの例は,それぞれ同じ配列型の異なる表現法を示す。

2.  array [Boolean] of array [1..10] of array [size] of real

array [Boolean] of array [1..10, size] of real

array [Boolean, 1..10, size] of real

array [Boolean, 1..10] of array [size] of real

3.  packed array [1..10, 1..8] of Boolean

packed array [1..10] of packed array [1..8] of Boolean

添字型の値を i,配列型の構造によって に対応する配列型の成分の値を Vi

添字型の最小値を m,最

大値を とし,更に添字型の値の個数 (ord(n) -ord (m) +1)を とするとき,配列型の値は,次の形の 個の

値の組とする。

(V

m

, ...,V

n

)

参考2.  したがって,すべての成分の値が定義されない限り,配列型の値は存在しない。成分型が c

個の値をもつならば,配列型の値の集合の濃度は,の 乗となる。

最小値が 1 で最大値が 1 より大きい部分範囲型を添字型が表し,成分型が文字型を表す詰めありの配列

型の表す型を,

文字列型という。

文字列と文字列型の値との対応は,文字列の

文字列要素を文面上の順にとったものと,文字列型の値の

成分を添字の上昇順にとったものを結び付けることによる。

参考3.  文字列型は,その値をテキストファイルへ書き出すことができ(6.9.3.6参照),関係演算子を

使用できる(6.7.2.5参照)という点で,普通の配列型と違う。

6.4.3.3

レコード型  レコード型の構造及び値は,そのレコード型の

フィールド並びの構造及び値とする。

レコード型  =  ‘record’  フィールド並び  ‘end’  .

フィールド並び  =  [ (  固定部  [  ‘;’  可変部  ]  |  可変部  )  [  ‘;’  ]  ]  .

固定部  =  レコード要素  {  ‘;’  レコード要素  }  .

レコード要素  =  識別子並び  ‘:’  型表記  .

フィールド名  =  識別子  .

可変部  =  ‘case’  可変要素選択子  ‘of’  可変要素  {  ‘;’  可変要素  }  .

可変要素選択子  =  [  タグフィールド  ‘:’  ]  タグ型  .

タグフィールド  =  識別子  .

可変要素  =  選択定数並び  ‘:’  ‘(’  フィールド並び  ‘)’  .

タグ型  =  順序型名  .

選択定数並び  =  選択定数  {  ‘,’  選択定数  }  .

選択定数  =  定数  .

固定部も可変部も含ま

..

ないフィールド並びは,成分をもたず,値として空値ただ 1 種類をもつ。このフ

ィールド並びを

空であるという。

フィールド並びの

固定部の

レコード要素の識別子並びの中の

...

識別子の出現は,その識別子のフィールド

名としての定義位置となる。

この定義位置の領域は,

そのフィールド並びを直接に含む

.....

レコード型とする。

このとき,そのフィールド名は,レコード型の個々の成分(それは,同時にそのフィールド並びの成分で

もある。

)と結合する。この成分を

フィールドという。その成分は,レコード要素の

型表記が表す型をもつ。

可変部を直接に含む

.....

フィールド並びは,この可変部に対応する一つの成分をもつ。この成分の値及び構

造は,その可変部によって定まる。


13

X 3008-1994 (ISO/IEC 7185: 1990)

m

個の成分をもつ空でないフィールド並びの値は,次の形の 個の値の組とする。

(V

1

,V

2

,...,V

m

)

ここで,V

i

はそのフィールド並びの 番目の成分の値とする。

参考1.  番目の成分の型が F

i

個の値をもつならば,フィールド並びの値の集合の濃度は,  (F

1

×F

2

×...×F

m

)

となる。

タグ型は,タグ型の

順序型名が表す型とする。選択定数は,選択定数の

定数が表す値を表す。

可変部の

可変要素の

選択定数並びの中の

...

各選択定数の型は,その可変部の

可変要素選択子の

タグ型の表

す型と適合しなければならない。タグ型を直接に含む

.....

可変部に直接に含ま

.....

れる選択定数が表す値は,すべ

て異なっていなければならない。更に,その値全体から成る集合は,そのタグ型の値の集合と等しくなけ

ればならない。可変要素の

選択定数並びの

各選択定数が表す値は,その可変要素に対応しているという。

各可変部は,

選択子型と呼ぶ型をもち,それと結合する。可変部の

可変要素選択子がタグフィールドを

含む

..

とき,又は可変部の

各可変要素の

選択定数並びがただ一つの選択定数を含む

..

とき,選択子型は,タグ

型の表す型とする。これらの場合,可変部の

各可変要素は,その可変要素の

選択定数並びの

選択定数が表

す選択子型の値と結合する。それ以外の場合,可変部の選択子型は,新しい順序型とする。この型は,可

変部の

各可変要素に対して値をちょうど一つずつもち,

しかもそれ以外の値をもたない。

各可変要素には,

その型の値が一つずつ結合する。

各可変部は,

選択子と呼ぶ成分をもつ。この成分の型は,その可変部の選択子型とする。可変部の

可変

要素選択子がタグフィールドを含む

..

とき,タグフィールドの中の

...

識別子の出現は,その識別子のフィール

ド名としての定義位置となる。この定義位置の領域は,その可変部を直接に含む

.....

レコード型とする。この

とき,そのフィールド名は,その可変部の選択子と結合する。選択子は,フィールド名と結合するとき,

かつそのときに限り,そのレコード型のフィールドという。

可変部の

各可変要素は,可変部の個々の成分を表す。その成分は,その可変要素の

フィールド並びの値

及び構造をもつ。その成分は,同時に可変部の選択子型の,その可変要素に結合した値と結合する。可変

部の

可変要素及び成分は,それらに結合した値をその可変部の選択子がもっときに限り,

有効であるとい

う。

可変部の値は,次の形の対とする。

κ

,X

k

ここで,は可変部の選択子の値とし,X

k

は可変部の有効な可変要素のフィールド並びの値とする。

参考2.  選択子型の値が 個あり,番目の値に結合した可変要素の

フィールド並びが T

i

個の値をも

つならば,可変部の値の集合の濃度は,  (T

1

+T

2

+...+T

n

)

となる。可変部の値には,有効でな

い可変要素に対応する成分はない。

3.

レコード変数の可変部に含まれるフィールドの使い方に,6.5.3.3, 6.6.3.3 及び 6.6.5.3 に示す制

限を置く。

  record

  year : 0..2000 ;

  month : 1..12 ;

  day : 1..31

 end

 record


14

X 3008-1994 (ISO/IEC 7185: 1990)

  name, firstname : string ;

  age : 0..99 ;

case married : Boolean of

  true : (Spousesname : string) ;

  false : ( )

 end

 record

  x, y : real ;

  area : real ;

  case shape of

triang

:

(side : real; inclination, angle1, angle2 : angle) ;

rectangle:

(side1, side2 : real; skew : angle) ;

circle

:

(diameter : real) ;

 end

6.4.3.4

集合型  集合型の値全体は,集合型の

基底型のべき集合としての構造をもつ。すなわち,集合型

のそれぞれの値は,基底型の値を

げん

元とする集合とする。

集合型  =  ‘set’  ‘of’  基底型  .

基底型  =  順序型  .

参考1.  集合型の値に適用できる演算子は,6.7.2.4に規定する。

例  set of char 

set of (club, diamond, heart, spade)

参考2.  集合型の

基底型が 個の値をもつならば,その集合型の値の集合の濃度は,2の 乗となる。

部分範囲型でない各順序型 T に対して,

詰めなし正規 集合型と呼ぶ詰めなしの集合型及び詰めあり正

規 集合型と呼ぶ詰めありの集合型を設ける。S が T を親の型とする部分範囲型であれば,set of S 型で定

まる値の集合は,詰めなし正規 T 集合型及び詰めあり正規 T 集合型で定まる値の集合(6.7.1 参照)の部分

集合とする。

6.4.3.5

ファイル型

ファイル型  =  ‘file’  ‘of’  成分型  .

参考1.  ファイル型は,指定された成分型の値の列を,列中の現在位置及び検査中か生成中かを示す

モードとともに表現する。

次の型を表す型表記は,ファイル型の

成分型としてはならない。

・  ファイル型

・  成分の型表記の中に,ファイル型の成分型としてはならないものを含む構造型

例  file of real

file of vector

ファイル型は,

列型と呼ぶ型を暗黙に定める。この型は,次の(a)(e)の条件を満たす列と呼ぶ値だけを


15

X 3008-1994 (ISO/IEC 7185: 1990)

もつ。

参考2.  記法 x∼y は,列 x と列 y の連結を表す。列の記法(例えば,S(c)),列の連結及び選択子の

記法  (∼,first, last, rest)  並びに列に関する等号 (=) は,Pascal 言語の範囲外とする。これら

の記法は,ここでファイルの値を定義するのと,6.6.5.2及び6.6.6.5で標準のファイル操作を規

定するのに用いる。

(a) S()

は,列型 S の値とする。これを

空列という。空列は,成分をもたない。

(b)  c

を指定された成分型の値とし,x を列型 S の値とする。このとき,S(c)は,成分値 c だけから成る型

S

の列とする。S(c)∼x 及び x∼S(c)は,S()とは異なる型 S の列とする。

(c) c, S

及び x を(b)と同じとする。y は列 S(c)∼x を表し,z は列 x∼S(c)を表すとする。このとき,記法

y. first

は c(すなわち y の先頭の成分値)を表し,y. rest は x(すなわち y から先頭の成分を除いて得

られる列)を表し,z. last は c(すなわち z の最後の成分値)を表す。

(d)  x

及び y をそれぞれ型 S の列とする。x も y も空列でない場合,x=y は, (x. first=y. first)  及び (x. rest=y.

rest)

の両方が真のとき,かつそのときに限り,真とする。x 又は y が空列の場合,x=y は,x と y の

両方が空列のとき,かつそのときに限り,真とする。

(e) x,

y

及び z を型 S の列とする。このとき,x∼ (y∼z) = (x∼y)  ∼z, S()∼x=x 及び x∼S()=x は,

真とする。

また,ファイル型は,

モード型と呼ぶ型も暗黙に定める。モード型は,Inspection(検査)及び Generation

(生成)と呼ぶ二つの値だけをもつ。

参考3. Inspection 及び Generation という値の表し方は,Pascal 言語の範囲外とする。

ファイル型は,三つの成分から成る構造をもつ。f. L 及び f. R と呼ぶ二つの成分の型は,暗黙の列型と

する。f. M と呼ぶ第 3 の成分の型は,暗黙のモード型とする。

ファイル型のそれぞれの値は,次の形の 3 個の値の組とする。

(f. L, f. R, f. M)

ここで,f. L 及び f. R は列型の値とし,f. M はモード型の値とする。ただし,f. M が Generation のとき,

f. R

は空列に限る。ファイル型の値 f は,f. L∼f. R が空列のとき,かつそのときに限り,

空であるという。

参考4.  ファイル型の値の二つの成分 f. L 及び f. R は,一つの列 f. L∼f. R 及びその列の中の現在位置

を表すと考えてよい。f. R が空列でないとき,f. R. first は,現在位置にある成分(現在成分)

と考えてよい。f. R が空列のとき,

現在位置はファイルの終わりにある。

標準の構造型名 text は,ファイル型を表す。text が表す型に対しては,通常の列型及びモード型のほか

に,

行と呼ぶ値をもつ列型を定める。行は,列 cs∼S (end-of-line) とする。ここで,cs は文字型をもつ成

分の列とし,end-of-line は特別な成分値とする。この値 end-of-line を行末成分と呼ぶ。列の成分以外の変

数に値 end-of-line を与えたときに成立すると 6.で規定する表明は,文字型の値空白をその変数に与えたと

きの表明と同じとする。l を行とするとき,l. last 以外の l の成分は,行末成分でない。文字型の値の集合

の処理系定義の部分集合を設け,これを

テキストファイル禁止文字と呼ぶ。この部分集合に含まれる文字

を t. L 又は t. R の成分に与えたときの効果は,処理系依存とする。

行の列 ls は,空列であるか,又は列 l∼ls'であるかのいずれかとする。ここで,l は行,ls'は行の列とす

る。

text

が表す型の値 t は,次の(a)(b)の条件を満たす。

(a) t.

M=Inspection

であれば,t. L∼t. R は行の列である。

(b) t.

M=Generation

であれば,t. L∼t. R は ls∼cs である。ここで,ls は行の列,cs は文字型をもつ成分の


16

X 3008-1994 (ISO/IEC 7185: 1990)

列とする。

参考5.  (b)で,cs は,生成されつつある部分行であると考えてもよい(特に,cs が空列でないとき)。

部分行は,ファイルの検査の際には生じない。t. M=Generation のとき,t. R は空列なので,

cs

が t.R に対応しているわけではない。

標準の型名 text が表す型をもつ変数を,

テキストファイルという。

参考6.  file of char 型の変数に適用できるすべての標準手続き及び標準関数は,テキストファイルに

も適用できる。テキストファイルだけに適用できる標準手続き及び標準関数は,6.6.6.5及び

6.9

に規定する。

6.4.4

ポインタ型  ポインタ型の値は,nil 値又は指示値とする。各指示値は,書下しポインタ型の

被指

示型の表す型をもつ変数を指示する。プログラムの実行中に,変数及びその変数を指示する値の作成及び

消去が許容されていなければならないという意味で,指示値の集合は,動的であるという。指示値及びそ

れが指示する変数は,標準手続き new(6.6.5.3 参照)だけによって作成できる。

参考1. nil 値は,指示値ではないので,変数を指示しない。

予約語 nil は,すべてのポインタ型の nil 値を表す。

ポインタ型  =  書下しポインタ型  |  ポインタ型名  .

書下しポインタ型  =  ‘↑’  被指示型  .

被指示型  =  型名  .

参考2.  予約語 nil は,特定の型をもたない。代入可能性の規則又は演算子に関する適合性の規則を

満たす適当なポインタ型(もしあれば)をもつとみなす。

6.4.5

型の適合性  次の(a)(d)の条件のうちのいずれかが成立するときに,型 T1 と T2 は,適合すると

いう。

(a) T1

と T2 が同じ型である。

(b) T1

が T2 の部分範囲であるか,T2 が T1 の部分範囲であるか,又は T1 と T2 の両方が同じ親の型の部

分範囲である。

(c) T1

と T2 が基底型の適合する集合型であって,両方とも詰めありか,又は両方とも詰めなしである。

(d) T1

と T2 が同じ個数の成分をもつ文字列型である。

6.4.6

代入可能性  次の(a)(e)の条件のうちのいずれかが成立するときに,型 T2 の値は,型 T1 に対し

代入可能であるという。

(a) T1

と T2 が同じ型で,その型をファイル型の

成分型とすることができる(6.4.3.5 参照)

(b) T1

が実数型で,T2 が整数型である。

(c) T1

と T2 が適合する順序型で,型 T2 の値が,型 T1 の定める閉区間内にある。

(d) T1

と T2 が適合する集合型で,型 T2 の値のすべての元が,型 T1 の基底型の定める閉区間内にある。

(e) T1

と T2 が適合する文字列型である。

代入可能性の規則を適用する箇所では,次の(a)(b)の規定を適用する。

(a) T1

と T2 が適合する順序型で,型 T2 の値が型 T1 の定める閉区間内になければ,誤りとする。

(b) T1

と T2 が適合する集合型で,型 T2 の値のいずれかの元が型 T1 の基底型の定める閉区間内になけれ

ば,誤りとする。

代入可能性の規則によって整数型の値が実数型に代入可能とならなければならない箇所では,整数から

実数への暗黙の型変換を行う。

6.4.7

型定義部の例


17

X 3008-1994 (ISO/IEC 7185: 1990)

type

  natural = 0..maxint ;

  count = integer ;

  range = integer ;

  colour = (red, yellow, green, blue) ;

  sex = (male, female) ;

  year = 1900..1999 ;

  shape = (triangle, rectangle, circle) ;

  punchedcard = array [1..80] of char ;

  charsequence = file of char ;

  polar = record

  r : real ;

  theta : real

end

;

  indextype = 1..limit ;

  vector = array [indextype] of real ;

 person

=

↑persondetails ;

  persondetails = record

name, firstname : charsequence ;

age : integer ;

married : Boolean ;

father, child, sibling : person ;

case s : sex of

 ma

:

(enlisted, bearded : Boolean) ;

 fema

:

(mother, programmer : Boolean)

 end;

  FileOfInteger = file of integer ;

参考  上の例で,count, range 及び integer は,同じ型を表す。year が表す型及び natural が表す型は,

range, count

及び integer が表す型と適合してはいるが,別の型である。

6.5

変数の宣言及び表し方

6.5.1

変数宣言  変数は,そこへ値を与えることのできる実体とする(6.8.2.2 参照)。変数宣言の

識別子

並びの中の

...

各識別子は,それぞれ違った変数を表す。これらの変数は,変数宣言の

型表記が表す型をもつ。

変数宣言  =  識別子並び  ‘:’  型表記  .

ブロックの

変数宣言部の

変数宣言の

識別子並びの中の

...

識別子の出現は,その識別子の変数名としての定

義位置となる。この定義位置の領域は,そのブロックとする。構造型をもつ変数の構造は,その構造型の

構造とする。変数アクセスの使用を,それが表す変数へのその時点における

アクセスという。変数アクセ

スは,純変数,成分変数,被指示変数又はバッファ変数のいずれであるかによって,それぞれ宣言された

変数,変数の成分,指示値が指示する(6.4.4 参照)変数又はバッファ変数を表す。


18

X 3008-1994 (ISO/IEC 7185: 1990)

変数アクセス  =  純変数  |  成分変数  |  被指示変数  |  バッファ変数  .

例  変数宣言部の例

var

x, y, z, max : real ;

i, j : integer ;

k : 0..9 ;

p, q, r : Boolean ;

operator : (plus, minus, times) ;

a : array [0..63] of real ;

c : colour ;

f : file of char ;

hue1, hue2 : set of colour ;

p1, p2 : person ;

m, m1, m2 : array [1..10, 1..10] of real ;

coord : polar ;

pooltape : array [1..4] of FileOfInteger ;

date : record

month : 1..12 ;

year : integer

end

;

参考  以下の例で用いる変数は,上の例のとおり宣言してあるものとする。

6.5.2

純変数

純変数  =  変数名  .

変数名  =  識別子  .

6.5.3

成分変数

6.5.3.1

一般規則  変数の成分は,変数とする。成分変数は,変数の成分を表す。変数の成分へのアクセ

スは,同時にその変数へのアクセスとする。変数の成分が参照中のとき,その変数も参照中とする。変数

の成分の値(もしあれば)は,その変数の値(もしあれば)の同じ成分とする。

成分変数  =  添字付き変数  |  フィールド表記  .

6.5.3.2

添字付き変数  添字付き変数は,配列型の変数の成分を表す。

添字付き変数  =  配列変数  ‘[’  添字式  {  ‘,’  添字式  }  ‘]’  .

配列変数  =  変数アクセス  .

添字式  =  式  .

配列変数は,配列型の変数を表す変数アクセスでなければならない。添字式を一つだけ直接に含む

.....

添字

付き変数の場合,その添字式の値は,配列型の添字型に対して代入可能でなければならない。添字付き変

数は,配列変数がもつ型の写像によって,添字式の値と対応する成分を表す(6.4.3.2 参照)

1. a

[12]

a [i+j]

m [k]

配列変数がまた添字付き変数である場合,省略形が許容されていなければならない。省略形は,完全形


19

X 3008-1994 (ISO/IEC 7185: 1990)

の“] [”をコンマで置き換えた形とする。省略形と完全形とは,等価とする。

添字付き変数の中の

...

,添字式の評価及び配列変数のアクセスの順序は,処理系依存とする。

2.  m [k] [l]

m [k, l]

参考  この二つの例は,同じ成分変数を表す。

6.5.3.3

フィールド表記  フィールド表記は,次のいずれかの変数を表す。

・  フィールド表記の

レコード変数が表す変数の成分で,フィールド表記の

フィールド指定部の

フィ

ールド名に結合したもの(6.4.3.3 参照)

・  フィールド表記の

フィールド表記名(6.8.3.10 参照)が表す変数。

レコード変数は,レコード型の変数を表す変数アクセスでなければならない。

フィールド表記の中の

...

レコード変数の出現は,そのレコード変数のもつレコード型の成分に結合したす

べてのフィールド名の定義位置となる。この定義位置の領域は,そのフィールド表記の

フィールド指定部

とする。

フィールド表記  =  レコード変数  ‘.’  フィールド指定部

|

  フィールド表記名  .

レコード変数  =  変数アクセス  .

フィールド指定部  =  フィールド名  .

例 p2↑.mother

coord. theta

可変部の選択子がフィールドでない場合,その可変部の可変要素の成分へのアクセスは,その可変要素

に結合した選択子型の値(6.4.3.3 参照)を選択子に与える。可変要素の成分が参照中又はアクセス中のと

きに,その可変要素が有効でなくなれば,誤りとする。

可変要素が有効でなくなったとき,そのすべての成分は,全面的不定とする。

参考  可変部の選択子が不定であれば,可変部のどの可変要素も有効ではない。

6.5.4

被指示変数  被指示変数は,被指示変数の

ポインタ変数の値が指示する変数(もしあれば)を表す

6.4.4 及び 6.6.5.3 参照)

被指示変数  =  ポインタ変数  ‘↑’  .

ポインタ変数  =  変数アクセス  .

標準手続き new(6.6.5.3 参照)によって作成した変数は,プログラムブロックの駆動が終了するか,又

はその変数を指示する指示値が消去される(標準手続き dispose, 6.6.5.3 参照)まで,アクセスできる。

参考  変数がアクセスできるかどうかは,その指示値を与えられたポインタ変数が存在するかどうか

にも依存する。

ポインタ変数は,ポインタ型の変数を表す変数アクセスでなければならない。被指示変数の

ポインタ変

数が不定であるか又は nil 値を表すならば,誤りとする。被指示変数が参照中であるとき,その被指示変

数を指示する値をそのポインタ型の値の集合から消去(6.6.5.3 参照)すれば,誤りとする。

例 p1↑

p1

↑.father↑

p1

↑.sibling↑.father↑


20

X 3008-1994 (ISO/IEC 7185: 1990)

6.5.5

バッファ変数  ファイル変数は,ファイル型の変数を表す変数アクセスでなければならない。バッ

ファ変数は,バッファ変数の

ファイル変数が表す変数に結合した変数を表す。テキストファイルに結合し

たバッファ変数の型は,文字型とする。それ以外のバッファ変数の型は,バッファ変数の

ファイル変数の

もつファイル型の成分型とする。

バッファ変数  =  ファイル変数  ‘↑’  .

ファイル変数  =  変数アクセス  .

例 input↑

pooltape [2]

バッファ変数 f↑が参照中であるとき,ファイル変数 f の値を変更すれば,誤りとする。バッファ変数へ

のアクセスは,結合したファイル変数へのアクセスともする。バッファ変数が参照中のとき,結合したフ

ァイル変数も参照中とする。

6.6

手続き宣言・関数宣言

6.6.1

手続き宣言

手続き宣言  =  手続き頭部  ‘;’  指令

|

  手続き標示  ‘;’  手続きブロック

|

  手続き頭部  ‘;’  手続きブロック  .

手続き頭部  =  ‘procedure’  識別子  [  仮引数並び  ]  .

手続き標示  =  ‘procedure’  手続き名  .

手続き名  =  識別子  .

手続きブロック  =  ブロック  .

手続き宣言の

手続き頭部の中に

...

仮引数並びがあれば,それに応じて,その手続き頭部の識別子に結合し

た手続きブロック(もしあれば)の

かり

ひき

すう

数が定まる。

手続き宣言の

手続き頭部の中の

...

識別子の出現は,その識別子の手続き名としての定義位置となる。この

定義位置の領域は,その手続き宣言を直接に含む

.....

ブロックとする。

その中に

..

指令 forward がある手続き宣言の

手続き頭部の中に

...

,手続き名としての定義位置をもつ識別子

には,手続き宣言の

手続き標示の中の

...

手続き名としての引用がちょうど 1 回だけなければならない。しか

も,その手続き頭部を直接に含む

.....

手続き関数宣言部が,その手続き標示を直接に含ま

.....

なければならない。

手続き宣言の

手続きブロック(もしあれば)は,その手続き宣言の

手続き頭部の中の

...

識別子又はその手

続き宣言の

手続き標示の中の

...

手続き名のいずれかと結合する。

一つの手続き名に結合する手続きブロックは,1 個以下でなければならない。

1.  手続き関数宣言部の例 

参考  この例は,水準 0 ではない。

procedure AddVectors (var A, B, C : array [low..high : natural] of real) ;

 var

i : natural ;

begin

for i : = low to high do A [i] : = B [i] + C [i]

end { AddVectors } ;

2.  手続き関数宣言部の例

procedure readinteger (var f : text; var x : integer) ;


21

X 3008-1994 (ISO/IEC 7185: 1990)

 var

i : natural ;

begin

 while

f

↑  = ’ ’ do get (f) ;

 {

バッファ変数の値は,空白以外の最初の文字である。 }

i : = 0 ;

 while

f

↑  in [’0’..’9’] do begin

i : = (10 * i) + (ord(f

↑) - ord (’0’) ) ;

 get

(f)

 end;

 {

バッファ変数の値は,数字以外の文字である。 }

x : = i

 {

もちろん,数字がなければ,は 0 である。 }

end ;

procedure bisect (function f

x : real) : real ;

a, b : real ;

var result : real) ;

{

この手続きは,二分法によって区間(a, b)の中の f (x)  の零点を求め,最後の引数にその

近似値を返す。この手続きが呼ばれたとき,a, b の値は,不変条件 P を満たすと仮定する。

P = (f (a) < 0) and (f (b) = 0) }

 const

eps = 1e-10 ;

 var

midpoint : real ;

begin

 {

呼出し時の仮定から不変条件 P が成立する。 }

midpoint : = a ;

while abs (a - b) > eps * abs (a) do begin

midpoint : = (a+b) /2 ;

if f (midpoint) < 0 then a : = midpoint

else b : = midpoint

{

これによって不変条件 P が再び成立する。

midpoint

の値が a, b のどちらとも違えば,区間 (a, b) は縮小する。 }

 end

;

 {

ループ脱出条件と P によって,十分小さな区間に零点が含まれている

ことが保証される。零点として midpoint を返す。 }

result : = midpoint

end ;

procedure PrepareForAppending (var f : FileOfInteger) ;

{

この手続きは,reset が適用できる任意の状態のファイルを,その最後にデー


22

X 3008-1994 (ISO/IEC 7185: 1990)

タが追加できるような状態に変える。これより簡単にするためには,ファイル

の初期状態について何らかの仮定をすることが必要である。 }

 var

LocalCopy : FileOfInteger ;

procedure CopyFiles (var from, into : FileOfInteger) ;

 begin

reset (from) ; rewrite (into) ;

while not eof (from) do begin

 into

↑: =from↑;

put (into) ; get (from)

 end

end { CopyFiles } ;

begin { PrepareForAppending }

CopyFiles (f, LocalCopy) ;

 CopyFiles

(LocalCopy,

f)

end { PrepareForAppending } ;

6.6.2

関数宣言

関数宣言  =  関数頭部  ‘;’  指令

|

  関数標示  ‘;’  関数ブロック

|

  関数頭部  ‘;’  関数ブロック  .

関数頭部  =  ‘function’  識別子  [  仮引数並び  ]  ‘: ]  結果型  .

関数標示  =  ‘function’  関数名  .

関数名  =  識別子  .

結果型  =  単純型名  |  ポインタ型名  .

関数ブロック  =  ブロック  .

関数宣言の

関数頭部の中に

...

仮引数並びがあれば,それに応じて,その関数頭部の

識別子に結合した関数

ブロック(もしあれば)の仮引数が定まる。関数ブロックは,代入文の

関数名がそのブロックと結合する

代入文を少なくとも一つ含ま

..

なければならない(6.8.2.2 参照)

関数宣言の

関数頭部の中の

...

識別子の出現は,結果型が表す結果の型に結合した関数名としての,その識

別子の定義位置となる。この定義位置の領域は,その関数宣言を直接に含む

.....

ブロックとする。

その中に

..

指令 forward がある関数宣言の

関数頭部の中に

...

,関数名としての定義位置をもつ識別子には,

関数宣言の

関数標示の中の

...

関数名としての引用がちょうど 1 回だけなければならない。しかも,その関数

頭部を直接に含む

.....

手続き関数宣言部が,その関数標示を直接に含ま

.....

なければならない。

関数宣言の

関数ブロック(もしあれば)は,その関数宣言の

関数頭部の中の

...

識別子又はその関数宣言の

関数標示の中の

...

関数名のいずれかと結合する。同時に,関数ブロックの

ブロックは,識別子又は関数名の

いずれかに結合した結果の型と結合する。

一つの関数名に結合する関数ブロックは,1 個以下でなければならない。

例  手続き関数宣言部の例

function Sqrt (x : real) : real ;

{

この関数は,Newton 法により x (x > 0)  の平方根を計算する。 }


23

X 3008-1994 (ISO/IEC 7185: 1990)

 var

old, estimate : real ;

begin

estimate : = x ;

 repeat

old : = estimate ;

estimate : = (old+ x / old) * 0.5 ;

until abs (estimate-old) < eps * estimate ;{ eps

は大域的な定数である。 }

Sqrt : = estimate

end { Sqrt } ;

function max (a : vector) : real ;

{

この関数は,a の成分の最大値を求める。 }

 var

largestsofar : real ;

fence : indextype ;

begin

largestsofar : = a [1] ;

{ largestsofar = max (a [1] )

が成立する。 }

for fence : = 2 to limit do begin

if largestsofar < a [fence] then largestsofar : = a [fence]

{ largestsofar = max (a [1] , ... , a [fence] )

が再び成立する。 }

 end

;

 {

したがって,largestsofar = max (a [1] , ... , a [limit] )  である。 }

max : = largestsofar

end { max } ;

function GCD (m, n : natural) : natural ;

begin

if n = 0 then GCD : = m else GCD : = GCD (n, m mod n) ;

end ;

{

次の二つの関数は,括弧付きの式を解析し,それを内部表現に変える。これらの

関数は,互いに呼び合う(相互再帰的という。

)ので,forward を用いて宣言

されている。これらの関数で使う次の識別子は,ここでは定義していない。

formula, IsOpenParenthesis, IsOperator, MakeFormula, nextsym,

 operation,

ReadElement,

ReadOperator

及び SkipSymbol。 }

function ReadExpression : formula ; forward ;

function ReadOperand : formula ; forward ;

function ReadExpression ; { forward

宣言の頭部参照。 }

 var

this : formula ;

op : operation ;


24

X 3008-1994 (ISO/IEC 7185: 1990)

begin

this : = ReadOperand ;

while IsOperator (nextsym) do

 begin

op : = ReadOperator ;

this : = MakeFormula (this, op, ReadOperand) ;

 en ;

ReadExpression : = this

end;

function ReadOperand ; { forward

宣言の頭部参照。 }

begin

if IsOpenParenthesis (nextsym) then

 begin

 SkipSymbo ;

ReadOperand : = ReadExpression ;

 {

nextsym

は閉じ括弧のはずである。 }

 SkipSymbol

 end

else ReadOperand : = ReadElement

end ;

6.6.3 

引数

6.6.3.1

一般規則  値引数仕様の

識別子並びの中の

...

識別子を

あたい

ひき

すう

数という。変数引数仕様の

識別子並び

の中の

...

識別子を

変数引数という。

仮引数並び  =  ‘(’  仮引数区域  {  ‘;’  仮引数区域  }  ‘)

’  .

仮引数区域  >  値引数仕様  |  変数引数仕様  |  手続き引数仕様  |  関数引数仕様  .

値引数仕様  =  識別子並び  ‘:’  型名  .

変数引数仕様  =  ‘var’  識別子並び  ‘:’  型名  .

手続き引数仕様  =  手続き頭部  .

関数引数仕様  =  関数頭部  .

参考1.  仮引数区域の構文規則は,6.6.3.7.1にもある。

手続き頭部の

仮引数並びを領域とする,引数名としての定義位置をもつ識別子を,その手続き頭部の

別子に結合した手続きブロック(もしあれば)の

ブロックの

仮引数という。関数頭部の

仮引数並びを領域

とする,引数名としての定義位置をもつ識別子を,その関数頭部の

識別子に結合した関数ブロック(もし

あれば)の

ブロックの

仮引数という。

値引数仕様又は変数引数仕様の

識別子並びの中の

...

識別子の出現は,その識別子の引数名としての定義位

置及び結合した変数名としての定義位置となる。前者の領域は,それを直接に含む

.....

仮引数並びとし,後者

の領域は,それを仮引数とするブロック(もしあれば)とする。

手続き引数仕様の

手続き頭部の中の

...

識別子の出現は,その識別子の引数名としての定義位置及び結合し

た手続き名としての定義位置となる。前者の領域は,それを直接に含む

.....

仮引数並びとし,後者の領域は,

それを仮引数とするブロック(もしあれば)とする。


25

X 3008-1994 (ISO/IEC 7185: 1990)

関数引数仕様の

関数頭部の中の

...

識別子の出現は,その識別子の引数名としての定義位置及び結合した関

数名としての定義位置となる。前者の領域は,それを直接に含む

.....

仮引数並びとし,後者の領域は,それを

仮引数とするブロック(もしあれば)とする。

参考2.  仮引数並びが手続き引数仕様又は関数引数仕様に含ま

..

れている場合,対応する手続きブロッ

ク又は関数ブロックは存在しない。

6.6.3.2

値引数  仮引数及び結合した変数名は,同じ変数を表す。仮引数の型は,値引数仕様の

型名が表

す型とする。仮引数の型は,ファイル型の

成分型とすることができる型(6.4.3.5 参照)でなければならな

い。実引数(6.7.3 及び 6.8.2.3 参照)は,式でなければならない。その値は,仮引数の型に対して代入可能

でなければならない。ブロックの駆動の際,その時点の式の値が仮引数の表す変数に与えられる。

6.6.3.3

変数引数  実引数は,変数アクセスでなければならない。実引数の型は,変数引数仕様の

型名が

表す型と同じでなければならない。仮引数の型は,この型とする。実引数は,ブロックの駆動の前にアク

セスされる。アクセスされた変数は,そのブロックの駆動の間,参照中とする。対応する仮引数及び結合

した変数名は,駆動の間,この変数を表す。

実変数引数は,可変部の選択子であるフィールドを表してはならない。実変数引数は,詰めありの型を

もつ変数の成分を表してはならない。

6.6.3.4

手続き引数  実引数(6.7.3 及び 6.8.2.3 参照)は,手続き名でなければならない。この手続き名

の定義位置は,プログラムブロックに含ま

..

れていなければならない。実引数の表す手続きが仮引数並びを

もつ場合,手続き引数仕様が直接に含む

.....

仮引数並びは,それと同形でなければならない。そうでない場合,

手続き引数仕様は,仮引数並びを含ん

..

ではならない。仮引数及び結合した手続き名は,ブロックの駆動の

間,実引数を表す。

6.6.3.5

関数引数  実引数(6.7.3 及び 6.8.2.3 参照)は,関数名でなければならない。この関数名の定義

位置は,

プログラムブロックに含ま

..

れていなければならない。

実引数の表す関数が仮引数並びをもつ場合,

関数引数仕様が直接に含む

.....

仮引数並びは,それと同形でなければならない。そうでない場合,関数引数仕

様は,仮引数並びを含ん

..

ではならない。関数の結果の型と関数引数仕様が直接に含む

.....

結果型が表す型は,

同じでなければならない。仮引数及び結合した関数名は,ブロックの駆動の間,実引数を表す。

6.6.3.6

引数並びの同形性  二つの仮引数並びは,同じ個数の仮引数区域を直接に含み

.....

,かつ対応する位

置にある仮引数区域同士が一致するときに,

同形であるという。二つの仮引数区域は,次の(a)(e)の条件

のうちのいずれかが成立するときに,

一致するという。

(a)

双方が値引数仕様で,同じ個数の仮引数を含み,それぞれの値引数仕様の

型名が同じ型を表す。

(b)

双方が変数引数仕様で,同じ個数の仮引数を含み,それぞれの変数引数仕様の

型名が同じ型を表す。

(c)

双方が手続き引数仕様で,それぞれの手続き頭部の

仮引数並びが同形である。

(d)

双方が関数引数仕様で,それぞれの関数頭部の

仮引数並びが同形であり,かつそれぞれの関数頭部の

結果型の含む

..

型名が同じ型を表す。

(e)

双方が値整合配列仕様であるか,又は双方が変数整合配列仕様であるかのいずれかであり,かつそれ

ぞれの整合配列引数仕様が同じ個数の仮引数及び同等な整合配列形式を含む

..

。二つの整合配列形式は,

次の(1)(4)の条件すべてが成立するときに,

同等であるという。

(1)

それぞれの整合配列形式が添字型仕様を一つだけ直接に含む

.....

(2)

それぞれの添字型仕様の

順序型名が同じ型を表す。

(3)

整合配列形式の直接に含む

.....

(成分の)整合配列形式が同等であるか,又は整合配列形式の

型名が同

じ型を表す。


26

X 3008-1994 (ISO/IEC 7185: 1990)

(4)

双方の整合配列形式が詰めあり整合配列形式であるか,又は双方が詰めなし整合配列形式である。

参考1.  整合配列形式の省略形とそれに対応する完全形とは,等価とする(6.6.3.7参照)。

2.

(e)

の扱いについては,5.1(a)5.1(b)5.1(c)5.2(a)及び 5.2(b)を参照のこと。

6.6.3.7

整合配列引数

参考  6.6.3.7 の扱いについては,5.1(a)5.1(b)5.1(c)5.2(a)及び 5.2(b)を参照のこと。

6.6.3.7.1

一般規則  整合配列引数仕様に含ま

..

れる識別子並びの中の

...

識別子の出現は,その識別子の引数

名としての定義位置及び結合した変数名としての定義位置となる。前者の領域は,それを直接に含む

.....

仮引

数並びとし,後者の領域は,それを仮引数とするブロック(もしあれば)とする。この変数名を

整合配列

引数という。

添字型仕様の中の

...

識別子の出現は,その識別子の限界名としての定義位置となる。この定義位置の領域

は,それを直接に含む

.....

仮引数並び及びその仮引数並びで指定される仮引数をもつブロック(もしあれば)

とする。

仮引数区域  >  整合配列引数仕様  .

整合配列引数仕様  =  値整合配列仕様  |  変数整合配列仕様  .

値整合配列仕様  =  識別子並び  ‘:’  整合配列形式  .

変数整合配列仕様  =  ‘var’  識別子並び  ‘:’  整合配列形式  .

整合配列形式  =  詰めあり整合配列形式  |  詰めなし整合配列形式  .

詰めあり整合配列形式  =  ‘packed’  ‘array’  ‘[’  添字型仕様  ‘]’  ‘of’  型名  .

詰めなし整合配列形式  =  ‘array’  ‘[’  添字型仕様  {  ‘;’  添字型仕様  }  ‘]’

‘of’(  型名  |  整合配列形式  )  .

添字型仕様  =  識別子  ‘..’  識別子  ‘:’  順序型名  .

因子  >  限界名  .

限界名  =  識別子  .

参考1.  仮引数区域の構文規則は,6.6.3.1にもある。因子の構文規則は,6.7.1にもある。

整合配列形式が整合配列形式を直接に含む

.....

場合,省略形が許容されていなければならない。省略形は,

完全形の“] of array [”をセミコロンで置き換えた形とする。省略形と完全形とは,等価とする。

例  array [u..v : T1] of array [j..k : T2] of T3

array [u..v : T1; j..k : T2] of T3

ブロックの駆動の間,添字型仕様の最初の識別子の引用は,実引数の型の,対応する添字型(6.6.3.8 

照)の最小値を表す。添字型仕様の 2 番目の識別子の引用は,添字型の最大値を表す。

参考2.  限界名が表すものは,定数でも変数でもない。

一つの整合配列引数仕様の中に現れる仮引数に対応する実引数(6.7.3 及び 6.8.2.3 参照)の型は,すべて

同じでなければならない。実引数の型は,整合配列形式に整合(6.6.3.8 参照)していなければならない。

仮引数の型は,他のどの型とも違う配列型とする。この配列型の成分型は,整合配列引数仕様によって定

まる整合配列引数の固定成分型とする。その添字型は,実引数の型の添字型のうち,整合配列引数仕様の

含む

..

整合配列形式が含む

..

添字型仕様に対応する(6.6.3.8 参照)添字型とする。整合配列引数仕様の含む

..

合配列形式が含む

..

型名が表す型を,その整合配列引数仕様によって定まる整合配列引数の

固定成分型とい

う。

参考3.  仮引数のもつ型は,配列型によって表されていないから,文字列型(6.4.3.2参照)とはなら

ない。


27

X 3008-1994 (ISO/IEC 7185: 1990)

6.6.3.7.2

値整合配列  値整合配列仕様の

識別子並びの中の

...

識別子を,

値整合配列という。実引数は,式

でなければならない。ブロックの駆動の前に,式の値がプログラム中の他の場所に現れない補助の変数に

与えられる。この変数の型は,式の型と同じとする。この変数は,ブロックの駆動の前にアクセスされる。

アクセスされた変数は,そのブロックの駆動の間,参照中とする。対応する仮引数及び結合した変数名は,

駆動の間,この変数を表す。値整合配列の固定成分型は,ファイル型の

成分型とすることができる型でな

ければならない。

値整合配列に対する実引数が整合配列引数を含む

..

場合,その整合配列引数に対して次の(a)(b)の条件の

うちのいずれかが成立しなければならない。

(a)

整合配列引数が実引数の含む

..

関数呼出しに含ま

..

れる。

(b)

整合配列引数が実引数の含む

..

添字付き変数に含ま

..

れる。この場合,その添字付き変数の型は,整合配

列引数の固定成分型でなければならない。

参考  これによって,式及び補助の変数の型が確定していることが保証される。したがって,手続き

の駆動の変数用記憶域の大きさは,変化しない。

6.6.3.7.3

変数整合配列  変数整合配列仕様の

識別子並びの中の

...

識別子を,

変数整合配列という。実引数

は,変数アクセスでなければならない。実引数は,ブロックの駆動の前にアクセスされる。アクセスされ

た変数は,そのブロックの駆動の間,参照中とする。対応する仮引数及び結合した変数名は,駆動の間,

この変数を表す。

実引数は,詰めありの型をもつ変数の成分を表してはならない。

6.6.3.8

整合性

参考1.  6.6.3.8の扱いについては,5.1(a)5.1(b)5.1(c)5.2(a)及び5.2(b)を参照のこと。

添字型を一つだけ直接に含む

.....

配列型及び添字型仕様を一つだけ直接に含む

.....

整合配列形式があるとき,こ

の添字型と添字型仕様は,

対応しているという。添字型仕様を一つだけ直接に含む

.....

整合配列形式が二つあ

るとき,この二つの添字型仕様は,対応しているという。T1 を一つだけ添字型をもつ配列型とする。整合

配列形式が一つだけ添字型仕様を直接に含む

.....

とき,この添字型仕様の

順序型名が表す型を T2 とする。T1,

T2

に対して次の(a)(d)の条件すべてが成立するときに,T1 は,その整合配列形式に

整合するという。

(a) T1

の添字型が T2 と適合する。

(b) T1

の添字型の最小値及び最大値が T2 の定める閉区間内にある。

(c) T1

の成分型が,整合配列形式が直接に含む

.....

型名が表す型と同じ型を表すか,又は整合配列形式が直接

..

に含む

...

整合配列形式に整合する。

(d) T1

が詰めなしで,かつ整合配列形式が詰めなし整合配列形式であるか,又は T1 が詰めありで,かつ

整合配列形式が詰めあり整合配列形式である。

参考2.  整合配列形式の省略形と完全形とは,等価とする(6.6.3.7参照)。配列型の省略形と完全形と

は,等価とする(6.4.3.2参照)

整合性の規則を適用する箇所では,T1 の添字型の最小値又は最大値が T2 の定める閉区間内になければ,

誤りとする。

6.6.4

標準手続き・標準関数  標準の手続き名・関数名及びこれらに対応する標準手続き・標準関数は,

6.6.56.6.6

及び 6.9 に規定する。

参考  標準手続き及び標準関数は,手続き又は関数の一般規則には必ずしも従わない。

6.6.5

標準手続き

6.6.5.1

一般規則  標準手続きは,ファイル操作手続き,動的割当て手続き及び変換手続きとする。


28

X 3008-1994 (ISO/IEC 7185: 1990)

6.6.5.2

ファイル操作手続き  rewrite 又は reset を,input 又は output の表すプログラム引数に適用する場

合を除いて,

rewrite, put, reset

及び get の各ファイル操作手続きをファイル変数 f に適用したときの効果は,

f

,その成分 f. L, f. R 及び f. M 並びに結合したバッファ変数 f↑に関する前提表明及び帰結表明によって規

定する。これらの表明の中で,f0 は,操作前の f の状態又は値とし,f は,操作後の状態又は値とする。f0

↑及び f↑についても同様とする。

操作の直前に前提表明が成立していなければ,誤りとする。等式の形の表明の中で使われている変数が

不定であれば,誤りとする。帰結表明は,ファイル,その成分又は結合したバッファ変数のいずれかに対

する次のアクセスまでに成立する。ファイル変数に結び付けられた外部実体があれば,帰結表明を満たす

ように操作がその上に加えられる。

この操作がどんなものであるか,

またそれがいつ実際に行われるかは,

処理系定義とする。

参考  端末に対する入出力に対応するため,手続き get(及び他の入力手続き)はできるだけ遅めに,

手続き put(及び他の出力手続き)はできるだけ早めに実行するのがよい。この技法を“遅延入

出力”と呼ぶ。

rewrite (f)

前提表明:  真

帰結表明:    (f. L=f. R=S() )  かつ

 (f.

M=Generation)

  かつ

 (f

↑は全面的不定である)

put (f)

前提表明:   (f0. M=Generation)  かつ

(f0.

L

は不定でない)  かつ

(f0. R=S ())

  かつ

(f0

↑は不定でない)

帰結表明:  (f. M=Generation)  かつ

(f. L= (f0. L

∼S(f0↑)))  かつ

(f. R=S ( ))

  かつ

(f

↑は全面的不定である)

reset(f)

前提表明:  成分 f0. L 及び f0. R は不定でない

帰結表明:   (f. L=S() )かつ

(f. R= (f0. L

∼f0. R∼X))  かつ

(f.

M=Inspection)

  かつ

(f. R=S( )

であれば f↑は全面的不定である,そうでなければ f↑=f. R. first)

ここで,f が標準の型名 text の表す型をもち,かつ f0. L∼f0. R が空列でなく,(f0. L∼

f0. R) .last

が行末成分でない場合,X は行末成分だけから成る列とする。それ以外の場

合,X=S( )とする。

get (f)

前提表明:  (f0. M=Inspection)  かつ

(f0.

L

も f0. R も不定でない)  かつ


29

X 3008-1994 (ISO/IEC 7185: 1990)

(f0.

R

≠S ())

帰結表明:  (f. M=Inspection)  かつ

(f. L= (f0. L

∼S (f0. R. first)))  かつ

(f. R=f0. R. rest)

  かつ

(f. R=S( )

であれば f↑は全面的不定である,そうでなければ f↑=f. R. first)

ファイル変数 f の型が text の表す型でない場合,標準手続き read 及び write を次のとおり定義する。

read

f

をファイル変数,v

1

, . . . , v

n

を変数アクセス  (n≧2)  とするとき,手続き呼出し文 read (f, v

1

, . . . , v

n

)

は,ファイル変数をアクセスし,その文のそれ以降の実行中,ファイル変数を参照中にする。read (f,

v

1

, . . . , v

n

)

の実行は,

begin read (ff, v

1

) ; read (ff, v

2

, . . . , v

n

) end

と等価とする。ここで,ff は参照中のファイル変数を表す。

f

をファイル変数,v を変数アクセスとするとき,手続き呼出し文 read (f, v) は,ファイル変数を

アクセスし,その文のそれ以降の実行中,ファイル変数を参照中にする。read (f, v)  の実行は,

begin v : = ff

↑; get (ff) end

と等価とする。ここで,ff は参照中のファイル変数を表す。

参考  ここでの変数アクセスは,変数引数ではない。したがって,バッファ変数の値が代入可能

なものでさえあれば,詰めあり構造の成分であってもよい。

write

f

をファイル変数,e

1

, . . . , e

n

を式  (n≧2)  とするとき,手続き呼出し文 write (f, e

1

, . . . , e

n

)

は,ファイ

ル変数をアクセスし,その文のそれ以降の実行中,ファイル変数を参照中にする。wnte (f, e

1

, . . . , e

n

)

実行は,

begin write (ff, e

1

) ; write (ff, e

2

, . . . , e

n

) end

と等価とする。ここで,ff は参照中のファイル変数を表す。

f

をファイル変数,e を式とするとき,手続き呼出し文 write (f, e)  は,ファイル変数をアクセスし,そ

の文のそれ以降の実行中,ファイル変数を参照中にする。write (f, e)  の実行は,

begin

ff

↑: = e; put (ff) end

と等価とする。ここで,ff は参照中のファイル変数を表す。

参考1.  標準手続き read, write, readln, writeln 及び page をテキストファイルに適用した場合については,

6.9

に規定する。

2. read

及び write の定義は,get 及び put を用いている。したがって,帰結表明に関して処理系

定義と規定する事項は,read 及び write に対しても適用する。

3. read

及び write の定義の帰結として,ファイル変数以外の引数は,左から順に評価される。

6.6.5.3

動的割当て手続き

new (p)

新しい変数を作成し,この変数を指示する新しい指示値を作成する。この指示値を変数アクセス

p

の表す変数に与える。新しい変数は,全面的不定とする。指示値の型は,p のもつポインタ型とす

る。作成される変数の型は,p のもつポインタ型の

被指示型とする。

new (P, c

1

, . . . , c

n

)

新しい変数を作成し,この変数を指示する新しい指示値を作成する。この指示値を変数アクセス


30

X 3008-1994 (ISO/IEC 7185: 1990)

p

の表す変数に与える。新しい変数は,全面的不定とする。指示値の型は,p のもつポインタ型とす

る。作成される変数の型は,p のもつポインタ型の

被指示型とする。この型は,レコード型でなけ

ればならない。更に,選択定数 c

1

, . . . , c

n

に対応する可変要素を入れ子状にもっていなければならな

い。選択定数は,可変部の入れ子の深さが深くなる順序に並べなければならない。c

1

,...

,c

n

に対応

しない可変要素は,c

n

によって指定されるものより入れ子の深いところになければならない。

可変要素が指定された可変部について,新しい変数のその可変部のそれ以外の可変要素が有効に

なれば,誤りとする。

dispose (q)

式 q のもつポインタ型から q の表す指示値を消去する。指示値が new (p, c

1

, . . . , c

n

)

の形式を使っ

て作成されたものであれば,誤りとする。

dispose (q, k

1

,...

,k

m

)

式 q のもつポインタ型から q の表す指示値を消去する。選択定数 k

1

, . . . , k

m

は,可変部の入れ子

の深さが深くなる順序に並べなければならない。変数が new (p, c

1

, . . . , c

n

)

の形式を使って作成され

たものでないか,又は が に等しくなければ,誤りとする。q の指示値で指示される変数の有効

な可変要素が選択定数 k

1

, . . . , k

m

が表す値に対応する可変要素と違えば,誤りとする。

参考  指示値をポインタ型から消去することによって,それが指示する被指示変数は,アクセ

スできなくなる(6.5.4 参照)。その指示値を与えられた変数又は関数は,不定となる

6.6.3.2 及び 6.8.2.2 参照)

q

が不定であるか又は nil 値を表すならば,誤りとする。

因子の

,代入文の

又は実引数の

,変数アクセスの

被指示変数が new の第 2 の形式を使って作成された変

数を表すならば,誤りとする。

6.6.5.4

変換手続き  文 pack (a, i, z)  及び文 unpack (z, a, i)  に関して,次のとおり定める。a 及び z は,変

数アクセスでなければならない。a の型は詰めなしの配列型,z の型は詰めありの配列型でなければならな

い。a の型の成分型と z の型の成分型は,同じでなければならない。式 i の値は,a の型の添字型に対して

代入可能でなければならない。

j

及び k は,プログラム中の他の場所に現れない補助の変数とする。j 及び k の型は,それぞれ z 及び a

の型の添字型とする。u 及び v は,それぞれ z の型の添字型の最小値及び最大値とする。文 pack (a, i, z)  及

び unpack (z, a, i)  は,a 及び z が表す変数をその文の実行中,参照中にする。これらの参照中の変数をそれ

ぞれ aa 及び zz とする。このとき,文 pack (a, i, z)  は,

begin

  k : = i;

  for j : = u to v do

 begin

zz [j] : = aa [k] ;

if j <> v then k : = succ (k)

 end

end

と等価とする。

また,文 unpack (z, a, i)  は,

begin


31

X 3008-1994 (ISO/IEC 7185: 1990)

  k : = i;

  for j : = u to v do

 begin

aa [k] : = zz [j] ;

if j <> v then k : = succ (k)

 end

end

と等価とする。

参考  変数を参照中とすることができない場合,j に与えられる一つ以上の値が a の型の添字型に対し

て代入可能でない場合,又は評価された配列成分が不定である場合は誤りである。

6.6.6

標準関数

6.6.6.1

一般規則  標準関数は,算術関数,変換関数,順序関数及び論理関数とする。

6.6.6.2

算術関数  次の算術関数に対して,式 x の型は,実数型又は整数型でなければならない。関数 abs

及び sqr の場合,結果の型は,引数 x の型と同じとする。その他の算術関数の結果の型は,実数型とする。

結果の値は,

表 に示すとおりとする。

表 2  算術関数の結果

関数

結果

abs (x)

x

の絶対値。

sqr (x)

x

の平方。その値が存在しなければ,誤りとする。

sin (x)

x

の正弦。x の単位はラジアンとする。

cos (x)

x

の余弦。x の単位はラジアンとする。

exp (x)

自然対数の底の x 乗。

ln (x)

x

の自然対数。x が 0 より大きくなければ,誤りとする。

sqrt (x)

x

の非負の平方根。x が負であれば,誤りとする。

arctan (x)

x

の逆正接の主値。結果の単位はラジアンとする。

6.6.6.3

変換関数

trunc (x)

式 x の型は,実数型でなければならない。結果の型は,整数型とする。trunc (x) の値は,x が正又は 0

であれば,0≦x-trunc (x) <1 を,そうでなければ,-1<x-trunc (x)  ≦0 を満たす。この条件を満たす値が存在

しなければ,誤りとする。

例 trunc

(3.5)

{3

となる}

 trunc

(-3.5)  {-3

となる}

round (x)

式 x の型は,実数型でなければならない。結果の型は,整数型とする。round (x)  は,x が正又は 0 であ

れば,trunc (x+0.5)  と等価とする。そうでなければ,trunc (x-0.5)  と等価とする。この条件を満たす値が存

在しなければ,誤りとする。

  round (3.5)

{4

となる}

 round

(-3.5)

  {-4

となる}

6.6.6.4

順序関数

ord (x)

式 x の型は,順序型でなければならない。結果の型は,整数型とする。結果は,式 x の値の順序数(6.4.2.2


32

X 3008-1994 (ISO/IEC 7185: 1990)

及び 6.4.2.3 参照)とする。

chr (x)

式 x の型は,整数型でなければならない。結果の型は,文字型とする。結果は,式 x の値に等しい順序

数をもつ文字型の値とする。この文字値が存在しなければ,誤りとする。文字型の任意の値 ch に対して,

chr (ord(ch) )=ch

が成立する。

succ (x)

式 x の型は,順序型でなければならない。結果の型は,式 x の型(6.7.1 参照)と同じとする。結果は,

式 x の順序数より 1 だけ大きい順序数をもつ値とする。この値が存在しなければ,誤りとする。

pred (x)

式 x の型は,順序型でなければならない。結果の型は,式 x の型(6.7.1 参照)と同じとする。結果は,

式 x の順序数より 1 だけ小さい順序数をもつ値とする。この値が存在しなければ,誤りとする。

6.6.6.5

論理関数

odd (x)

式 x の型は,整数型でなければならない。odd (x)  は,式

(abs (x) mod 2= 1)

と等価とする。

eof (f)

引数 f は,ファイル変数でなければならない。実引数並びを省略した場合,この関数は,標準のテキス

トファイル input(6.10 参照)に適用する。この場合,プログラムは,つづり input の識別子を含む

..

プログ

ラム引数並びを含ま

..

なければならない。結果は,f. R が空列(6.4.3.5 参照)であれば値 true,空列でなけ

れば値 false とする。eof (f)  が駆動されたとき,f が不定であれば,誤りとする。 

eoln (f)

引数 f は,テキストファイルでなければならない。実引数並びを省略した場合,この関数は,標準のテ

キストファイル input(6.10 参照)に適用する。この場合,プログラムは,つづり input の識別子を含む

..

ログラム引数並びを含ま

..

なければならない。結果は,f. R. first が行末成分(6.4.3.5 参照)であれば値 true,

そうでなければ値 false とする。eoln (f)  が駆動されたとき,f が不定であるか,又は eof (f)  が true であれ

ば,誤りとする。

6.7

6.7.1

一般規則  式は,値を表す。因子として使用された変数アクセスは,それによってアクセスされる

変数に与えられている値(もしあれば)を表す。因子の使用時にその因子の

変数アクセスの表す変数が不

定であれば,誤りとする。演算子の優先順位は,4 段階とし,演算子 not を最高の優先順位,次に乗除演

算子,次に加減演算子及び符号,そして関係演算子を最低の優先順位とする。同じ優先順位の演算子が二

つ以上並ぶ場合は,左優先で結合する。

式  =  単純式  [  関係演算子  単純式  ]  .

単純式  =  [  符号  ]  項  {  加減演算子  項  }  .

項  =  因子  {  乗除演算子  因子  }  .

因子  >  変数アクセス  |  符号なし定数  |  関数呼出し

      |

集合構成子  |  ‘(’  式  ‘)’  |  ‘not’  因子  .

符号なし定数  =  符号なし数  |  文字列  |  定数名  |  ‘nil’  .


33

X 3008-1994 (ISO/IEC 7185: 1990)

集合構成子  =  ‘[’  [  元表記  {  ‘,’  元表記  }  ]  ‘]’  .

元表記  =  式  [  ‘..’  式  ]  .

参考1.  因子の構文規則は,6.6.3.7.1にもある。

S

型の因子は,S が T の部分範囲である場合,T 型として扱う。同様に,set of S 型の因子は,詰めなし

正規 T 集合型として扱い,packed set of S 型の因子は,詰めあり正規 T 集合型として扱う。

集合構成子は,集合型の値を表す。集合構成子[ ]は,任意の集合型の,元を一つも含まない値を表す。

一つ以上の

げん

ひょう

記を含む

..

集合構成子は,詰めなし正規 T 集合型の値又は詰めあり正規 T 集合型の値を表

す。いずれの型となるかは,文脈による。ここで,T は集合構成子の

元表記の

式の型とする。一つの集合

構成子の

各元表記の

各式の型は,すべて同じでなければならない。この型は,順序型でなければならない。

集合構成子は,集合構成子の

一つ以上の元表記の表す元から成る集合(空集合でありうる。

)を表す。

x

を式とするとき,元表記 x は,値 x をもつ元を表す。x 及び y を式とするとき,元表記 x. . . y は,x の

値から y の値までの閉区間内にある基底型の値をもつすべての元(0 個でありうる。

)を表す。元表記の中

..

式の評価順序は,処理系依存とする。集合構成子の中の

...

元表記の評価順序は,処理系依存とする。

参考2.  x の値が y の値より大きいとき,元表記 x. . . y は,一つの元も表さない。

3.

集合構成子[ ]は,特定の型をもたない。可能な場合には,代入可能性,又は演算子のオペラ

ンドの型に関する規則によって適当な型を定める。

例 a)  因子

x

15

sin (x + y)

[red, c, green]

[1, 5, 10. . 19, 23]

(x+y+z)

not p

(b) 

x * y

i/ (1 - i)

(x <= y) and (y < z)

(c) 

単純式

p or q

x + y

-x

hue1 + hue2

i * j + 1

(d) 

x = 1.5

p <= q

p = q and r

(i < j) = (j < k)

c in hue1


34

X 3008-1994 (ISO/IEC 7185: 1990)

6.7.2

演算子

6.7.2.1

一般規則

乗除演算子  =  ‘*’  |  ‘/’  |  ‘div’  |  ‘mod’  |  ‘and’  .

加減演算子  =  ‘+’  |  ‘-’  |  ‘or’  .

関係演算子  =  ‘=’  |  ‘<>’  |  ‘<’  |  ‘>’  |  ‘<=’  |  ‘>=’  |

‘in’  .

因子,項及び単純式を,オペランドという。二項演算子のオペランドの評価順序は,処理系依存とする。

参考  したがって,オペランドは,文面どおりの順に評価されるかもしれないし,逆順に評価される

かもしれない。場合によっては,両方のオペランドが並列に評価されるかもしれないし,片方

だけしか評価されないかもしれない。

6.7.2.2

算術演算子  二項算術演算及び単項算術演算のオペランドの型及び結果の型は,それぞれ表 

表 のとおりとする。

表 3  二項算術演算

演算子 演算

オペランドの型

結果の型

+

加算

整数型又は実数型

-

減算

整数型又は実数型

*

乗算

整数型又は実数型

両方のオペランドの型が

整数型であれば整数型,
そうでなければ実数型

/

除算

整数型又は実数型

実数型

div

切捨てを伴う除算 整数型

整数型

mod

剰余

整数型

整数型

表 4  単項算術演算

演算子  演算

オペランドの型

結果の型

+

恒等

整数型又は実数型

整数型又は実数型

-

符号反転

整数型又は実数型

整数型又は実数型

参考1.  特殊記号+,  −及び*は,集合演算子(6.7.2.4参照)としても使う。

x/y

の形をした項の値は,x を y で割った結果とする。y が 0 であれば,誤りとする。

i div j

の形をした項の値は,次の条件を満たす。

abs (i)

−abs (j) < abs ((i div j) * j)  ≦ abs (i)

このとき,abs (i) < abs (j)  であれば,値は 0 とする。そうでなければ,値は,i と j の符号が同じであれ

ば正,違っていれば負とする。j が 0 であれば,誤りとする。

i mod j

の形をした項の値は,次の条件を満たす。

i mod j = i

−(k*j)  かつ  0≦i mod j < j,ただし k は整数

j

が 0 又は負であれば,誤りとする。

参考2.  i≧0かつ j>0の場合に限り,関係  (i div j) *j + i mod j=i が成立する。

標準の定数名 maxint は,整数型の処理系定義の値を表す。この値は,次の(a)(d)の条件を満たす。

(a)

閉区間  [−maxint, +maxint]  内の整数値は,すべて整数型の値である。

(b)

この区間内の整数値に対する単項算術演算は,整数計算に関する数学的規則に従って正しく行われる。

(c)

この区間内の二つの整数値に対する二項算術演算は,その結果もこの区間内にあるならば,整数計算

に関する数学的規則に従って正しく行われる。

(d)

この区間内の二つの整数値に対する関係演算は,整数計算に関する数学的規則に従って正しく行われ

る。


35

X 3008-1994 (ISO/IEC 7185: 1990)

整数から実数への変換並びに実数に対する算術演算子及び標準関数の結果は,対応する数学的結果の近

似とする。この近似の精度は,処理系定義とする。

整数に対する演算又は関数が,整数計算に関する数学的規則に従うことができなければ,誤りとする。

6.7.2.3

論理演算子  論理演算のオペランドの型は,論理型でなければならない。結果の型は,論理型と

する。論理演算子 or, and 及び not は,それぞれ論理和,論理積及び否定の各演算を表す。

論理式  =  式  .

論理式は,論理型の値を表す式でなければならない。

6.7.2.4

集合演算子  集合演算のオペランドの型及び結果の型は,表 のとおりとする。

表 5  集合演算

演算子  演算

オペランドの型

結果の型

+

和集合

-

差集合

*

積集合

同じ詰めなし正規 T 集合型
又は詰めあり正規 T 集合 
型(6.7.1 参照)

オペランドの型と同じ

x

を順序型 T の値,u 及び v を正規 T 集合型のオペランドとする。任意の x に対して次の条件が成立す

る。

・  x が u の元であるか又は v の元である場合,かつその場合に限り x は u+v の元である。

・  x が u の元であり,v の元ではない場合,かつその場合に限り x は u−v の元である。

・  x が u の元であり,v の元でもある場合,かつその場合に限り x は u*v の元である。

6.7.2.5

関係演算子  関係演算のオペランドの型及び結果の型は,表 のとおりとする。

表 6  関係演算

演算子 オペランドの型

結果の型

= <>

任意の単純型,ポインタ型,文字列型, 
詰めなし正規 T 集合型又は詰めあり正規 T 集合型

論理型

< >

任意の単純型又は文字列型

論理型

<= >=

任意の単純型,文字列型,詰めなし正規 T 集合型

又は詰めあり正規 T 集合型

論理型

左オペランド:任意の順序型 T

論理型

in

右オペランド:詰めなし正規 T 集合型又は

詰めあり正規 T 集合型

=, <>, <, >, >=

及び<=の二つのオペランドの型は,適合するか,同じ詰めなし正規 T 集合型若しくは詰め

あり正規 T 集合型であるか,

又は一方が実数型で他方が整数型であるか,

のいずれかでなければならない。

演算子=, <>, <及び>は,それぞれ“等しい”

“等しくない”

“より小さい”及び“より大きい”を意味

する。

集合に対して使う場合を除けば,演算子<=及び>=は,それぞれ“より小さいか又は等しい”及び“より

大きいか又は等しい”を意味する。u 及び v を集合型のオペランドとするとき,u<=v は“u が v の部分集

合である”を,u>=v は“v が u の部分集合である”を意味する。

参考  論理型は順序型であり,false は true より小さい。したがって,p 及び q を論理型のオペランド

とするとき,p=q は同値を,p<=q は“p ならば q”を意味する。

適合する文字列型(6.4.3.2 参照)のオペランドを比較するのに使う場合,関係演算子=, <>, <, >, <=及び

>=

は,次に定める辞書式順序による比較を表す。この辞書式順序は,文字列型の値に対する全順序関係を

定める。

s1

と s2 を適合する文字列型の値とし,をその文字列型の成分の個数とする。このとき,次の条件が成


36

X 3008-1994 (ISO/IEC 7185: 1990)

立する。

・ [1..n]  内のすべての i に対して s1 [i] =s2 [i]  のとき,かつそのときに限り s1=s2

・ [1..n]  内のある p について,

s1 [p] <s2 [p]

しかも [1..p-1] 内のすべての i に対して s1 [i] =s2 [i]  の

とき,かつそのときに限り s1<s2

演算子>, <>, <=及び>=の定義は,=及び<の定義から導く。

演算子 in は,順序型のオペランドの値が集合型の値の元であれば,値 true を生じる。そうでなければ,

値 false を生じる。

6.7.3

関数呼出し  関数呼出しは,関数呼出しの

関数名に結合した関数ブロックの

ブロックの駆動を指定

する。そして,その駆動のアルゴリズムの完了時の,駆動結果の値を生じる。アルゴリズムの完了時に結

果が不定であれば,誤りとする。

参考  関数の駆動が goto 文(6.8.2.4 参照)によって終了する場合,駆動のアルゴリズムが完了したこ

とにはならない  (6.2.3.2(a)参照)

。したがって,駆動の結果が不定でも誤りとはならない。

関数が仮引数をもつならば,関数呼出しは,実引数並びを含ま

..

なければならない。実引数並びの中の

...

実引数は,関数宣言で定義された対応する仮引数に渡される。その対応は,実引数の並び及び仮引数の並

びの中の引数の位置による。実引数の個数は,仮引数の個数と同じでなければならない。実引数の型は,

6.6.3

に規定するとおり,仮引数の型と対応しなければならない。実引数の評価,アクセス及び引数渡しの

順序は,処理系依存とする。

関数呼出し  =  関数名  [  実引数並び  ]  .

実引数並び  =  ‘(’  実引数  {  ‘,’  実引数  }  ‘)’  .

実引数  =  式  |  変数アクセス  |  手続き名  |  関数名  .

例  sum (a, 63)   

GCD (147, k)

sin (x + y)

eof (f)

ord (f

↑)

6.8

6.8.1

一般規則  文は,アルゴリズム上の動作を表す。文は,実行可能とする。

文  =  [  ラベル  ‘:’]  (  単純文  |  構造文  )  .

参考1.  文は,ラベルで修飾することができる。

文 S の

ラベル(もしあれば)は,S を

修飾するという。このラベルは,次の(a)(c)の条件のうちのいず

れかが成立している場合でなければ,goto 文 G(6.8.2.4 参照)に含まれてはならない。

(a)  S

が G を含む

..

(b)  S

が G を含む

..

文並びの

文である。

(c)  S

が G を含む

..

ブロックの

,実行部の

複合文の

文並びの

文である。

参考2.  ブロック内の goto 文が,それを囲むブロックのラベルを参照することができるのは,ラベル

が外側のブロックの一番外側の文を修飾しているときに限る。

6.8.2

単純文

6.8.2.1

一般規則  単純文は,他の文を含ま

..

ない。空文は,字句を含ま

..

ず,

“何もしない”という動作を

表す。

単純文  =  空文  |  代入文  |  手続き呼出し文  |  goto 文  .


37

X 3008-1994 (ISO/IEC 7185: 1990)

空文  =  .

6.8.2.2

代入文  代入文は,代入文の

変数アクセスが表す変数又は代入文の

関数名が表す駆動結果に,代

入文の式の値を与える。値は,それぞれ変数又は駆動結果の型に対して代入可能でなければならない。駆

動結果に対する代入文は,その代入文の

関数名に結合した関数ブロック(6.6.2 参照)に含ま

..

れていなけれ

ばならない。

代入文  = (  変数アクセス  |  関数名  )  ‘:=’  式  .

変数アクセスは,代入文の実行中,その変数を参照中にする。変数を参照中にする動作及び式の評価の

順序は,処理系依存とする。

変数又は駆動結果にその型の値が与えられていない状態のことを,

不定という。構造型をもつ変数の場

合,その変数の全部の成分が全面的不定である状態のことを,

全面的不定という。構造型をもたない変数

又は駆動結果の場合,全面的不定は,不定と同じ意味とする。

例  x : = y + z

p : = (1 <= i) and (i < 100)

i : = sqr(k)

−(i * j)

hue1 : = [blue, succ(c)]

p1

↑.mother : = true

6.8.2.3

手続き呼出し文  手続き呼出し文は,手続き呼出し文の

手続き名に結合した手続きブロックの

ロックの駆動を指定する。手続きが仮引数をもつならば,手続き呼出し文は,実引数並びを含ま

..

なければ

ならない。それぞれの実引数は,手続き宣言で定義された対応する仮引数に渡される。その対応は,実引

数の並び及び仮引数の並びの中の引数の位置による。実引数の個数は,仮引数の個数と同じでなければな

らない。実引数の型は,6.6.3 に規定するとおり,仮引数の型と対応しなければならない。

実引数の評価,アクセス及び引数渡しの順序は,処理系依存とする。

read

引数並びを含む

..

手続き呼出し文の

手続き名は,標準手続き read を表さなければならない。readln 引

数並びを含む

..

手続き呼出し文の

手続き名は,標準手続き readln を表さなければならない。write 引数並びを

含む

..

手続き呼出し文の

手続き名は,標準手続き write を表さなければならない。writeln 引数並びを含む

..

続き呼出し文の

手続き名は,標準手続き writeln を表さなければならない。

手続き呼出し文  =  手続き名  ( [  実引数並び  ]

|

  read 引数並び  |  readln 引数並び

|

  write 引数並び  |  writeln 引数並び  )  .

例 printheading

transpose (a, n, m)

bisect (fct,

−1.0, +1.0, x)

AddVectors (m [1]

,m [2]  ,m [k] )

参考  4 番目の例は,水準 0 ではない。

6.8.2.4

goto

文  goto 文は,それ以降の処理を goto 文の

ラベルが表すプログラム内位置から続けることを

指定する。goto 文の実行によって,次の(a)(b)のいずれかに該当するものを除いて,すべての駆動が終了

する。

(a)

指定されたプログラム内位置を包含する駆動

(b)  (a)

又は(b)によって終了しないと規定する駆動の駆動位置を包含する駆動

goto

文  =  ‘goto’  ラベル  .


38

X 3008-1994 (ISO/IEC 7185: 1990)

6.8.3

構造文

6.8.3.1

一般規則

構造文  =  複合文  |  条件文  |  繰返し文  |  with 文  .

文並び  =  文  {  ‘;’  文  }  .

文並びは,文並びの

文を文面上の順序に従って(goto 文の実行によって変更される場合を除く。

)実行

することを指定する。

6.8.3.2

複合文  複合文は,複合文の

文並びの実行を指定する。

複合文  =  ‘begin’  文並び  ‘end’  .

例  begin z : = x; x : = y; y : = z end

6.8.3.3

条件文

条件文  =  if 文  |  case 文  .

6.8.3.4

if

if

文  =  ‘if’  論理式  ‘then’  文  [  else 部  ]  .

else

部  =  ‘else’  文  .

if

文の

論理式が値 true を生じる場合,if 文の

文を実行する。論理式が値 false を生じる場合,if 文の

文は

実行せず,else 部(もしあれば)の

文を実行する。

else

部をもたない if 文の直後に予約語 else が現れてはならない。

参考  したがって,else 部は,それより前の then で else と対応のとれていないもののうち最も近くに

あるものと対応する。

例  if x < 1.5 then z : = x + y else z : = 1.5

if p1 <> nil then p1 : = p1

↑.father

if j = 0 then

if i = 0 then writeln (’indefinite’)

else writeln (’infinite’)

else writeln ( i / j)

6.8.3.5

case

文  case 文の

選択肢の

選択定数並びの

選択定数の中に,同じ値を表すものが二つ以上あって

はならない。これらの選択定数の型は,順序型でなければならず,case 文の

選択式の

式の型と同じでなけ

ればならない。case 文の実行の際,最初に選択式を評価する。次に,この値を表す選択定数を直接に含む

.....

選択肢を選び,その選択肢の

文を実行する。case 文に入るとき,選択式の値がどの選択定数とも等しくな

ければ,誤りとする。

case

文  =  ‘case’  選択式  ‘of’  選択肢  {  ‘;’  選択肢  }  [  ‘;’  ]  ‘end’  .

選択肢  =  選択定数並び  ‘:’  文  .

選択式  =  式  .

参考  選択定数は,文のラベルではない。

例 case

operator

of

plus:

x : = x + y;

minus:  x : = x

−y;

times:  x : = x * y

 end

6.8.3.6

繰返し文  繰返し文は,文を繰り返して実行することを指定する。


39

X 3008-1994 (ISO/IEC 7185: 1990)

繰返し文  = repeat 文  |  while 文  |  for 文  .

6.8.3.7

repeat

repeat

文  =  ‘repeat’  文並び  ‘until’  論理式  .

repeat

文は,repeat 文の

文並びの実行後に repeat 文の

論理式が値 true を生じるまで文並びを繰り返して

(goto 文の実行によって変更される場合を除く。

)実行することを指定する。論理式が文並びの実行後に

評価されるので,文並びは,少なくとも 1 回は実行される。

例 repeat

k : = i mod j;

i : = j;

j : = k

 until

j=0

6.8.3.8

while

while

文  =  ‘while’  論理式  ‘do’  文  .

while

while b do body

は,

begin

 if

b then

  repeat

body

    until not (b)

end

と等価とする。

例  while i > 0 do

begin if odd (i) then z : = z * x;

i : = i div 2;

x : = sqr (x)

end

while not eof (f) do

begin process (f

↑) ; get (f)

end

6.8.3.9

for

文  for 文は,for 文の

制御変数が表す変数に一連の値を与えながら,for 文の

文を繰り返して

実行することを指定する。

for

文  =  ‘for’  制御変数  ‘: =’  初期値    (  ‘to’  |  ‘downto’  )  終値  ‘do’  文  .

制御変数  =  純変数  .

初期値  =  式  .

終値  =  式  .

制御変数の

純変数の

変数名の

識別子は,その for 文を直接に含む

.....

ブロックの

変数宣言部で宣言されたも

のでなければならない。制御変数の型は,順序型でなければならない。初期値及び終値の型は,この型と

適合しなければならない。for 文の

文が 1 回でも実行されるならば,初期値及び終値の値は,制御変数の型


40

X 3008-1994 (ISO/IEC 7185: 1990)

に対して代入可能でなければならない。for 文の実行の後(goto 文によって脱出した場合を除く。

,制御変

数は,不定とする。for 文及びその for 文を直接に含む

.....

ブロックの

手続き関数宣言部は,for 文の制御変数が

表す変数を変えうる文を含ん

..

ではならない。

次の(a)(d)の条件のうちのいずれかが成立するときに,文 S は変数 V を

変えうるという。

(a)  S

が代入文であり,S の

変数アクセスが V を表す。

(b)  S

が V を表す実変数引数を含む

..

(c)  S

が標準手続き read 又は標準手続き readln の駆動を指定する手続き呼出し文であり,S の

read

引数並

び又は readln 引数並びの

変数アクセスが V を表す。

(d)  S

が等価なプログラムの断片によって規定される文であり,そのプログラムの断片が V を変えうる文

を含む。

これらの規定による制約を別にすれば,for 文

for v : = e1 to e2 do body

は,

begin

temp1 : = e1 ;

temp2 : = e2 ;

if temp1 <= temp2 then

 begin

v : = temp1 ;

body ; 

while v <> temp2 do

 begin

v : = succ (v) ;

body

 end

 end

end

と等価とする。

また,for 文

for v : = e1 downto e2 do body

は,

begin

temp1 : = e1 ;

temp2 : = e2 ;

if temp1 >= temp2 then

 begin

v : = temp1 ;

body;

while v <> temp2 do

 begin


41

X 3008-1994 (ISO/IEC 7185: 1990)

v : = pred (v) ;

body

 end

 end

end

と等価とする。

ここで,temp1 及び temp2 は,プログラム中の他の場所に現れない補助の変数とする。temp1 及び temp2

の型は,変数 v の型が部分範囲型でなければ,v の型とし,部分範囲型であれば,v の型の親の型とする。

例  for i : = 2 to 63 do

if a [i] > max then max : = a [i]

for i : = 1 to 10 do

for j : = 1 to 10 do

 begin

x : = 0;

for k : = 1 to 10 do

x : = x + m1 [i, k] * m2 [k, j] ;

m [i, j] : = x

 end

for i : = 1 to 10 do

for j : = 1 to i

− 1 do

  m [i] [j] : = 0.0

for c : = blue downto red do

q (c)

6.8.3.10  with

with

文  =  ‘with’  レコード変数並び  ‘do’  文  .

レコード変数並び  =  レコード変数  {  ‘,’  レコード変数  }  .

フィールド表記名  =  識別子  .

with

文は,with 文の

文の実行を指定する。with 文の

レコード変数並びの中に

...

一つだけレコード変数があ

る場合,そのレコード変数の出現は,そのレコード変数のもつレコード型の成分に結合したすべてのフィ

ールド名の,フィールド表記名としての定義位置となる。この定義位置の領域は,with 文の

文とする。フ

ィールド表記名のそれぞれの引用は,そのレコード変数の,フィールド名に結合した成分を表す。レコー

ド変数は,with 文の

文の実行の前にアクセスされる。アクセスされた変数は,with 文の

文の実行の間,参

照中とする。

with

with v

1

v

2

, . . . , v

n

 do s

は,

with v

1

 do

 with

v

2

 do

. . .

 with

v

n

 do s


42

X 3008-1994 (ISO/IEC 7185: 1990)

と等価とする。

例  with date do

if month= 12 then

  begin month : = 1; year : = year + 1

 end

else month : = month + 1

この with 文は,変数 date に対して

if date. month = 12 then

begin date. month : = 1; date. year : = date. year + 1

 end

else date. month : = date. month+ 1

と同じ効果をもつ。

6.9

入出力

6.9.1

手続き read  read をテキストファイルに適用する場合の引数並びの構文規則は,次のとおりとす

る。

read

引数並び  =  ‘(’  [  ファイル変数  ‘,’  ]

                            変数アクセス  {  ‘,’  変数アクセス  }  ‘)’  .

ファイル変数を省略した場合,この手続きは,標準のテキストファイル input に適用する。この場合,

プログラムは,つづり input の識別子を含む

..

プログラム引数並びを含ま

..

なければならない。

6.9.1

では,テキストファイルに適用した場合の手続き read を規定する。その対象となるテキストファイ

ルを f と書く。read (f, v)  をテキストファイル f に適用した場合の効果は,6.6.5.2 の記法に従って,前提表

明及び帰結表明を用いて定義する。read (f, v)  の前提表明は,get (f)  の前提表明とする。t を文字型をもつ

成分の列,r, s 及び u をそれぞれ text が表す型の構造によって定義される列型の値として,r∼s∼t∼u = w

∼f0. R. rest とする。ただし,u=S( )であれば t=S( ),そうでなければ u. first=end-of-line とする。更に,w=f0

↑又は w=f0. R. first とする。この w の選択は,処理系依存とする。このとき,read (f, v)  の帰結表明は次

のとおりとする。

(f. M=f0. M)

  かつ

(f. L

∼f. R=f0. L∼f0. R)  かつ

(f. R=t

∼u)  かつ

(f. R=S( )

であれば f↑は全面的不定である,そうでなければ f↑=f. R. first)

参考1.  ここでの変数アクセスは,変数引数ではない。したがって,バッファ変数の値が代入可能な

ものでさえあれば,詰めあり構造の成分であってもよい。

(a)  n

≧1 のとき,read (f, v

1

, . . . , v

n

)

は,テキストファイルをアクセスし,その文のそれ以降の実行中,そ

のテキストファイルを参照中にする。v

1

, . . . , v

n

のそれぞれは,実数型,文字列型又は文字型若しくは

整数型と適合する型をもつ変数アクセスでなければならない。n≧2 のとき,read (f, v

1

, . . . , v

n

)

の実行

は,

begin read (ff, v

1

) ; read (ff, v

2

, . . . , v

n

) end

と等価とする。ここで,ff は参照中のテキストファイルを表す。

(b)  v

が文字型(又はその部分範囲)の変数アクセスの場合,read (f, v)  の実行は,

begin v : = ff

↑; get (ff) end


43

X 3008-1994 (ISO/IEC 7185: 1990)

と等価とする。ここで,ff は参照中のテキストファイルを表す。

参考2. get 及び read (f, v)  の帰結表明を満たすためには,r=S ( ), length (s) =1とする必要がある。

(c)  v

が整数型(又はその部分範囲)の変数アクセスの場合,read (f, v)  は,次の四つの要求を満足する。

s

のどの成分も行末成分に等しくない。r の成分(もしあれば)は,すべて文字型の値空白又は行末成

分に等しい。 (s∼t∼u) .first は,文字型の値空白とも行末成分とも等しくない。s が空列であるか,又

は s が 6.1.5 の構文規則に定める符号付き整数の形式であり,かつ s∼S (t. first)  が符号付き整数の形式

でない。s が空列であれば,誤りとする。この符号付き整数の値は,v のもつ型に対して代入可能でな

ければならない。この値を v に与える。

参考3.  列 r は,読み飛ばすべき空白及び行末成分の列を表す。列 s は,読取りの対象となる符号付

き整数を表す。

(d)  v

が実数型の変数アクセスの場合,read (f, v)  は,次の四つの要求を満足する。s のどの成分も行末成

分に等しくない。r の成分(もしあれば)は,すべて文字型の値空白又は行末成分に等しい。 (s∼t∼

u) .first

は,文字型の値空白とも行末成分とも等しくない。s が空列であるか,又は s が 6.1.5 の構文規

則に定める符号付き数の形式であり,かつ s∼S (t. first) が符号付き数の形式でない。s が空列であれ

ば,誤りとする。この符号付き数の値を v に与える。

参考4.  列 r は,読み飛ばすべき空白及び行末成分の列を表す。列 s は,読取りの対象となる数を表

す。

6.9.2

手続き readln  readln の引数並びの構文規則は,次のとおりとする。

readln

引数並び  =  [  ‘(’  (  ファイル変数  |  変数アクセス  )

                                {  ‘,’  変数アクセス  }  ‘)’  ]  .

手続き readln は,テキストファイルにだけ適用できる。ファイル変数を省略した場合,又は readln 引数

並び全体を省略した場合,この手続きは,標準のテキストファイル input に適用する。この場合,プログ

ラムは,つづり input の識別子を含む

..

プログラム引数並びを含ま

..

なければならない。

readln (f, v

1

, . . . , v

n

)

は,テキストファイルをアクセスし,その文のそれ以降の実行中,そのテキストフ

ァイルを参照中にする。この文の実行は,

begin read (ff, v

1

, . . . , v

n

) ; readln (ff) end

と等価とする。ここで,ff は参照中のテキストファイルを表す。

readln(f)

は,テキストファイルをアクセスし,その文のそれ以降の実行中,そのテキストファイルを参照

中にする。この文の実行は,

begin while not eoln(ff)do get(ff); get(ff)end

と等価とする。ここで,ff は参照中のテキストファイルを表す。

参考1. readln は,テキストファイルの現在位置を現在行の行末成分の直後に移す。そこがファイル

の終わりでなければ,次の行の先頭が現在位置となる。

2. readln

の定義は,get を用いている。したがって,get の帰結表明に関して処理系定義と規定

する事項は,readln に対しても適用する(6.6.5.2 参照)

6.9.3

手続き write  write をテキストファイルに適用する場合の引数並びの構文規則は,次のとおりとす

る。

write

引数並び  =  ‘(’  [  ファイル変数  ‘,’  ]  write 引数  {  ‘,’  write 引数  }  ‘)’  .

write

引数  =  式  [  ‘:  式  [  ‘:’  式  ]  ]  .

ファイル変数を省略した場合,この手続きは,標準のテキストファイル output に適用する。この場合,


44

X 3008-1994 (ISO/IEC 7185: 1990)

プログラムは,つづり output の識別子を含む

..

プログラム引数並びを含ま

..

なければならない。write をテキス

トファイル f に適用したとき,f が不定であるか,又は f. M=Inspection(6.4.3.5 参照)であれば,誤りとす

る。

n

≧1 のとき,write (f, p

1

, . . . , p

n

)

は,テキストファイルをアクセスし,その文のそれ以降の実行中,そ

のテキストファイルを参照中にする。n≧2 のとき,write (f, p

1

, . . . , p

n

)

の実行は,

begin write (ff, p

1

) ; write (ff, p

2

, . . . , p

n

) end

と等価とする。ここで,ff は参照中のテキストファイルを表す。

f

がテキストファイルを表し,p が write 引数であるとき,write (f, p)  は,0 個以上の文字の列をテキスト

ファイル f に書き出す。この列のそれぞれの文字 c について,

begin ff

↑: = c; put (ff) end

と等価な操作をテキストファイル f に適用する。ここで,ff は参照中のテキストファイルを表す。書き出

す文字の列は,write 引数 p の最初の式の値の表現とする。この表現の詳細は,6.9.3.16.9.3.6 に規定する。

参考 write の定義は,put を用いている。したがって,put の帰結表明に関して処理系定義と規定する

事項は,write に対しても適用する(6.6.5.2 参照)

6.9.3.1

write

引数  write 引数 p は,次のいずれかの形とする。

e : TotalWidth : FracDigits

e : TotalWidth

e

式 e は,ファイル f に書き出す値を表す。その型は,整数型,実数型,文字型,論理型又は文字列型の

いずれかでなければならない。TotalWidth 及び FracDigits は,整数型の式でなければならない。TotalWidth

及び FracDigits の値を

欄長引数という。欄長引数が 1 未満であれば,誤りとする。

write (f, e)

は,write (f, e: TotalWidth)  と等価とする。ここで,TotalWidth は,e の型ごとに規定する基準

値とする。整数型,実数型及び論理型に対する基準値は,処理系定義とする。

write (f, e: TotalWidth: FracDigits)

の形式の場合,e の型は,実数型でなければならない(6.9.3.4.2 参照)

6.9.3.2

文字型  e の型が文字型のとき,TotalWidth の基準値は,1 とする。ファイル f に書き出す表現は,

次のとおりとする。

(TotalWidth

−1)個の空白,

e

の文字値。

6.9.3.3

整数型  e の型が整数型のときは,e の値の 10 進表現をファイル f に書き出す。関数 IntegerSize

を,次のとおり定義する。

function IntegerSize (x : integer) : integer;

{

  次の条件を満たすけた数 z を返す。10 の (z−1)  乗≦abs (x) <10 の z 乗  }

正整数 IntDigits を,次のとおり定義する。

if e=0

then IntDigits : = 1

else IntDigits : = IntegerSize (e) ;

このとき,書き出す表現は,次のとおりとする。

(a) TotalWidth

≧IntDigits+1 の場合

(TotalWidth

−IntDigits-1)個の空白,

e<0

のとき符号‘−’, e≧0 のとき空白,


45

X 3008-1994 (ISO/IEC 7185: 1990)

IntDigits

けたの abs (e)  の 10 進表現。

(b) TotalWidth<IntDigits+1

の場合

 e<0

のとき符号‘−’,

IntDigits

けたの abs (e)  の 10 進表現。

6.9.3.4

実数型  e の型が実数型のときは,指定された有効けた数に e の値を丸め,その 10 進表現をファ

イル f に書き出す。

6.9.3.4.1

浮動小数点表現  write(f, e: TotalWidth)は,e の値の浮動小数点表現を書き出す。関数 TenPower,

RealSize

及び Truncate を,次のとおり定義する。

function TenPower (Int : integer) : real;

{

  10.0 の Int 乗を返す。  }

function RealSize (y : real) : integer;

{

  次の条件を満たす値 z を返す。TenPower (z-1)  ≦abs (y) <TenPower (z)    }

function Truncate (y : real; DecPlaces : integer) : real;

{

  y の値の小数点以下 DecPlaces けたより下を切り捨てた結果を返す。  }

ExpDigits

は,指数部のけた数を示す処理系定義の値とする。

正整数 ActWidth を,次のとおり定義する。

if TotalWidth >= ExpDigits + 6

then ActWidth : = TotalWidth

else ActWidth : = ExpDigits + 6;

また,非負の数 eWritten,正整数 DecPlaces 及び整数 ExpValue を,次のとおり定義する。

DecPlaces : = ActWidth - ExpDigits - 5;

if e=0.0

then begin eWritten : = 0.0; ExpValue : = 0 end

else

begin

eWritten : = abs (e) ;

ExpValue : = RealSize (eWritten) - 1;

eWritten : = eWritten /TenPower (ExpValue) ;

eWritten : = eWritten + 0.5 * TenPower (-DecPlaces) ;

if eWritten >= 10.0

then

begin

eWritten : = eWritten /10.0;

ExpValue : = ExpValue + 1

end;

eWritten : = Truncate (eWritten, DecPlaces)

end;

このとき,e の値の浮動小数点表現は,次のとおりとする。

符号(e<0.0 かつ eWritten>0.0 のとき  ‘−’

,それ以外のとき空白),

eWritten

の 10 進表現の第 1 けた目の数字,


46

X 3008-1994 (ISO/IEC 7185: 1990)

文字‘.’,

eWritten

の 10 進表現の第 2 けた目以降の DecPlaces 個の数字,

処理系定義の指数部表現文字(

‘e’又は  ‘E’

),

ExpValue

の符号(ExpValue<0 のとき  ‘−’,それ以外のとき  ‘+’

),

ExpValue

の ExpDigits けたの 10 進表現(必要ならば先頭に文字‘0’が並ぶ。

6.9.3.4.2

固定小数点表現  write (f, e: TotalWidth: FracDigits)  は,e の値の固定小数点表現を書き出す。関

数 TenPower, RealSize 及び Truncate を,6.9.3.4.1 と同様に定義する。

非負の数 eWritten を,次のとおり定義する。

if e=0.0

then eWritten : = 0.0

else

begin

eWritten : = abs (e) ;

eWritten : = eWritten + 0.5 * TenPower (- FracDigits) ;

eWritten : = Truncate (eWritten, FracDigits)

end;

正整数 IntDigits を,次のとおり定義する。

if RealSize (eWritten) < 1

then IntDigits : = 1

else IntDigits : = RealSize (eWritten) ;

正整数 MinNumChars を,次のとおり定義する。

MinNumChars : = IntDigits + FracDigits + 1;

if (e < 0.0) and (eWritten > 0.0)

then MinNumChars : = MinNumChars + 1;

{

  ‘−’が必要  }

このとき,e の値の固定小数点表現は,次のとおりとする。

TotalWidth

≧MinNumChars のとき, (Tota1Width-MinNumChars) 個の空白,

e<0.0

かつ eWritten>0.0 のとき文字‘−’,

eWritten

の値の 10 進表現の,最初の’IntDigits 個の数字,

文字‘.’,

eWritten

の値の 10 進表現の,次の FracDigits 個の数字。

参考  少なくとも MinNumChars 個の文字が書き出される。TotalWidth がこの値より小さいとき,先頭

に空白が書き出されることはない。

6.9.3.5

論理型  e の型が論理型のときは,e の値に応じて値 true 又は値 false の表現をファイル f に書き

出す。これは,文字列’True’又は’False’を欄長引数 TotalWidth を使って書き出す(6.9.3.6 参照)ことと等価

とする。このとき,各英字を大文字とするか小文字とするかは,処理系定義とする。

6.9.3.6

文字列型  e の型が 個の成分をもつ文字列型のときは,TotalWidth の基準値は,とする。書き

出す表現は,次のとおりとする。

TotalWidth>n

のときは,

(TotalWidth-n)

個の空白,

e

の値の最初の文字から九番目の文字まで順に並べたもの。


47

X 3008-1994 (ISO/IEC 7185: 1990)

1

≦TotalWidth≦n のときは,

最初の文字から TotalWidth 番目の文字まで順に並べたもの。

6.9.4

手続き writeln  writeln の引数並びの構文規則は,次のとおりとする。

writeln

引数並び  =  [  ‘(’  (  ファイル変数  |  write 引数  )

                                {  ‘,’  write 引数  }  ‘)’  ]  .

手続き writeln は,テキストファイルにだけ適用できる。ファイル変数を省略した場合,又は writeln 引

数並び全体を省略した場合,この手続きは,標準のテキストファイル output に適用する。この場合,プロ

グラムは,つづり output の識別子を含む

..

プログラム引数並びを含ま

..

なければならない。

writeln (f, p

1

, . . . , p

n

)

は,テキストファイルをアクセスし,その文のそれ以降の実行中,そのテキストフ

ァイルを参照中にする。writeln (f, p

1

, . . . , p

n

)

の実行は,

begin write (ff, p

1

, . . . , p

n

) ; writeln (ff) end

と等価とする。ここで,ff は参照中のテキストファイルを表す。

writeln

の効果は,次の前提表明及び帰結表明(記法は 6.6.5.2 参照)によって規定する。

前提表明:  (f0 が不定でない)  かつ

(f0. M=Generation)

  かつ

(f0. R=S ())

帰結表明:  (f. L=(f0. L∼S(end-of-line) ))  かつ

(f

↑は全面的不定である)  かつ

(f. R=S ())

  かつ

(f. M=Generation),

ここで,S (end-of-line)  は,6.4.3.5 に規定する行末成分だけから成る列とする。

参考 writeln

(f)

は,その時点までに生成された部分行(空でありうる。

)を終える。6.6.5.2 の規定に

よって,前提表明が writeln (f)  の実行直前に成立していなければ,誤りとする。

6.9.5

手続き page  writeln (f)  に対する前提表明(6.9.4 参照)が page (f)  の駆動の直前に成立していなけ

れば,誤りとする。実引数並びを省略した場合,この手続きは,標準のテキストファイル output に適用す

る。この場合,プログラムは,つづり output の識別子を含む

..

プログラム引数並びを含ま

..

なければならない。

page (f)

は,テキストファイル f を改ページ機能をもつ装置上に印字している場合に以後は新しいページに

印字するという処理系定義の効果をもつ。f. L が空列でなく,しかも f. L. last が行末成分(6.4.3.5 参照)

でない場合,writeln (f)  を駆動する。更に,バッファ変数 f↑を全面的不定にする。生成の間に手続き page

を適用したテキストファイルを検査したときの効果は,処理系依存とする。

6.10

プログラム

プログラム  =  プログラム頭部  ‘;’  プログラムブロック  ‘.’  .

プログラム頭部  =  ‘program’  識別子  [  ‘( ’  プログラム引数並び  ‘)’  ]  .

プログラム引数並び  =  識別子並び  .

プログラムブロック  =  ブロック  .

プログラム頭部の

識別子を

プログラム名という。プログラム名は,プログラムの中で何の意味ももたな

い。プログラム引数並びの含む

..

識別子を,

プログラム引数という。それらは,互いに異なっていなければ

ならない。各プログラム引数には,プログラムブロックを領域とする,変数名としての定義位置がなけれ

ばならない。プログラム引数が表す変数のプログラム外部の実体への結び付け方は,処理系依存とする。

ただし,変数の型がファイル型である場合,その結び付け方は,処理系定義とする。


48

X 3008-1994 (ISO/IEC 7185: 1990)

参考  このような外部実体の外部表現は,この規格の範囲外とする。

6.

に規定する変数に対するすべての動作,演算又は関数の実行は,変数がプログラム引数であって,プ

ログラム引数の結び付け方の結果として,定義どおり行えないとき,誤りとする。

標準の識別子 input 又は output の,プログラム引数並びの

識別子並びの中の

...

出現は,その標準の識別子

の,標準の型名 text の表す標準の型をもつ変数名としての定義位置となる。この定義位置の領域は,プロ

グラムブロックとする。識別子 input がプログラム引数並びの中に現れると,そのテキストファイル又は

結合したバッファ変数に対する最初のアクセスまでに,reset に対する帰結表明が成立する。同様に,識別

子 output がプログラム引数並びの中に現れると,rewrite に対する帰結表明が成立する。標準手続き reset

又は rewrite を,これらのテキストファイルに適用したときの効果は,処理系定義とする。

例  program copy (f, g) ;

var f, g : file of real;

begin reset (f) ; rewrite (g) ;

while not eof (f) do

begin g

↑: = : f↑; get (f) ; put (g)

end

end.

program copytext (input, output) ;

{

  このプログラムは,テキストファイル input の文字を,行の構造を

保ったままテキストファイル output にコピーする。  }

var ch : char;

begin

while not eof do

begin

while not eoln do

begin read (ch) ; write (ch)

end;

readln; writeln

end

end.

program t6p6p3p4 (output) ;

var globalone, globaltwo : integer;

procedure dummy;

begin

writeln (’fail4’)

end { dummy } ;

procedure p (procedure f(procedure ff; procedure gg) ; procedure g);


49

X 3008-1994 (ISO/IEC 7185: 1990)

var localtop : integer;

procedure r;

begin { r }

if globalone = 1 then

begin

if (globaltwo <> 2) or (localtop <> 1) then

writeln (’fail1’)

end

else if globalone = 2 then

begin

if (globaltwo <> 2) or (localtop <> 2) then

writeln (’fail2’)

else

writeln (’pass’)

end

else

writeln (’fail3’) ;

globalone : = globalone + 1

end { r } ;

begin { p }

globaltwo : = globaltwo + 1;

localtop : = globaltwo;

if globaltwo = 1 then

p (f, r)

else

f (g, r)

end { p } ;

procedure q (procedure f; procedure g) ;

begin

f;

g

end { q } ;

begin { t6p6p3p4 }

globalone : = 1;

globaltwo : = 0;

p (q, dummy)

end. { t6p6p3p4 }


50

X 3008-1994 (ISO/IEC 7185: 1990)

附属書 A(参考)  構文規則

構造型,単純型,特殊記号,符号付き数,プログラム及びポインタ型の六つの非終端記号は,意味の規

定の中で用いるだけで,構文規則の右辺では用いない。文法全体の開始記号は,非終端記号“プログラム”

とする。

6.6.3.7.1

値整合配列仕様  =  識別子並び  ‘:’  整合配列形式  .

6.6.3.1

値引数仕様  =  識別子並び  ‘:’  型名  .

6.1.7

アポストロフィ表記  =  ‘’’’  .

6.6.3.7.1

因子  >  限界名  .

6.7.1

因子  >  変数アクセス  |  符号なし定数  |  関数呼出し

      |  集合構成子  |  ‘(’  式  ‘)’  |  ‘not’  因子  .

6.1.1

英字  =  ‘a’  |  ‘b’  |  ‘c’  |  ‘d’  |  ‘e’|  ‘f’  |  ‘g’  |  ‘h’  |  ‘i’

      |  ‘j’  |  ‘k’  |  ‘l’  |  ‘m’  |  ‘n’  |  ‘o’  |  ‘p’  |  ‘q’  |

‘r’

      |  ‘s’  |  ‘t’  |  ‘u’  |  ‘v’  |  ‘w’  |  ‘x’  |  ‘y’  |  ‘z’  .

6.4.1

書下し型  =  書下し順序型  |  書下し構造型  |  書下しポインタ型  .

6.4.3.1

書下し構造型  = [  ‘packed’  ]    詰めなし構造型  .

6.4.2.1

書下し順序型  =  列挙型  |  部分範囲型  .

6.4.4

書下しポインタ型  =  ‘↑’  被指示型  .

6.7.2.1

加減演算子  =  ‘+’  |  ‘−’  |  ‘or’  .

6.4.1

型定義  =  識別子  ‘=’  型表記  .

6.2.1

型定義部  =  [  ‘type’  型定義  ‘:’  {  型定義  ‘;’  }  ]  .

6.4.1

型表記  =  型名  |  書下し型  .

6.4.1

型名  =  識別子  .

6.4.3.3

可変部  =  ‘case’  可変要素選択子  ‘of’  可変要素  {  ‘;’  可変要素  }  .

6.4.3.3

可変要素  =  選択定数並び  ‘:’  ‘(’  フィールド並び  ‘)’  .

6.4.3.3

可変要素選択子  =  [  タグフィールド  ‘:’  ]  タグ型  .

6.6.3.1

仮引数区域  >  値引数仕様  |  変数引数仕様  |  手続き引数仕様  |  関数引数仕様  .

6.6.3.7.1.

仮引数区域  >  整合配列引数仕様  .

6.6.3.1

仮引数並び  =  ‘(’  仮引数区域  {  ‘;’  仮引数区域  }  ‘)’  .

6.7.2.1

関係演算子  =  ‘=’  |  ‘<>’  |  ‘<’  |  ‘>’  |  ‘<=’  |  ‘>=’  |  ‘in’  .

6.6.2

関数宣言  =  関数頭部  ‘;’  指令

|

    関数標示  ‘;’  関数ブロック

|

  関数頭部  ‘;’  関数ブロック  .

6.6.2

関数頭部  =  ‘function’  識別子  [  仮引数並び  ]  ‘:’  結果型  .

6.6.3.1

関数引数仕様  =  関数頭部  .

6.6.2

関数標示  =  ‘function’  関数名  .

6.6.2

関数ブロック  =  ブロック  .

6.6.2

関数名  =  識別子  .


51

X 3008-1994 (ISO/IEC 7185: 1990)

6.7.3

関数呼出し  =  関数名  [  実引数並び  ]  .

6.4.3.4

基底型  =  順序型  .

6.8.2.1

空文  =  .

6.8.3.6

繰返し文  =  repeat 文  |  while 文  |  for 文  .

6.6.2

結果型  =  単純型名  |  ポインタ型名  .

6.6.3.7.1

限界名  =  識別子  .

6.7.1

元表記  =  式  [  ‘. .’  式  ]  .

6.7.1

項  =  因子  {  乗除演算子  因子  }  .

6.4.3.1

構造型  =  書下し構造型  |  構造型名  .

6.4.1

構造型名  =  型名  .

6.8.3.1

構造文  =  複合文  |  条件文  |  繰返し文  |  with 文  .

6.4.3.3

固定部  =  レコード要素  {  ‘;’  レコード要素  }  .

6.7.1

式  =  単純式  [  関係演算子  単純式  ]  .

6.1.3

識別子  =  英字  {  英字  |  数字  }  .

6.4.2.3

識別子並び  =  識別子  {  ‘,’  識別子  }  .

6.1.5

指数  =  [  符号  ]  数字列  .

6.2.1

実行部  =  複合文  .

6.4.2.1

実数型名  =  型名  .

6.7.3

実引数  =  式  |  変数アクセス  |  手続き名  |  関数名  .

6.7.3

実引数並び  =  ‘(’  実引数  {  ‘,

’  実引数  }  ‘)’

6.4.3.4

集合型  =  ‘set’  ‘of’  基底型  .

6.7.1

集合構成子  =  ‘[’  [  元表記  {  ‘,

’  元表記  }  ]  ‘]’  .

6.8.3.9

終値  =  式  .

6.4.2.1

順序型  =  書下し順序型  |  順序型名  .

6.4.2.1

順序型名  =  型名  .

6.5.2

純変数  =  変数名  .

6.8.3.3

条件文  =  if 文  |  case 文  .

6.7.2.1

乗除演算子  =  ‘*’  |  ‘/’  |  ‘div’  |  ‘mod’  |  ‘and’  .

6.1.5

小数部  =  数字列  .

6.8.3.9

初期値  =  式.

6.1.4

指令  =  英字  {  英字  |  数字  }  .

6.1.1

数字  =  ‘0’  |  ‘1’  |  ‘2’  |  ‘3’  |  ‘4’

|

  ‘5’  |  ‘6’  |  ‘7’  |  ‘8’  |  ‘9’  .

6.1.5

数字列  =  数字  {  数字  }  .

6.8.3.9

制御変数  =  純変数  .

6.6.3.7.1

整合配列形式  =  詰めあり整合配列形式  |  詰めなし整合配列形式  .

6.6.3.7.1

整合配列引数仕様  =  値整合配列仕様  |  変数整合配列仕様  .

6.4.3.2

成分型  =  型表記  .

6.5.3.1

成分変数  =  添字付き変数  |  フィールド表記  .

6.8.3.5

選択肢  =  選択定数並び  ‘:’  文  .


52

X 3008-1994 (ISO/IEC 7185: 1990)

6.8.3.5

選択式  =  式  .

6.4.3.3

選択定数  =  定数  .

6.4.3.3

選択定数並び  =  選択定数  {  ‘,’  選択定数  }  .

6.4.3.2

添字型  =  順序型  .

6.6.3.7.1

添字型仕様  =  識別子  ‘. .’  識別子  ‘:’  順序型名  .

6.5.3.2

添字式  =  式  .

6.5.3.2

添字付き変数  =  配列変数  ‘[’  添字式  {  ‘,’  添字式  }  ‘]’  .

6.8.2.2

代入文  =  (変数アクセス  |  関数名  )  ‘:=’  式  .

6.4.3.3

タグ型  =  順序型名  .

6.4.3.3

タグフィールド  =  識別子  .

6.4.2.1

単純型  =  順序型  |  実数型名  .

6.4.1

単純型名  =  型名  .

6.7.1

単純式  =  [  符号  ]  項  {  加減演算子  項  }  .

6.8.2.1

単純文  =  空文  |  代入文  |  手続き呼出し文  |  goto 文  .

6.6.3.7.1

詰めあり整合配列形式  =  ‘packed’  ‘array’  ‘[’  添字型仕様  ‘]’  ‘of’  型名  .

6.4.3.1

詰めなし構造型  =  配列型  |  レコード型  |  集合型  |  ファイル型  .

6.6.3.7.1

詰めなし整合配列形式  =  ‘array’  ‘[’  添字型仕様  {  ‘;’  添字型仕様  }  ‘]’

‘of’

(  型名  |  整合配列形式  )  .

6.3

定数  =  [  符号  ]  (  符号なし数  |  定数名  )

|

  文字列  .

6.3

定数定義  =  識別子  ‘=’  定数  .

6.2.1

定数定義部  =  [  ‘const'  定数定義  ‘;’  {  定数定義  ‘;’  }  ].

6.3

定数名  =  識別子  .

6.2.1

手続き関数宣言部  =  {  (  手続き宣言  |  関数宣言  )  ‘;’  }  .

6.6.1

手続き宣言  =  手続き頭部  ‘;’  指令

|

  手続き標示  ‘;’  手続きブロック

|

  手続き頭部  ‘;’  手続きブロック  .

6.6.1

手続き頭部  =  ‘procedure’  識別子  [  仮引数並び  ]  .

6.6.3.1

手続き引数仕様  =  手続き頭部  .

6.6.1

手続き標示  =  ‘procedure’  手続き名  .

6.6.1

手続きブロック  =  ブロック  .

6.6.1

手続き名  =  識別子  .

6.8.2.3

手続き呼出し文  =  手続き名  (  [  実引数並び  ]

|

  read 引数並び  |  readln 引数並び

|

  write 引数並び  |  writeln 引数並び  )  .

6.1.2

特殊記号  =  ‘+’  |  ‘−’  |  ‘*’  |  ‘/’  |  ‘=’  |  ‘<’  |  ‘>’  |  ‘  [’

          |    ‘]  ’  |  ‘.’  |  ‘,

’  |  ‘:’  |  ‘;’  |  ‘↑’  |  ‘  (’  |  ‘)  ’

          |  ‘<>’  |  ‘<=’  |  ‘>=’  |  ‘: =’  |  ‘. .’  |  予約語  .

6.4.3.2

配列型  =  ‘array’  ‘[’  添字型  {  ‘,’  添字型  }  ‘]’  ‘of’  成分型  .

6.5.3.2

配列変数  =  変数アクセス  .


53

X 3008-1994 (ISO/IEC 7185: 1990)

6.5.5

バッファ変数  =  ファイル変数  ‘↑’  .

6.4.4

被指示型  =  型名  .

6.5.4

被指示変数  =  ポインタ変数  ‘↑’  .

6.4.3.5

ファイル型  =  ‘file’  ‘of’  成分型  .

6.5.5

ファイル変数  =  変数アクセス  .

6.5.3.3

フィールド指定部  =  フィールド名  .

6.4.3.3

フィールド並び  =  [  (  固定部  [  ‘;’  可変部  ]  |  可変部  )  [  ‘;’  ]    ]  .

6.5.3.3

フィールド表記  =  レコード変数  ‘.’  フィールド指定部

|

  フィールド表記名  .

6.8.3.10

フィールド表記名  =  識別子  .

6.4.3.3

フィールド名  =  識別子  .

6.8.3.2

複合文  =  ‘begin’  文並び  ‘end’  .

6.1.5

符号  =  ‘+’  |  ‘−’  .

6.1.5

符号付き実数  =  [  符号  ]  符号なし実数  .

6.1.5

符号付き数  =  符号付き整数  |  符号付き実数  .

6.1.5

符号付き整数  =  [  符号  ]  符号なし整数  .

6.1.5

符号なし実数  =  数字列  ‘.’  小数部  [  ‘e’  指数  ]

              |  数字列  ‘e’  指数  .

6.1.5

符号なし数  =  符号なし整数  |  符号なし実数  .

6.1.5

符号なし整数  =  数字列  .

6.7.1

符号なし定数  =  符号なし数  |  文字列  |  定数名  |  ‘nil’  .

6.4.2.4

部分範囲型  =  定数  ‘. .’  定数  .

6.10

プログラム  =  プログラム頭部  ‘;’  プログラムブロック  ‘.’  .

6.10

プログラム頭部  =  ‘program’  識別子  [  ‘(’  プログラム引数並び  ‘)’  ]  .

6.10

プログラム引数並び  =  識別子並び  .

6.10

プログラムブロック  =  ブロック  .

6.2.1

ブロック  =  ラベル宣言部  定数定義部  型定義部  変数宣言部  手続き関数宣言部  実

行部  .

6.8.1

文  =  [  ラベル  ‘:’  ]  (  単純文  |  構造文  )  .

6.8.3.1

文並び  =  文  {  ‘;’  文  }  .

6.5.1

変数アクセス  =  純変数  |  成分変数  |  被指示変数  |  バッファ変数  .

6.6.3.7.1

変数整合配列仕様  =  ‘var’  識別子並び  ‘:’  整合配列形式  .

6.5.1

変数宣言  =  識別子並び  ‘:’  型表記  .

6.2.1

変数宣言部  =  [  ‘var’  変数宣言  ‘;’  {  変数宣言  ‘;’  }  ]  .

6.6.3.1

変数引数仕様  =  ‘var’  識別子並び  ‘:’  型名  .

6.5.2

変数名  =  識別子  .

6.4.4

ポインタ型  =  書下しポインタ型  |  ポインタ型名  .

6.4.1

ポインタ型名  =  型名  .

6.5.4

ポインタ変数  =  変数アクセス  .

6.1.7

文字列  =  ‘’’  文字列要素  {  文字列要素  }  ‘’’  .


54

X 3008-1994 (ISO/IEC 7185: 1990)

6.1.7

文字列要素  =  アポストロフィ表記  |  文字列用文字  .

6.1.7

文字列用文字  =  処理系定義の文字集合の文字の一つ  .

6.1.2

予約語  =  ‘and’  |  ‘array’  |  ‘begin’  |  ‘case’  |  ‘const’  |  ‘div’

|

  ‘do’  |  ‘downto’  |  ‘else’  |  ‘end’  |  ‘file’  |  ‘for’

|

  ‘function’  |  ‘goto’  |  ‘if’  |  ‘in’  |  ‘label’  |  ‘mod’

|

  ‘nil’  |  ‘not’  |  ‘of’  |  ‘or’  |  ‘packed’  |  ‘procedure’

|

  ‘program’  |  ‘record’  |  ‘repeat’  |  ‘set’  |  ‘then’

|

  ‘to’  |  ‘type’  |  ‘until’  |  ‘var’  |  ‘while’  |  ‘with’  .

6.1.6.

ラベル  =  数字列  .

6.2.1

ラベル宣言部  =  [  ‘label’  ラベル  {  ‘,’  ラベル  }  ‘;’  ].

6.4.3.3

レコード型  =  ‘record’  フィールド並び  ‘end’  .

6.5.3.3

レコード変数  =  変数アクセス  .

6.8.3.10

レコード変数並び  =  レコード変数  {  ‘,’  レコード変数  }  .

6.4.3.3

レコード要素  =  識別子並び  ‘:’  型表記  .

6.4.2.3

列挙型  =  ‘(’  識別子並び  ‘)’  .

6.7.2.3

論理式  =  式  .

6.8.3.5 case

文  =  ‘case’  選択式  ‘of’  選択肢  {  ‘;’  選択肢  }    [  ‘;’  ]    ‘end’  .

6.8.3.4 else

部=  ‘else’文.

6.8.3.9 for

文  =  ‘for’  制御変数  ‘: =’  初期値    (  ‘to’  |  ‘downto’  )  終値  ‘do’

文  .

6.8.2.4 goto

文  =  ‘goto’  ラベル  .

6.8.3.4 if

文  =  ‘if’  論理式  ‘then’  文  [  else 部  ]  .

6.9.1 read

引数並び  =  ‘(’  [  ファイル変数  ‘,’  ]

変数アクセス  {  ‘,’  変数アクセス  }  ‘)’  .

6.9.2 readln

引数並び  =  [  ‘(’  (  ファイル変数  |  変数アクセス  )

{

  ‘,’  変数アクセス  }  ‘)’  ]  .

6.8.3.7 repeat

文  =  ‘repeat’  文並び  ‘until’  論理式  .

6.8.3.8 while

文  =  ‘while’  論理式  ‘do’  文  .

6.8.3.10 with

文  =  ‘with’  レコード変数並び  ‘do’  文  .

6.9.3 write

引数  =  式  [  ‘:’  式  [  ‘:’  式  ]  ]  .

6.9.3 write

引数並び  =  ‘

(’  [  ファイル変数  ‘,’  ]  write 引数  {  ‘,’  write 引数  }

‘)’  .

6.9.4 writeln

引数並び  =  [  ‘

(’  (  ファイル変数  |  write 引数  )

{

  ‘,’  write 引数  }  ‘)’  ]  .


55

X 3008-1994 (ISO/IEC 7185: 1990)

附属書 B(参考)  索引

アクセス

6.5.1 6.5.3.1

6.5.3.3

6.5.5

6.6.3.3

6.6.3.7.2

6.6.3.7.3

6.6.5.2

6.8.2.2

6.8.2.3

6.8.3.10

6.9.1

6.9.2

6.9.3

6.9.4

6.10

誤り

1.2

3.1

5.1

6.4.6

6.5.3.3

6.5.4

6.5.5

6.6.3.8

6.6.5.2

6.6.5.3

6.6.5.4

6.6.6.2

6.6.6.3

6.6.6.4

6.6.6.5

6.7.1

6.7.2.2

6.7.3

6.8.3.5

6.9.1

6.9.3

6.9.3.1

6.9.4

6.9.5

6.10

因子

6.6.3.7.1

6.6.5.3

6.7.1

6.7.2.1

演算子

6.7.1

6.7.2

6.7.2.1

6.7.2.2

6.7.2.4

6.7.2.5

オペランド

6.7.1

6.7.2.1

6.7.2.2

6.7.2.3

6.7.2.4

6.7.2.5

型名

6.2.2.9

6.2.2.11

6.4.1

6.4.2.1

6.4.4

6.6.3.1

6.6.3.2

6.6.3.3

6.6.3.6

6.6.3.7.1

6.6.3.8

6.10

可変要素

6.4.3.3

6.5.3.3

6.6.5.3

仮引数

6.2.3.2

6.6.1

6.6.2

6.6.3.1

6.6.3.2

6.6.3.3

6.6.3.4

6.6.3.5

6.6.3.6

6.6.3.7.1

6.6.3.7.2

6.6.3.7.3

6.7.3

6.8.2.3

仮引数並び

6.6.1

6.6.2

6.6.3.1

6.6.3.4

6.6.3.5

6.6.3.6

6.6.3.7.1

関数

6.2.3.2

6.2.3.3

6.4.3.5

6.6

6.6.2

6.6.3.5

6.6.6.2

6.6.6.3

6.6.6.4

6.6.6.5

6.7.2.2

6.7.3

6.9.3.3

6.9.3.4.1

6.9.3.4.2

関数宣言

6.1.4

6.2.1

6.6

6.6.2

6.7.3

関数ブロック

6.1.4

6.2.3.2

6.2.3.3

6.6.2

6.6.3.1

6.8.2.2

関数名

6.2.3.1

6.2.3.2

6.2.3.3

6.6.2

6.6.3.1

6.6.3.5

6.7.3

6.8.2.2

関数呼出し

6.2.3.4

6.6.3.7.2

6.7.1

6.7.3

基底型

6.4.3.4

6.4.5

6.4.6

6.7.1

結果

6.2.3.2

6.2.3.3

6.2.3.5

6.6.2

6.6.6.2

6.6.6.3

6.6.6.4

6.7.2.2

6.7.2.4

6.7.2.5

6.7.3

6.8.2.2

6.4.6

6.7.1

6.7.2.5

構造型

6.4.3.1

6.4.3.5

6.5.1

6.8.2.2

参照中

6.5.3.1

6.5.3.3

6.5.4

6.5.5

6.6.3.3

6.6.3.7.2

6.6.3.7.3

6.6.5.2

6.6.5.4

6.8.2.2

6.8.3.10

6.9.1

6.9.2

6.9.3

6.9.4

6.5.3.2

6.6.3.2

6.6.3.7.2

6.6.5.2

6.6.5.3

6.6.5.4

6.6.6.2

6.6.6.3

6.6.6.4

6.6.6.5

6.7.1

6.7.2.3

6.7.3

6.8.2.2

6.8.3.5

6.8.3.9

6.9.3

6.9.3.1

識別子

4.

6.1.3

6.2.2.1

6.2.2.5

6.2.2.7

6.2.2.8

6.2.2.9

6.2.2.10

6.2.2.11

6.3

6.4.1

6.4.2.3

6.4.3.3

6.5.1

6.5.2

6.6.1

6.6.2

6.6.3.1

6.6.3.7.1

6.6.3.7.2

6.8.3.9

6.8.3.10

6.10

識別子並び

6.4.2.3

6.4.3.3

6.5.1

6.6.3.1

6.6.3.7.1

6.6.3.7.3

6.10

字句

4.

6.1

6.1.1

6.1.8

6.1.9

実数型

6.1.5

6.3

6.4.2.2

6.4.6

6.6.6.2

6.6.6.3

6.7.2.2

6.7.2.5

6.9.1

6.9.3.1

6.9.3.4

実引数

6.6.3.2

6.6.3.3

6.6.3.4

6.6.3.5

6.6.3.7.1

6.6.3.7.2

6.6.3.7.3

6.6.5.3

6.7.3

6.8.2.3

6.8.3.9


56

X 3008-1994 (ISO/IEC 7185: 1990)

実引数並び

6.6.6.5

6.7.3

6.8.2.3

6.9.5

集合型

6.4.3.1

6.4.3.4

6.7.1

6.7.2.5

順序型

6.4.2.1

6.4.2.2

6.4.2.3

6.4.2.4

6.4.3.2

6.4.3.3

6.4.3.4

6.6.6.4

6.7.1

6.7.2.5

6.8.3.5

6.8.3.9

純変数

6.5.1

6.5.2

6.8.3.9

処理系依存

3.4

5.1

5.2

6.4.3.5

6.5.3.2

6.7.1

6.7.2.1

6.7.3

6.8.2.2

6.8.2.3

6.9.1

6.9.5

6.10

処理系定義

3.1

3.3

5.1

5.2

6.1.7

6.1.9

6.4.2.2

6.4.3.5

6.6.5.2

6.7.2.2

6.9.2

6.9.3

6.9.3.1

6.9.3.4.1

6.9.3.5

6.9.5

6.10

指令

6.1.4

6.6.1

6.6.2

整合配列形式

6.6.3.6

6.6.3.7.1

6.6.3.8

整数型

6.1.5

6.3

6.4.2.2

6.4.6

6.6.6.2

6.6.6.3

6.6.6.4

6.6.6.5

6.7.2.2

6.7.2.5

6.9.1

6.9.3.1

6.9.3.3

成分

6.1.7

6.4.3.1

6.4.3.2

6.4.3.3

6.4.3.5

6.4.5

6.5.1

6.5.3.1

6.5.3.2

6.5.3.3

6.6.2

6.6.3.3

6.6.3.6

6.6.3.7.3

6.6.5.2

6.6.6.5

6.8.2.2

6.8.3.10

6.9.1

6.9.3.6

6.9.4

6.9.5

成分型

6.4.3.2

6.4.3.5

6.4.6

6.5.5

6.6.3.2

6.6.3.7.1

6.6.3.8

選択定数

6.4.3.3

6.6.5.3

6.8.3.5

全面的不定

6.2.3.5

6.5.3.3

6.6.5.2

6.6.5.3

6.8.2.2

6.9.1

6.9.4

6.9.5

添字型

6.4.3.2

6.5.3.2

6.6.3.7.1

6.6.3.8

添字付き変数

6.5.3.1

6.5.3.2

6.6.3.7.2

対応する

4.

6.1.4

6.1.7

6.1.9

6.2.3.2

6.2.3.3

6.4.1

6.4.3.3

6.6.3.1

6.6.3.3

6.6.3.6

6.6.3.7.1

6.6.3.7.2

6.6.3.7.3

6.6.3.8

6.6.4

6.6.5.2

6.7.2.2

6.7.3

6.8.2.3

代入可能

6.4.6

6.5.3.2

6.6.3.2

6.6.5.2

6.6.5.4

6.8.2.2

6.8.3.9

6.9.1

代入文

6.2.3.3

6.6.2

6.6.5.3

6.8.2.1

6.8.2.2

6.8.3.9

定義位置

6.2.1

6.2.2.1

6.2.2.2

6.2.2.3

6.2.2.4

6.2.2.5

6.2.2.7

6.2.2.8

6.2.2.9

6.2.2.10

6.2.2.11

6.2.3.1

6.2.3.2

6.3

6.4.1

6.4.2.3

6.4.3.3

6.5.1

6.5.3.3

6.6.1

6.6.2

6.6.3.1

6.6.3.4

6.6.3.5

6.6.3.7.1

6.8.3.10

6.10

定数

6.3

6.4.2.4

6.4.3.3

6.6.2

6.6.3.7.1

適合する

6.4.3.3

6.4.4

6.4.5

6.4.6

6.4.7

6.6.3.8

6.7.2.5

6.8.3.9

6.9.1

テキストファイル

6.4.3.5

6.5.5

6.6.6.5

6.9.1

6.9.2

6.9.3

6.9.4

6.9.5

6.10

手続き

6.2.3.2

6.2.3.3

6.4.4

6.5.4

6.6

6.6.1

6.6.3.4

6.6.3.7.2

6.8.2.3

6.8.3.9

6.9.1

6.9.2

6.9.3

6.9.4

6.9.5

6.10

手続き宣言

6.1.4

6.2.1

6.6

6.6.1

6.8.2.3

手続きブロック

6.1.4

6.2.3.2

6.2.3.3

6.6.1

6.6.3.1

6.8.2.3

手続き名

6.2.3.1

6.2.3.2

6.2.3.3

6.6.1

6.6.3.1

6.6.3.4

6.7.3

6.8.2.3

手続き呼出し文

6.2.3.4

6.8.2.1

6.8.2.3

6.8.3.9


57

X 3008-1994 (ISO/IEC 7185: 1990)

同形

6.6.3.4

6.6.3.5

6.6.3.6

配列型

6.4.3.1

6.4.3.2

6.5.3.2

6.6.3.7.1

6.6.3.8

バッファ変数

6.5.1

6.5.5

6.6.5.2

6.9.1

6.9.5

6.10

引数

6.6.1

6.6.3.1

6.6.3.2

6.6.3.3

6.6.3.4

6.6.3.5

6.6.3.6

6.6.3.7.1

6.6.3.7.2

6.6.3.7.3

6.6.5.2

6.6.6.2

6.6.6.5

6.8.3.9

6.9.1

6.9.2

6.9.3

6.9.3.5

6.9.4

6.10

ファイル型

6.4.3.1

6.4.3.5

6.4.6

6.5.5

6.6.3.2

6.10

ファイル変数

6.5.5

6.6.5.2

6.6.6.5

6.9.1

6.9.2

6.9.3

6.9.4

フィールド

6.4.3.3

6.5.3.3

6.6.3.3

フィールド表記

6.2.2.6

6.5.3.1

6.5.3.3

フィールド名

6.4.3.3

6.5.3.3

6.8.3.10

複合文

6.2.1

6.8.1

6.8.3.1

6.8.3.2

不定

6.5.3.3

6.5.4

6.6.5.2

6.6.5.3

6.6.5.4

6.6.6.5

6.7.1

6.7.3

6.8.2.2

6.8.3.9

6.9.3

6.9.4

部分範囲

6.4.2.4

6.4.5

6.7.1

6.9.1

プ ロ グ ラ ム 引 数 並

6.2.3.5

6.10

ブロック

6.2.1

6.2.3.1

6.2.3.2

6.2.3.3

6.2.3.4

6.3

6.4.1

6.4.2.3

6.5.1

6.6.1

6.6.2

6.6.3.1

6.6.3.2

6.6.3.3

6.6.3.4

6.6.3.5

6.6.3.7.1

6.6.3.7.2

6.6.3.7.3

6.7.3

6.8.1

6.8.2.3

6.8.3.9

6.10

6.2.1

6.6.5.4

6.8.1

6.8.2.1

6.8.3.1

6.8.3.4

6.8.3.5

6.8.3.6

6.8.3.8

6.8.3.9

6.8.3.10

閉区間

6.1.5

6.1.6

6.4.6

6.6.3.8

6.7.1

6.7.2.2

変数

6.2.3.2

6.2.3.3

6.4.1

6.4.3.5

6.4.4

6.5.1

6.5.3.1

6.5.3.2

6.5.3.3

6.5.4

6.5.5

6.6.3.1

6.6.3.2

6.6.3.3

6.6.3.7.1

6.6.3.7.2

6.6.3.7.3

6.6.5.2

6.6.5.3

6.6.5.4

6.7.1

6.8.2.2

6.8.3.9

6.8.3.10

6.9.1

6.10

変数アクセス

6.5.1

6.5.3.2

6.5.3.3

6.5.4

6.5.5

6.6.3.3

6.6.3.7.3

6.6.5.2

6.6.5.3

6.7.1

6.7.3

6.8.2.2

6.8.3.9

6.9.1

6.9.2

ポインタ型

6.4.1

6.4.4

6.5.4

6.6.5.3

6.7.2.5

文字

6.1.7

6.1.9

6.4.2.2

6.6.6.4

6.9.1

6.9.3.2

6.9.3.4.1

6.9.3.4.2

文字型

6.1.7

6.4.2.2

6.4.3.2

6.4.3.5

6.5.5

6.6.6.4

6.9.1

6.9.3.1

6.9.3.2

文字列

6.1.1

6.1.7

6.1.8

6.3

6.4.3.2

6.7.1

文字列型

6.1.7

6.4.3.2

6.4.5

6.4.6

6.6.3.7.1

6.7.2.5

6.9.3.1

6.9.3.6

有効範囲

6.2

6.2.2

6.2.2.2

6.2.2.4

6.2.2.5

6.2.2.6

6.2.2.8

予約語

6.1.2

6.1.3

6.1.4

ラベル

6.1.6

6.2.1

6.2.2.1

6.2.2.5

6.2.2.7

6.2.2.8

6.2.2.9

6.2.2.11

6.2.3.2

6.2.3.3

6.8.1

6.8.2.4

領域

6.2.1

6.2.2.2

6.2.2.3

6.2.2.4

6.2.2.5

6.2.2.6

6.2.2.7

6.2.2.8

6.2.2.10

6.2.3.1

6.2.3.2

6.3

6.4.1

6.4.2.3

6.4.3.3

6.5.1

6.5.3.3

6.6.1

6.6.2

6.6.3.1

6.6.3.7.1

6.8.3.10

6.10

レコード型

6.4.3.1

6.4.3.3

6.5.3.3

6.6.5.3

6.8.3.10


58

X 3008-1994 (ISO/IEC 7185: 1990)

レコード変数

6.4.3.3

6.5.3.3

6.8.3.10

列挙型

6.4.2.1

6.4.2.3

論理型

6.4.2.2

6.7.2.3

6.7.2.5

6.9.3.1

6.9.3.5

論理式

6.7.2.3

6.8.3.4

6.8.3.7

6.8.3.8

goto

6.8.1

6.8.2.1

6.8.2.4

6.8.3.1

6.8.3.7

6.8.3.9


59

X 3008-1994 (ISO/IEC 7185: 1990)

附属書 C(参考)  標準の識別子

abs

6.6.6.2 pack

6.6.5.4

arctan

6.6.6.2 page

6.9.5

Boolean

6.4.2.2 pred

6.6.6.4

char

6.4.2.2 put

6.6.5.2

chr

6.6.6.4 read

6.6.5.2, 6.9.1

cos

6.6.6.2 readln

6.9.2

dispose

6.6.5.3 real

6.4.2.2

eof

6.6.6.5 reset

6.6.5.2

eoln

6.6.6.5 rewrite

6.6.5.2

exp

6.6.6.2 round

6.6.6.3

false

6.4.2.2 sin

6.6.6.2

get

6.6.5.2 sqr

6.6.6.2

input

6.10 sqrt

6.6.6.2

integer

6.4.2.2 succ

6.6.6.4

ln

6.6.6.2 text

6.4.3.5

maxint

6.7.2.2 true

6.4.2.2

new

6.6.5.3 trunc

6.6.6.3

odd

6.6.6.5 unpack

6.6.5.4

ord

6.6.6.4 write

6.6.5.2, 6.9.3

output

6.10 writeln

6.9.4


60

X 3008-1994 (ISO/IEC 7185: 1990)

附属書 D(参考)  誤り

規格に準拠する処理系は,誤りをどう扱うかを述べた文書を用意しなければならない。そうした文書を

作成する際の便宜を図って,6.に規定するすべての誤りを再録する。

D.1

6.5.3.2

添字式を一つだけ直接に含む添字付き変数の場合,その添字式の値が配列型の添字型

に対して代入可能でなければ,誤りとする。

D.2

6.5.3.3

可変要素の成分が参照中又はアクセス中のときに,その可変要素が有効でなくなれ

ば,誤りとする。

D.3

6.5.4

被指示変数のポインタ変数が nil 値を表すならば,誤りとする。

D.4

6.5.4

被指示変数のポインタ変数が不定であれば,誤りとする。

D.5

6.5.4

被指示変数が参照中であるとき,その被指示変数を指示する値をそのポインタ型から

消去すれば,誤りとする。

D.6

6.5.5

バッファ変数 f↑が参照中であるとき,ファイル変数 f の値を変更すれば,誤りとす

る。

D.7

6.6.3.2

値引数について,順序型の式である実引数の値が対応する仮引数の型に対して代入可

能でなければ,誤りとする。

D.8

6.6.3.2

値引数について,集合型の式である実引数の値が対応する仮引数の型に対して代入可

能でなければ,誤りとする。

D.9

6.6.5.2

put, write, writeln

又は page を用いるとき,

ファイルのモードが Generation でなければ,

誤りとする。

D.10

6.6.5.2

put, write, writeln

又は page を用いるとき,ファイルが不定であれば,誤りとする。

D.11

6.6.5.2

put, write, writeln

又は page を用いるとき,ファイルの終わりとなっていなければ,誤

りとする。

D.12

6.6.5.2 put

を用いるとき,バッファ変数が不定であれば,誤りとする。

D.13

6.6.5.2 reset

を用いるとき,ファイルが不定であれば,誤りとする。

D.14

6.6.5.2 get

又は read を用いるとき,ファイルのモードが Inspection でなければ,誤りとする。

D.15

6.6.5.2 get

又は read を用いるとき,ファイルが不定であれば,誤りとする。

D.16

6.6.5.2 get

又は read を用いるとき,ファイルの終わりとなっていれば,誤りとする。

D.17

6.6.5.2 read

について,そのバッファ変数の値が変数アクセスの型に対して代入可能でなけれ

ば,誤りとする。

D.18

6.6.5.2 write

について,式の値がバッファ変数の型に対して代入可能でなければ,誤りとす

る。

D.19

6.6.5.3

new (p, c

1

, . . . , c

n

)

について,新しい変数の可変要素が指定された可変部のそれ以外の

可変要素が有効になれば,誤りとする。

D.20

6.6.5.3 dispose

(p)

について,指示値が new (p, c

1

, . . . , c

n

)

の形式を使って作成されたもので

あれば,誤りとする。

D.21

6.6.5.3

dispose (p, k

1

, . . . , k

m

)

について,変数が new (p, c

1

, . . ., c

n

)

の形式を使って作成された

ものでないか,又は が に等しくなければ,誤りとする。

D.22

6.6.5.3

dispose (p, k

1

, . . . , k

m

)

について,p の指示値で指示される変数の有効な可変要素が選


61

X 3008-1994 (ISO/IEC 7185: 1990)

択定数 k

1

, . . . , k

m

が表す値に対応する可変要素と違えば,誤りとする。

D.23

6.6.5.3 dispose

について,ポインタ型の引数が nil 値を表すならば,誤りとする。

D.24

6.6.5.3 dispose

について,ポインタ型の引数が不定であれば,誤りとする。

D.25

6.6.5.3

因子の,代入文の又は実引数の,変数アクセスの被指示変数が new の第 2 の形式を使

って作成された変数を表すならば,誤りとする。

D.26

6.6.5.4 pack

について,順序型の引数の値が詰めなし配列引数の添字型に対して代入可能でな

ければ,誤りとする。

D.27

6.6.5.4 pack

について,詰めなし配列の成分に不定であってしかもアクセスされるものが一つ

でもあれば,誤りとする。

D.28

6.6.5.4 pack

について,詰めなし配列の添字が詰めなし配列の添字型の上限を超えれば,誤り

とする。

D.29

6.6.5.4 unpack

について,順序型の引数の値が詰めなし配列引数の添字型に対して代入可能で

なければ,誤りとする。

D.30

6.6.5.4 unpack

について,詰めあり配列のいずれかの成分が不定であれば,誤りとする。

D.31

6.6.5.4 unpack

について,詰めなし配列の添字が詰めなし配列の添字型の上限を超えれば,誤

りとする。

D.32

6.6.6.2 sqr(x)

について,x の平方の値が存在しなければ,誤りとする。

D.33

6.6.6.2 ln(x)

について,x が 0 より大きくなければ,誤りとする。

D.34

6.6.6.2 sqrt(x)

について,x が負であれば誤りとする。

D.35

6.6.6.3 trunc(x)

について,x が正又は 0 の場合は,0≦x-trunc(x)<1 を満たす整数型の値が,負

の場合は,-1<x-trunc(x)≦0 を満たす整数型の値が,存在しなければ,誤りとする。

D.36

6.6.6.3 round(x)

について,x が正又は 0 の場合は,trunc (x+0.5) の値が,負の場合は,trunc

(x-0.5)

の値が,存在しなければ,誤りとする。

D.37

6.6.6.4 chr(x)

について,式 x の値に等しい順序数をもつ文字型の値が存在しなければ,誤り

とする。

D.38

6.6.6.4 succ(x)

について,式 x の順序数より 1 だけ大きい順序数をもつその順序型の値が存在

しなければ,誤りとする。

D.39

6.6.6.4 pred(x)

について,式 x の順序数より 1 だけ小さい順序数をもつその順序型の値が存在

しなければ,誤りとする。

D.40

6.6.6.5 eof(f)

が駆動されたとき,f が不定であれば,誤りとする。

D.41

6.6.6.5 eoln(f)

が駆動されたとき,f が不定であれば,誤りとする。

D.42

6.6.6.5 eoln(f)

が駆動されたとき,eof(f)が true であれば,誤りとする。

D.43

6.7.1

式に含まれる変数アクセスの表す変数が,その使用時に不定であれば,誤りとする。

D.44

6.7.2.2 x/y

の形をした項について,y が 0 であれば,誤りとする。

D.45

6.7.2.2

i div j

の形をした項について,j が 0 であれば,誤りとする。

D.46

6.7.2.2 i

mod

j

の形をした項について,j が 0 又は負であれば,誤りとする。

D.47

6.7.2.2

整数に対する演算又は関数が,整数計算に関する数学的規則に従うことができなけれ

ば,誤りとする。

D.48

6.7.3

関数の駆動の結果が,その駆動のアルゴリズムの完了時に不定であれば,誤りとする。

D.49

6.8.2.2

代入文について,順序型の式の値が変数又は関数名の型に対して代入可能でなけれ


62

X 3008-1994 (ISO/IEC 7185: 1990)

ば,誤りとする。

D.50

6.8.2.2

代入文について,集合型の式の値が変数の型に対して代入可能でなければ,誤りとす

る。

D.51

6.8.3.5 case

文について,case 文に入るとき,選択式の値がどの選択定数とも等しくなければ,

誤りとする。

D.52

6.8.3.9 for

文について,for 文の文が 1 回でも実行される場合,初期値の値が制御変数の型に

対して代入可能でなければ,誤りとする。

D.53

6.8.3.9 for

文について,for 文の文が 1 回でも実行される場合,終値の値が制御変数の型に対

して代入可能でなければ,誤りとする。

D.54

6.9.1

テキストファイルから整数を読み取る場合,先行する空白及び行末成分を読み捨てた

後,列の残りが符号付き整数の形をしていなければ,誤りとする。

D.55

6.9.1

テキストファイルから整数を読み取る場合,読み取った符号付き整数の値が変数アク

セスの型に対して代入可能でなければ,誤りとする。

D.56

6.9.1

テキストファイルから実数を読み取る場合,先行する空白及び行末成分を読み捨てた

後,列の残りが符号付き数の形をしていなければ,誤りとする。

D.57

6.9.1 read

を用いるとき,バッファ変数が不定であれば,誤りとする。

D.58

6.9.3.1

テキストファイルへ書き出す場合,TotalWidth 又は FracDigits の値が 1 未満であれば,

誤りとする。

D.59

6.10

変数に対するすべての動作,演算又は関数の実行は,変数がプログラム引数であって,

プログラム引数の結び付け方の結果として,定義どおり行えないとき,誤りとする。

D.60

6.6.3.8

整合配列引数について,実引数の配列型の添字型の最小値又は最大値が,整合配列形

式の直接に含む添字型仕様の順序型名の表す型の定める閉区間内になければ,誤りと

する。


63

X 3008-1994 (ISO/IEC 7185: 1990)

附属書 E(参考)  処理系定義の機能

規格に準拠する処理系は,処理系定義の機能に関する定義を示さなければならない。この定義を用意す

る際の便宜を図って,6.に規定するすべての処理系定義の機能を再録する。

E.1

6.1.7

標準の文字型の処理系定義の値を表す文字列用文字。

参考  コンパイルと実行を違う環境で行う処理系の場合,二つの文字集合及びそれらの間の対応関係

を定義しなければならないことがある。

E.2

6.1.9

基準表現の字句↑,[及び],代替表現の字句@,並びに注釈両端の文字{及び}を受け

付けるか否かは処理系定義とする。

E.3

6.4.2.2(b)

符号つき実数が表す処理系定義の実数の部分集合の処理系定義の近似の値。

参考  この部分集合の定義は,他の仕様文書を参照しておくのでもよい。

E.4

6.4.2.2(d)

文字型の値は,処理系定義の文字の集合の列挙とする。

E.5

6.4.2.2(d)

文字型のそれぞれの値の順序数は,処理系定義とする。

E.6

6.4.3.5

テキストファイル禁止文字の集合は,処理系定義とする。

E.7

6.6.5.2

ファイル操作 rewrite, put, reset  及び get をいつ実際に行うかは,処理系定義とする。

E.8

6.7.2.2

定数名 maxint  が表す値は,処理系定義とする。

E.9

6.7.2.2

実数に対する演算及び関数の値が数学的な結果を近似する精度は,処理系定義とす

る。

E.10

6.9.3.1

整数型に対する Totalwidth の基準値は,処理系定義とする。

E.11

6.9.3.1

実数型に対する Totalwidth の基準値は,処理系定義とする。

E.12

6.9.3.1

論理型に対する Totalwidth の基準値は,処理系定義とする。

E.13

6.9.3.4.1 ExpDigits

の値は,処理系定義とする。

E.14

6.9.3.4.1

実数型の値の出力に使う指数部表現文字(

‘e’又は‘E’

)は,処理系定義とする。

E.15

6.9.3.5

論理型の値の出力に使う‘True’及び‘False’の各英字の大文字・小文字の別は,処

理系定義とする。

E.16

6.9.5

生成モードのテキストファイルに手続き page を適用したときの効果は,処理系定義

とする。

E.17

6.10

ファイル型のプログラム引数の結び付け方は,処理系定義とする。

E.18

6.10 reset

又は rewrite を標準のファイル input 及び output に適用したときの効果は,処理

系定義とする。


64

X 3008-1994 (ISO/IEC 7185: 1990)

附属書 F(参考)  処理系依存の機能

規格に準拠する処理系は,処理系依存の機能についての文書も用意するとよい。この文書を用意する際

の便宜を図って,6.に規定するすべての処理系依存の機能を再録する。

F.1

6.4.3.5

テキストファイルにtに対して,t.L 又は t.R の成分にテキストファイル禁止文字に含

まれる文字を与えたときの効果は,処理系依存とする。

F.2

6.5.3.2

添字付き変数の中の添字式の評価及び配列変数のアクセスの順序は,処理系依存とす

る。

F.3

6.7.1

元表記の中の式の評価順序は,処理系依存とする。

F.4

6.7.1

集合構成子の中の元表記の評価順序は,処理系依存とする。

F.5

6.7.2.1

二項演算子のオペランドの評価順序は,処理系依存とする。

F.6

6.7.3

関数呼出しの実引数の評価,アクセス及び引数渡しの順序は,処理系依存とする。

F.7

6.8.2.2

代入文の変数へのアクセス及び式の評価の順序は,処理系依存とする。

F.8

6.8.2.3

手続き呼出し文の実引数の評価,アクセス及び引数渡しの順序は,処理系依存とする。

F.9

6.9.5

生成の間に手続き page を適用したテキストファイルを検査したときの効果は,処理

系依存とする。

F.10

6.10

プログラム引数が表すファイル型以外の変数のプログラム外部の実体への結び付け

方は,処理系依存とする。


65

X 3008-1994 (ISO/IEC 7185: 1990)

氏名

所属

(主査)

筧      捷  彦

(早稲田大学)

(幹事)

石  畑      清

(東京大学)

安  村  通  晃

(株式会社日立製作所)

(委員)

安  部  暁  一

(日本電気株式会社)

上  原  憲  二

(三菱電機株式会社)

落  合  正  雄

(株式会社東芝)

黒  田  幸  明

(日本電信電話株式会社)

津  田  一  生

(富士通静岡エンジニアリング株式会社)

西  風      一

(沖電気工業株式会社)

原  田      稔

(沖電気工業株式会社)

藤  丸  政  人

(日本電信電話株式会社)

古  川      彰

(株式会社東芝)

(事務局)

鳥  井      寛

(社団法人日本電子工業振興協会)

楡  木  武  久

(社団法人日本電子工業振興協会)

言語標準化調査研究委員会(1993 年度改名)

氏名

所属

(委員長)

中  田  育  男

(筑波大学)

(幹事)

土  居  範  久

(慶応義塾大学)

田  中      清

(日本電信電話株式会社)

黒  川  利  明

(日本アイ・ビー・エム株式会社)

(委員)

西  村  恕  彦

(東京農工大学)

原  田  賢  一

(慶応義塾大学)

筧      捷  彦

(早稲田大学)

湯  浅  太  一

(豊橋技術科学大学)

武  市  正  人

(東京大学)

田  中      茂

(富士通株式会社)

神  野  俊  昭

(株式会社日立製作所)

佐  伯  正  夫

(三菱電機株式会社)

落  合  正  雄

(株式会社東芝)

桜  井  弘  之

(日本電気株式会社)

原  田      稔

(沖電気工業株式会社)

栗  林  雅  人

(日本ユニシス株式会社)

一  本  有  三

(東芝情報システム株式会社)

村  田  賢  一

(情報処理振興事業協会)

大  櫛  陽  一

(東海大学)

中  島  一  郎

(通産産業省)

瀬戸屋  英  雄

(工業技術院)

(事務局)

楡  木  武  久

(社団法人日本電子工業振興協会)

内  山  誠  作

(社団法人日本電子工業振興協会)


66

X 3008-1994 (ISO/IEC 7185: 1990)

Pascal

言語 JIS 改正原案作成専門委員会

氏名

所属

(委員長)

筧      捷  彦

(早稲田大学)

(幹事)

石  畑      清

(明治大学)

(委員)

安  村  通  晃

(慶応義塾大学)

田  中      清

(日本電信電話株式会社)

落  合  正  雄

(株式会社東芝)

茂  木      強

(三菱電機株式会社)

高  橋  和  彦

(富士通静岡エンジニアリング株式会社)

神  野  俊  昭

(株式会社日立製作所)

安  部  暁  一

(日本電気株式会社)

原  田      稔

(沖電気工業株式会社)

瀬戸屋  英  雄

(工業技術院)

(事務局)

内  山  誠  作

(社団法人日本電子工業振興協会)