索引
こちら?に移転作業中です。

数字記号?

A?B?CDE?F?
G?H?I?J?K?L?
M?N?O?P?Q?R?
S?T?U?V?W?X?
Y?Z?

?????
?????
?????
?????
?????
?????
?????
? ? ?
?????
? 

翻訳過程

translation phase

翻訳過程におけるプログラム中の各構文要素は、それぞれの段階に応じて以下の優先順位となる。
  1. 必要に応じて、ソースファイルに書かれた物理的文字を、処理系が定めた方法によって基本ソース文字集合の文字に変換する(改行文字の変換など)。三つ組表示は対応する単一文字に置き換えられる。基本ソース文字集合にない拡張文字は対応する国際文字名に置き換える(拡張文字が直にソースファイルに書かれた場合と、その文字を表す国際文字名は同等に扱われる)。<br><br>
  2. 逆斜線の直後に改行文字が現れる箇所では、その逆斜線と改行文字が取り除かれ、続く物理的な行と連結することで論理的な行にまとめられる。その結果として国際文字名が生じた場合の動作は未定義である。空でないソースファイルが改行文字で終わっていない場合、または逆斜線に続く改行文字で終わっている場合の動作は未定義である。<br><br>
  3. ソースファイルを、前処理字句空白類文字の列に分解する。ソースファイル中の前処理字句や注釈は、途中で途切れることなく完結していなければならない。注釈は、それぞれ1個の空白文字に置き換えられる。改行文字はそのまま残されるが、改行文字以外の空白類文字からなる列を、単一の空白文字に置き換えるか、そのまま残されるかは処理系定義である。ソースファイル中の文字の列を前処理字句の列に分解する処理は、文脈に依存する(#includeにおける<の扱いなど)。<br><br>
  4. 前処理指令を実行し、マクロ呼出しが展開される。字句連結?の結果として、国際文字名が生じた場合の動作は未定義とする。前処理指令#includeによって取り込まれたヘッダまたはソースファイルに対して、それぞれ1.〜4.の段階の処理を再帰的?に行う。<br><br>
  5. 文字リテラル文字列リテラルの中の文字(ソース文字集合の文字、逆斜線表記、国際文字名)を、それぞれ実行文字集合の文字に変換する。<br><br>
  6. 隣接する文字列リテラルおよびワイド文字列リテラルを連結する(C99では、ワイド文字列リテラルに通常の文字列リテラルが連結できるが、C++では同種の文字列リテラル同士でなければ連結できない)。<br><br>
  7. この段階以降では、字句を区切っている空白類は意味を持たない。それぞれの前処理字句は字句に変換され、この結果得られた字句の列を、構文解析?および意味解析?して翻訳が行われる。<br><br>
  8. 翻訳済み翻訳単位?および具現化単位結合する。まず、それぞれの翻訳済み翻訳単位が調べられ、必要な具現化の一覧表が作られる。必要なテンプレートの定義が見つけ出される。このとき、それらの定義を含んだ翻訳単位のソースが必要となるかどうかは処理系定義である。必要な具現化がすべて行われ、具現化単位が作られる。<br><br>
  9. 外部オブジェクトおよび外部関数への参照を解決する。ライブラリの構成要素を結合することで、その翻訳単位の中で定義されていない関数やオブジェクトの外部参照が解決される。こうして翻訳された結果出力を集め、実行環境で実行するために必要となる情報も付加することで、実行形プログラムが生成される。
2005年10月07日(金) 18:13:32 Modified by takagi_nobuhisa




スマートフォン版で見る