2012-03-23 7 views
0

「C++に適したオブジェクト指向のプリプロセッサ」という論文を読んでいました。計算マクロと構文マクロは何ですか

"http://www.informatik.uni-bremen.de/st/lehre/Arte-fakt/Seminar/papers/17/An%20Object-Oriented%20preprocessor%20fit%20for%20C++.pdf"

これは、マクロの3つの異なる種類について説明します。

  1. テキストマクロ。 //ほぼ同じC前処理プロセッサ
  2. 計算マクロ//テキストは計算結果として置き換えられます
  3. 構文マクロ。 //テキストは、言語的に一貫した構造を表す構文ツリーに置き換えられます。

最後の2つのタイプのマクロについて詳しく説明してください。 インライン関数とテンプレートは計算マクロの例ですが、どういう意味ですか?

答えて

1

WillinkさんとMuchnickの論文は、このようなさまざまなマクロタイプを要約したいIを参照してください1966年からオリジナルCheathamの論文を見て:

  1. テキストマクロをスキャンし、構文解析の前にテキスト置換を行います。
  2. シンタックスマクロは、スキャンおよび解析中に処理されます。構文マクロを呼び出すと、マクロ呼び出しが別のASTで置き換えられます。
  3. 計算マクロは、スキャナとパーサーによってASTが構築された後のどの時点でも発生する可能性があります。重要なことは、この時点では、もはやテキストを処理するのではなく、代わりにASTのノードを操作することである。すなわち、既に意味情報が付加されている可能性のあるオブジェクトを扱っているということである。

とした後、それは次のようにそれを正しくコンパイルするために必要な意味情報で注釈が付けられている間、私はノーC++内部の専門家だが、私は関数呼び出しとインスタンス化テンプレートのインライン化を前に構文木を操作する程度であることを前提としていたいですそれらの両方は、スキャンや解析中にはまだ分かっていないもの(型情報など、何かがインライン展開されるのが良いかどうか)を知っていることを前提としています。

+0

返事をいただきありがとうございます。私は数日前に論文を読みました。 –

1

2.コンパイル時にいくつかの計算が実行され、実行時に実行される結果の命令は結果のみを含むことを意味するように思えます。私はインライン関数が特にこれを表しているとは思いませんが、テンプレートのメタプログラミングはまさにこれを行います。また、C++ 11ではconstexprです。

私は3もテンプレートの使用によって表現できると思います。テンプレートは構文ツリーを表し、それをインスタンス化するには、汎用構文ツリーを取り、パラメータ化された未知ビットを埋め込み、結果の構文ツリーを使用する必要があります。

関連する問題