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