Вопрос

В языке прямой ссылки, таком как c #, как компилятор справляется с этим?Каковы этапы, на которых работает компилятор?

Это было полезно?

Решение

Основное различие между разрешением прямой ссылки или нет заключается в использовании компилятор за один проход или многоходовой.Конечно, чтобы обрабатывать прямые ссылки, вы должны проверить определения символов и выполнить проверку типов ПОСЛЕ сгенерировав полное абстрактное синтаксическое дерево исходного кода, который вы компилируете.

Таким образом, нет проблем, когда вы впервые находите прямую ссылку, вы просто полагаетесь на то, что она будет определена позже (вы можете пометить ее как ожидающую в таблице символов), затем, когда вы найдете фактическое определение, вы уточняете объект symbol в таблице символов.

После вы можете ввести его или проверить, находятся ли некоторые символы все еще в ожидании (таким образом, реального определения нет, и вы можете вызвать семантическую ошибку)..

Другие советы

Он делает это, выполняя два прохода компиляции.Первый проход анализирует код и собирает все используемые идентификаторы.Второй проход разрешает все идентификаторы.

В языке с однопроходным компилятором, таком как Pascal, могут использоваться только обратные ссылки, поскольку тип идентификатора должен быть известен, прежде чем он может быть разрешен.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top