C++ перевод кода и поиск имени

Мой вопрос: на каком этапе компилятор выполняет имя lookup, Я думаю, что это может быть, когда он выполняет семантический анализ, но я просто хочу убедиться, поскольку, когда я искал анализ компилятора, они не упоминали поиск имени ни на одном из этих этапов (лексический, синтаксический, семантический).

3 ответа

Решение

В C++ поиск имени обычно должен выполняться как часть синтаксического анализа (синтаксического анализа), как, например, когда имена являются именами типов или шаблонов, что влияет на синтаксис. В той степени, в которой вещи могут быть проанализированы независимо от названий типов или имен шаблонов, поиск имен может быть отложен на более поздний срок, но это, как правило, деталь реализации.

В целом это семантический анализ, но в C++ все этапы взаимосвязаны, поэтому понятно, что кто-то говорит что-то еще.

В C/C++ иногда невозможно определить семантическое значение синтаксического элемента, не зная его тип (тип, переменная и т. Д.). Большинство компиляторов C++ используют сгенерированную грамматику (yacc, bison) для построения дерева синтаксиса, поэтому поиск имени должен идти после этого.

учитывать следующее:

A * B;

это либо объявление переменной B типа A *, либо оператор, вызывающий оператор * для аргументов A и B.

Другие вопросы по тегам