ホーム | ブログ | C++辞典 | サイトマップ | FAQ | 掲示板 | リンク集
メイン・メニュー
インデックス
プログラミング
その他
翻訳過程 の変更点


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

トップ   編集 差分 バックアップ 添付 複製 名前変更   一覧 単語検索   ヘルプ   最終更新のRSS
 ホーム | プロフィール | メール | ログイン | 管理
Copyright © 2005-2009 by TAKAGI Nobuhisa