#
抽象機械の性質 及び 操作( 例えば ,$ )を,処理系定義と規定することがある。これらは,抽象機械
のパラメタとなる。個々の処理系は,これらの性質に対して,その特性 及び 動作を記した文書を提供しなければな
。
らない。これらの文書によって,その処理系に呼応した抽象機械が定まる( 以後,これを呼応抽象機械と呼ぶ。)
抽象機械の特質 及び 操作( 例えば ,関数の実引数評価の順序)を,処理系依存と規定することがある。この規格
では,可能な限り,その許容可能な一連の動作を示す。これらは,抽象機械に非決定性をもたらす。呼応抽象機械で
は,したがって,特定のプログラムと入力の組合せに対して複数の実行列が生じ うる。
また,操作( 例えば ,空ポインタの参照はずしの効果)によっては,未定義と規定することもある。
参考 この規格は,未定義の動作を含むプログラムの動作に対して,何らの要件をおかない。
適合する処理系は,適格プログラムを実行した結果,同じプログラムと入力の組合せに対する呼応抽象機械がもた
らす実行列の一つと,外から見て同じ動作をもたらさなければならない。しかし,その実行列が未定義の操作を含む
場合,この規格は,適合処理系がそのプログラムと入力の組合せをどのように実行するかについて(その最初の未定
義の操作が生じる前の操作に関しても),何らの要件も置かない。
抽象機械の外から見た動作とは,揮発性データに関する読み書き,及び ライブラリ入出力関数
呼出しの系列を
いう。
揮発性左辺値( )が指すオブジェクトの取出し ,オブジェクト一般の加工,ライブラリ入出力関数の呼出し ,
及び これらの操作を含んだ関数の呼出しを,副作用
!3-@ と呼ぶ。副作用は,実行環境の状態に変化をもたら
す。式の評価が副作用をもたらすこともある。実行列中の幾つかの点を特定して副作用完了点
!A 1 と呼
ぶ。副作用完了点では,その副作用完了点以前の操作すべての副作用が完了するまで,それ以後の操作の副作用が生
じてはならない。
関数の実行が始まると,その関数を呼び出した式の評価は,その関数が完了するまで休止する。
抽象機械がシグナルを受け取ってその処理を中断した場合,型 以外の型のオブジェクト
の値は,未規定とする。さらに,例外処理部が変更を加えた, 以外の型のオブジェクトの値
は,未定義とする。
ブロックに入るごとに,その自動記憶域期間( ) )をもったオブジェクトを具体的に生成する。こうしたオブ
ジェクトは,そのブロックの実行中,及び そのブロックの( 関数の呼出し 又は シグナルの受取りによる)実行保留
の間存在し,最近に代入された値を保持する。
適合する処理系は,少なくとも次の要件を満たさなければならない。
― 副作用完了点では,揮発性オブジェクトが安定であること。すなわち,それ以前の評価が完了し ,以後の
評価がまだ始まっていないこと。
― プログラム終了時点では,ファイルに書き出したデータが,そのプログラムの抽象機械による実行結果の
一つと一致していること。
― 対話装置の入出力では,プログラムが入力待ちに入る前に,それに対する入力要求が表示されること。対
話装置が何であるかは,処理系定義とする。
他の式の部分式となっていない式を完結式
-・1!! と呼ぶ。暗黙の関数呼出しを生じると規定する構文単
位は,ここでの式として扱い,完結式として扱う。
参考 "## では,文脈によって《式》以外の構文単位から生じた完結式を評価することがある( # 。
参照)
例えば ,# の《初期化子》の一つに次のものがある。
式並び
この構文単位は,その《式並び》を《実引数並び》としてコンストラクタ関数を呼び出す関数呼出しと
《初期化子》の一つに次のものもある。
なる。同様に,
% 初期化子節
この構文単位も, 個の《代入式》を実引数としてコンストラクタ関数を呼び出す関数呼出しとなること
がある。この場合も,その関数呼出しは,完結式として扱う。
参考 完結式の評価は,その完結式の字句的な部分となっていない部分式の評価を含むことがある。例えば ,
注 処理系は,拡張としてライブラリ入出力関数を追加してもよい。これらを追加したときは,その呼出しも 外から見える動作 として
扱うことが望ましい。
注 抽象機械での操作の実行順序がすべて規定されているわけでない点に注意する必要がある。ここでの制約は,実際に目的プログラムが
生成された場合の,その実行順序での副作用だけを対象とする。ライブラリ入出力関数の呼出しから戻った時点で,その呼出しが引き起
こす外部の動作( 例えば,入出力動作自身)がまだ完了していなくても,その副作用が完了したものとして扱うことにも注意する必要が
ある。
注 すなわち,関数の実行が互いに切り混ざることはない。
――――― [JIS X 3014 pdf 6] ―――――
(
7
2019 年
月 1 日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格(日本産業規格)」を「日本産業規格」に読み替えてください。
省略時実引数の式(( )の部分式は,その省略時実引数を定義している式の中ではなく,その関数呼出
しの式の中で作り出される。
参考 にだけ,通
演算子の評価順序の整理は,対象となる演算子が実際に結合律 又は 交換律を満たす場合
常の数学規則に従って行ってよい。例えば ,次のプログラム片を考えてみる。
&
'!(((!'
% ) *+,-. ) ) /&
この式は,現れている演算子の順位から正確に次のとおりに振る舞う。
% ) *+,-. ) ) / &
したがって,和 ) *+-,. に を加え,その結果に を加えたものを に代入する。あふれで例外を
発生し ,しかも 型で表せる値が 7 # である計算機に対して,処理系は,この式を次の
9
いずれにも書き換えてはならない。
% ) ) *+,-/ &
% ) ) *+,-/ &
と の値が と 又は と である場合に,動作が違ってしまうからである。しかしながら,あ
ふれで例外を発生することがなく,あふれが生じても逆演算で元に戻せる計算機に対してなら,処理系は,
上に示した式をこれら 通りのいずれに書き換えても差し支えない。同じ結果が得られるからである。
完結式の評価完了時点は,それぞれ副作用完了点となる。
( もしあれば )その実引数の評価の直後が
関数( インライン関数であるか否かによらない。)の呼出しに対しては,
副作用完了点となる。実引数の評価は,その関数本体の式 又は 文の実行に先行する。返却値のコピーの後も副作用
完了点となる 。返却値のコピーは,その関数の外側のいかなる式の評価にも先行する。"## では,文脈によっ
て,その翻訳単位の中に関数呼出しの構文単位が現れていない場合にも,関数呼出しの評価を行うことがある。
例 < 式の評価では, 個以上の割付け関数 及び コンストラクタ関数を呼び出すことがある( # 参照)
。
関数呼出しの構文単位が現れていない文脈で,変換関数( )を呼び出すこともある。
関数呼出しでは,その関数を呼び出した構文が何であれ ,関数に入る時点 及び 関数から出る時点が副作用完了点と
なる。
次の式( #,##,#( 及び # 参照)を考える。
00
11
2 3
現れている組込み演算子の意味に従って評価を行う場合,それぞれ第 演算対象の評価の直後が副作用完了点となる。
告知 この規格で規定するプログラム言語 "## は,次の本の
B 章 B ' に基づく。/ ! 1
+ "## 8 !3 3, &333-C! %! "1, /4) - - -,
1 &+D+E
3 に基づいている。F 3 B
この本は,更に次の本の付録 + " 1 8 , -
G, , /4) -- -, 1 &+D+E
この規格のライブラリ条項は,次の本に基づく。EHE + * /33 "## 8%, -G,
/4) -- -, 1 E HE E
これらの書籍の著作権は,保護されている。
注 多重定義してある演算子は,結合律も交換律も満たさないものとして扱う。
注 この 完結式評価完了時点 の副作用完了点の後で,一時オブジェクトに対するデストラクタ関数の呼出しが起きる。その順序は,通
常,一時オブジェクトが生成されたのと逆順となる( 参照)
。
注
関数からの戻り時点での副作用完了点は, では明示的に規定していない。完結式に対する副作用完了点と重複するから
である。しかし , では明確にしておく必要がある。 では,呼び出された関数がその実行を終了するのに,例外を送出するな
ど 複数の方法があるからである。
注 )が対象となる。その演算子が正当な文脈で多重定義を受け,利用者が定義した関数を表している場合,
ここでは,組込み演算子(
これらの式は,書かれた演算対象を実引数とする関数呼出しとなり,ここで示したような副作用完了点をもたない。
――――― [JIS X 3014 pdf 7] ―――――
)
字句要素 > と呼ぶ。 個のソー
プログラムの文字面を収めたものを,この規格では,ソースファイル !
スファイルを,その前処理指令 によって取り込んだ( ( 参照)ヘッダ( ) ) 及び 他のソースファ
イルも込みにして,翻訳単位 ! と呼ぶ。ただし ,条件付き取込み前処理指令( ( )によって省か
れた行は,除く。
参考 "## プログラムは,そのすべてを同時に翻訳する必要はない。
参考 それまでに翻訳した翻訳単位 及び 具現化単位は,個別に保存しておくこともできれば ,ライブラリと
してまとめて保存しておくこともできる。プログラムを構成する個々の翻訳単位は,例えば外部結合の識
別子をもつ関数の呼出し ,外部結合の識別子をもつオブジェクトの操作,データファイルの操作などを通
じて,相互に連絡する( # 参照)
。翻訳単位は,別々に翻訳して,後で実行可能なプログラムへと結合す
ることもできる( # 参照)
。
翻訳過程 翻訳過程における各構文規則の優先順位は,それぞれの段階に応じて次のとおりとする。
必要に応じて,処理系が定めた方法でソースファイルの物理的文字を基本ソース文字集合の文字に変換す
)を,対応する内部表現の単一文字に置き換
る( 行末表示は,改行文字に変換する。)。三つ組表示(
える。基本ソース文字集合( ( 処理系は,
)にない文字を,その文字を表す国際文字名に置き換える。
5555
拡張文字が直にソースファイルに現れた場合と,その拡張文字を指名する国際文字名(すなわち,4
という記法)がソースファイルに現れた場合とを同等に扱う限り,どんな内部表現を用いてもよい。)
逆斜線の直後に改行文字が現れている箇所それぞれで,その逆斜線と改行文字の組を取り除き,物理的な
行を論理的な行にまとめる。この結果として国際文字名がそこに生じた場合,その動作は,未定義とする。
空でないソースファイルが改行文字で終わっていない場合,その動作は,未定義とする。空でないソース
ファイルが逆斜線に続く改行文字で終わっている場合,その動作は,未定義とする。
ソースファイルを,前処理字句( ) 及び 空白類( 注釈を含む。)の列に分解する。ソースファイルは,
部分的な前処理字句 又は 部分的な注釈で終わってはならない 。それぞれの注釈を, 個の空白文字に
置き換える。改行文字は,そのまま残す。改行文字以外の空白類の空でない列をそのまま残すか 個の空
白文字に置き換えるかは,処理系定義とする。ソースファイルの文字の列を前処理字句の列に分解してい
く処理は,文脈に依存する。
例 前処理指令 での の扱いが参考になる。
前処理指令を実行し,マクロ呼出しを展開する。字句連結( ( )の結果として国際文字名の構文に合
致する文字の列が生じた場合,その動作は,未定義とする。前処理指令 の実行では,そこで指
示されたヘッダ 又は ソースファイルに対して,それぞれ, の段階の処理を再帰的に行う。
# 文字リテラル 及び 文字列リテラルの中の,ソース文字集合の文字,逆斜線表記,及び 国際文字名それぞ
れを,実行文字集合( 及び 参照)の文字に変換する。
( 隣り合う( 通常の)文字列リテラルを連結する。隣り合うワイド 文字列リテラルを連結する。
) この段階以降,字句を区切っている空白類は,意味をもたない。それぞれの前処理字句を字句に変換する
( ( 参照)。この結果得られた字句の列を,構文解析 及び 意味解析をして翻訳する。
参考 ( 翻訳前の )翻訳単位 及び 翻訳済みの翻訳単位を物理的なファイルとして
ソースファイル,
保持する必要はないし ,それぞれに 対 に対応する外部表現が必要なわけでもない。ここで
の規定は,概念上のものであって,具体的な実装を規定するものではない。
翻訳済み翻訳単位 及び 具現化単位 ! を結合する。
参考 これらの一部 又は 全部が,ライブラリの中にあることがある。
まず,それぞれの翻訳済み翻訳単位を調べ,必要な具現化の一覧表を作る。
参考 これには,明示的に要求されている具現化( ) )も含まれる。
必要なテンプレートの定義を見つけ出す。このとき,これらの定義を含んだ翻訳単位のソースも必要であ
るかど うかは,処理系定義とする。
参考 処理系によっては,ここでソースを必要としないで済ますように,翻訳済み翻訳単位に十分
な情報を組み込んでいる。
注 処理系は,まるでこれらの段階を順に踏んでいるかのごとく振る舞わなければならないが,実際には,いくつかの段階を一緒にまとめ
て行ってもよい。
注 《ヘッダ名》にその終止文字 又は がない場合など ,その終止文字列を必要とする複数文字からな
部分的な前処理字句は,例えば,
る字句がソースファイルの末尾に現れている場合に生じ うる。部分的な注釈は,閉じていない 注釈がソースファイルの末尾に現れて
いる場合に生じ うる。
――――― [JIS X 3014 pdf 8] ―――――
7
2019 年
月 1 日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格(日本産業規格)」を「日本産業規格」に読み替えてください。
必要な具現化すべてを行い,具現化単位を作り出す。
参考 これらは,翻訳済み翻訳単位と同等である。ただし ,具現化されていないテンプレートもテ
ンプレート定義も含んでいない。
* 外部オブジェクト 及び 外部関数への参照を解決する。ライブラリの構成要素を結合することで,その翻
訳の中に定義のない関数 及び オブジェクトの外部参照を解決する。こうして得られた翻訳出力を集め,実
行環境で実行するのに必要となる情報も添えて,実行形プログラムを作り出す。
文字集合 基本ソース文字集合%! ! ! の文字は,水平タブ ,垂直タブ ,改ページ文字 及
び 改行文字の四つの制御文字,空白文字,並びに 次に示す
個の図形文字の合計 文字とする。
$
6 " 7 # 8 9 : ; < = > ・ @ A B C D E F G H I 5 J K
. L + * M / - , N O
P Q R S T U 3 & ( 2 ! ) V ' W 0 1 X % 4 Y Z
国際文字名 0! は,他の文字を指名するために用いる。
進四つ組3
進数字 進数字 進数字 進数字
国際文字名3
4 進四つ組
4G 進四つ組 進四つ組
国際文字名 4GAAAAAAAA は,6 ! での短縮名が AAAAAAAA である文字を指名する。国際文字名 4
AAAA は,
6 ! での短縮名が ....AAAA である文字を指名する。国際文字名の 進値が . ,9
+. 未満 若し くは .
. O9 である場合,又は 国際文字名が指名する文字が基本ソース文字集合の文字である場合,プログラムは不適格
とする。
基本実行文字集合%! ・ ! 及び 基本実行ワイド 文字集合
%! ・ <3-
! は,それぞれ,基本ソース文字集合の文字すべて,警告文字・後退文字・復帰文字の三つの制御文字,及び す
べてゼロのビットからなる内部表現をもつナル文字 ( 基本実行ワイド 文字集合ではナルワイド 文字
<3- )を含む。それぞれの基本実行文字集合において,それぞれの文字は,非負の互いに異なる値を
もっていなければならない。基本ソース文字集合 及び 基本実行文字集合のそれぞれにおいて,上で掲げた表の
以
だけ大きくなければならない。実行文
降のそれぞれの数字に対応する文字の値は,それの直前にある文字の値より
字集合 ・ ! は,基本実行文字集合をその部分集合とする文字集合とする。実行ワイド 文字集合
・ <3- ! は,基本実行ワイド 文字集合をその部分集合とする文字集合とする。それぞれの実行
文字集合における文字の値は,処理系定義とする。それぞれの実行文字集合は,現地特性の文字を含んでいてもよい。
三つ組表示 他の処理に先立って,表 に示すとおりに,特定の 文字の列を 個の文字に置き換える。これ
を三つ組表示 1 !A と呼ぶ。
表 三つ組表示
三つ組 置換え 三つ組 置換え 三つ組 置換え
22% 22 S 22
22' 4 22 T 22
22Z W 22[ 1 22V X
例
22% 2222 22[22[ 2222
は,次に示すとおりに置き換わる。
ST 11 ST
三つ組表示は,表 に示したものだけとする。三つ組表示を開始する 2 以外の 2 は,置き換えない。
注 の部分文字集合の文字を意図してい
ここでの基本ソース文字集合の文字の字形表示は, 文字集合に対応する
る。しかし,ソースファイルの文字から基本ソース文字集合の文字への変換( 翻訳過程の第 段)は処理系定義となっているから,それ
ぞれの処理系は,基本ソース文字集合の文字がソースファイルの上でどのように表現されるかを文書で示さなければならない。
――――― [JIS X 3014 pdf 9] ―――――
*
前処理字句
前処理字句3
ヘッダ名
識別子
前処理数
文字リテラル
文字列リテラル
前処理記号
これらのいずれにも当てはまらない単独の非空白類文字
それぞれの前処理字句は,字句(( )に変換したとき,キーワード,識別子,リテラル,演算子 又は 区切り子の
いずれかになっていなければならない。
《前処理字句》は,
前処理字句は,翻訳過程の第 段における最小の字句要素とする。 ,識別子》《
《ヘッダ名》《 ,前処
《文字リテラル》,
理数》, 《前処理記号》 及び これらに合致しない単一の《非空白類文字》のいずれ
《文字列リテラル》,
かとする。文字 Z 又は Y が最後の分類に入る場合,その動作は,未定義とする。前処理字句は,空白類 <-!1
で区切られる。空白類は,注釈() ) 又は 空白類文字<-!1 ( 空白文字,水平タブ,改行文字,
( それが現れていないことも含め )
垂直タブ 及び 改ページ文字)とする。空白類は,第 段までの翻訳過程において,
前処理字句を分離する以上の働きをもつことがある( ( 参照)
。空白類は,ヘッダ名の一部として現れる場合,及び
文字リテラル 又は 文字列リテラルの引用符の中に現れる場合を除いて,前処理字句の部分となることがない。
ソース入力をある文字まで前処理字句に分割し終えた場合,次の前処理字句は,前処理字句のどれかに合致する最
長の文字の列とする。このとき,その先の字句解析が失敗するかど うかは考慮しない。
例 プログラム片 L8は, 個の前処理字句( 字句としては,浮動小数点リテラルにも整数リテラルにもなら
とに分割すれば,正当な式( 例えば,8
ない。)として扱う。これを L と 8 が ) L に書き換わるマクロで
あった場合)になる可能性があるにもかかわらず,そうはしない。同様に,プログラム片 L8L も,8 がマク
ロ名であるかど うかによらず, 個の前処理字句( 字句としても正当な浮動小数点リテラル )として扱う。
例 プログラム片 ))))) は, )) )) ) と分割する。これは, 及び が組込みの型であったとすると,
増加演算子に関する制約に違反した式となる。)) ) )) と分割すれば,正しい式となるが,そうはし
ない。
# 代替字句 幾つかの演算子 及び 区切り子に対して,代替字句 を設ける。
代替字句は,その綴り の違いを除いて,言語のすべての面で,正規字句と完全に同等に振る舞う。代替字句は,
表 に示すとおりとする。
表 代替字句
代替 正規 代替 正規 代替 正規
U 00 0%
U 1 1%
3 S 11 W%
3 T W [
U3 X [%
U3U3 0
( 字句
字句3
識別子
キーワード
リテラル
演算子
注 及び 予約語がある。二つ組( 文字の組)という呼称は,必ずしも適切とはいえない。実際,前
代替字句には,二つ組
処理字句の代替表現の一つに があるし ,正規字句のいくつかも 文字の組となっている。それにもかかわらず,予約語ではない代
替字句は,二つ組 と言い習わされている。
注 したがって, と とは,その 文字列化 値が相異なり,それぞれソース上での表現となる。しかし ,この違いを除けば,両者を
自在に置き換えることができる。
――――― [JIS X 3014 pdf 10] ―――――
次のページ PDF 11
JIS X 3014:2003の引用国際規格 ISO 一覧
- ISO/IEC 14882:2003(IDT)
JIS X 3014:2003の国際規格 ICS 分類一覧
- 35 : 情報技術.事務機械 > 35.060 : 情報技術に使用される言語
JIS X 3014:2003の関連規格と引用規格一覧
- 規格番号
- 規格名称
- JISX0001:1994
- 情報処理用語―基本用語
- JISX0002:1987
- 情報処理用語(算術演算及び論理演算)
- JISX0003:1989
- 情報処理用語(装置技術)
- JISX0004:2002
- 情報処理用語(データの構成)
- JISX0005:2002
- 情報処理用語(データの表現)
- JISX0006:1989
- 情報処理用語(データの準備及び取扱い)
- JISX0007:2001
- 情報処理用語―プログラミング
- JISX0008:2001
- 情報処理用語―セキュリティ
- JISX0009:1997
- 情報処理用語(データ通信)
- JISX0010:1987
- 情報処理用語(操作技法及び機能)
- JISX0011:1989
- 情報処理用語(処理装置)
- JISX0012:1990
- 情報処理用語(データ媒体,記憶装置及び関連装置)
- JISX0013:1998
- 情報処理用語(図形処理)
- JISX0014:1999
- 情報処理用語―信頼性,保守性及び可用性
- JISX0015:2002
- 情報処理用語(プログラム言語)
- JISX0016:1997
- 情報処理用語(情報理論)
- JISX0017:1997
- 情報処理用語(データベース)
- JISX0018:1989
- 情報処理用語(分散データ処理)
- JISX0019:1994
- 情報処理用語―アナログ計算
- JISX0020:1992
- 情報処理用語(システム開発)
- JISX0021:1987
- 情報処理用語(プロセスインタフェース)
- JISX0022:1989
- 情報処理用語(計算器)
- JISX0023:1995
- 情報処理用語(テキスト処理)
- JISX0024:1998
- 情報処理用語(計算機統合生産)
- JISX0025:1994
- 情報処理用語―ローカルエリアネットワーク
- JISX0026:1995
- 情報処理用語(開放型システム間相互接続)
- JISX0027:1995
- 情報処理用語(オフィスオートメーション)
- JISX0028:1999
- 情報処理用語―人工知能―基本概念及びエキスパートシステム
- JISX0031:1999
- 情報処理用語―人工知能―機械学習
- JISX0032:1999
- 情報処理用語―電子メール