0

私の質問は次のとおりです。コンパイラはどのフェーズでnameを実行しますかlookup。セマンティック分析を実行するときかもしれないと思いますが、コンパイラー分析について検索したとき、このフェーズ(字句、構文、セマンティック)のいずれでも名前の検索について言及していなかったので確認したいと思います。

4

3 に答える 3

2

一般的にはセマンティック分析ですが、C ++ではステージがすべて絡み合っているので、誰かが何か他のことを言っても理解できます。

于 2012-08-11T02:24:38.470 に答える
2

C ++では、名前が型名またはテンプレート名である場合のように、構文に影響を与える名前の検索は、通常、構文解析(解析)の一部として実行する必要があります。タイプ名またはテンプレート名とは無関係に解析できる範囲で、名前の検索は後で実行されるまで延期される場合がありますが、これは通常、実装の詳細です。

于 2012-08-11T02:26:42.860 に答える
0

C / C ++では、構文要素の種類(型、変数など)を知らなければ、構文要素の意味を決定できない場合があります。ほとんどのC++コンパイラは、生成された文法(yacc、bison)を使用して構文ツリーを構築するため、名前の検索はその後に行う必要があります。

次のことを考慮してください。

A * B;

これは、タイプA *の変数Bの宣言、または引数AとBに対して演算子*を呼び出すステートメントのいずれかです。

于 2012-08-11T02:55:44.220 に答える