Системное программное обеспечение: Основы трансляции. Карпушин А.Н - 30 стр.

UptoLike

32
элемента. Например, в таблицах идентификаторов может храниться следующая
информация:
1. Для переменных: имя, тип данных, область памяти;
2. Для констант: название (если имеется), значение, тип данных;
3. Для функций: имя, количество и типы формальных аргументов, тип воз-
вращаемого результата, адрес кода функции.
Не вся информация, хранимая в таблице идентификаторов, может заполня-
еться компилятором сразуон может несколько раз выполнять обращение к
данным в таблице идентификаторов на различных фазах компиляции. Напри-
мер, имена переменных могут быть выделены на фазе лексического анализа,
типы данных для переменныхна фазе синтаксического разбора, а область па-
мяти связывается с переменной только на фазе подготовки к генерации кода.
Вне зависимости от реализации компилятора принцип его работы с табли-
цей идентификаторов остается одним и тем жена различных фазах компиля-
ции компилятор вынужден многократно обращаться к таблице для поиска ин-
формации и записи новых данных. Как правило, каждый элемент в исходной
программе однозначно идентифицируется своим именем. Поэтому компилято-
ру приходится часто выполнять поиск необходимого элемента в таблице иден-
тификаторов по его имени, в то время как процесс заполнения таблицы выпол-
няется нечастоновые идентификаторы описываются в программе гораздо ре-
же, чем используются. Отсюда можно сделать вывод, что таблицы идентифика-
торов должны быть организованы таким образом, чтобы компилятор имел воз-
можность максимально быстрого поиска нужного ему элемента.
Назначение лексического анализатора (сканера)
Лексический анализатор (или сканер) – это часть компилятора, которая
читает исходную программу и выделяет в ее тексте лексемы входного языка. На
вход лексического анализатора поступает текст исходной программы, а выход-
ная информация передается для дальнейшей обработки компилятором на этапе
синтаксического анализа и разбора.
С теоретической точки зрения лексический анализатор не является обяза-
тельной частью компилятора. Все его функции могут выполняться на этапе
синтаксического разбора, поскольку полностью регламентированы синтакси-
сом входного языка. Однако существует несколько причин, по которым в со-
став практически всех компиляторов включают лексический анализ:
применение лексического анализатора упрощает работу с текстом исход-
ной программы на этапе синтаксического разбора и сокращает объем об-
рабатываемой информации, так как лексический анализатор структуриру-
ет поступающий на вход исходный текст программы и выкидывает всю
незначащую информацию;
для выделения в тексте и разбора лексем возможно применять простую,
эффективную и теоретически хорошо проработанную технику анализа, в
то время как на этапе синтаксического анализа конструкций исходного
языка используются достаточно сложные алгоритмы разбора;
сканер отделяет сложный по конструкции синтаксический анализатор от