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

UptoLike

31
5. Лексический анализ.
Таблицы идентификаторов.
Лексические анализаторы
Прежде чем перейти к рассмотрению лексического анализа, необходимо
дать четкое определение того, что же такое лексема.
Лексема (лексическая единица языка) – это структурная единица языка,
которая состоит из элементарных символов языка и не содержит в своем соста-
ве других структурных единиц языка.
Лексемами языков естественного общения являются слова. Лексемами
языков программирования являются идентификаторы, константы, ключевые
слова языка, знаки операций и т. п. Состав возможных лексем каждого кон-
кретного языка программирования определяется синтаксисом этого языка.
Лексический анализ (ЛА)это первый этап процесса компиляции. На этом
этапе символы, составляющие исходную программу, группируются в отдель-
ные лексические элементы, называемые лексемами. Выбор конструкций, кото-
рые будут выделяться как отдельные лексемы, зависит от языка и от точки зре-
ния разработчиков компилятора.
Назначение и особенности построения таблиц идентификаторов
Проверка правильности семантики и генерация кода требуют знания ха-
рактеристик переменных, констант, функций и других элементов, встречаю-
щихся в программе на исходном языке. Все эти элементы в исходной програм-
ме, как правило, обозначаются идентификаторами. Выделение идентификато-
ров и других элементов исходной программы происходит на фазе лексического
анализа. Их характеристики определяются на фазах синтаксического разбора,
семантического анализа и подготовки к генерации кода. Состав возможных ха-
рактеристик и методы их определения зависят от семантики входного языка.
В любом случае компилятор должен иметь возможность хранить все най-
денные идентификаторы и связанные с ними характеристики в течение всего
процесса компиляции, чтобы иметь возможность использовать их на различных
фазах компиляции. Для этой цели, как было сказано выше, в компиляторах ис-
пользуются специальные хранилища данных, называемые таблицами символов
или таблицами идентификаторов.
Любая таблица идентификаторов состоит из набора полей, количество ко-
торых равно числу различных идентификаторов, найденных в исходной про-
грамме. Каждое поле содержит в себе полную информацию о данном элементе
таблицы. Компилятор может работать с одной или несколькими таблицам
идентификаторов, в зависимости от реализации компилятора. Например, можно
организовывать различные таблицы идентификаторов для различных модулей
исходной программы или для различных типов элементов входного языка.
Состав информации, хранимой в таблице идентификаторов для каждого
элемента исходной программы, зависит от семантики входного языка и типа