Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
бАКАЛАВР_РАБОТА.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.13 Mб
Скачать

4 Программно-математическое обеспечение

4.1Лексический анализатор

4.1.1 Функции лексического анализатора

Лексический анализ – первая стадия анализа исходного текста программы, предназначенная для группировки терминальных символов входной цепочки в более крупные конструкции – лексемы. Этот процесс называется процессом лексемной декомпозиции. Лексический анализатор также называют сканером (лексером).

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

Атрибутами токена являются:

–внутреннее представление лексемы, например строка или целочисленная константа.Это необязательный атрибут, его наличие зависит от типа лексемы;

– номер строки занимаемой лексемой в исходном тексте программы. В дальнейшем этот номер используется для локализации пользователем обнаруженной ошибки.

Лексический анализатор также реализует дополнительные функции:

  1. контроль принадлежности терминального символа алфавиту входного языка с соответствующей диагностикой;

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

  3. согласование сообщений об ошибках путем указания номера строки, в которой была сгенерирована ошибка;

  4. контроль правильности лексемс соответствующей диагностикой;

  5. контроль выхода за границу вещественного и целого типа (underflow, overflow) при преобразовании числовых лексем во внутреннее представление.

Теоретически, задачи, решаемые сканером, можно возложить на синтаксический анализатор. Но такой подход нецелесообразен по следующим причинам:

  1. замена цепочек символов, представляющих элементарные конструкции языка, делает внутреннее представление программы более удобным для дальнейшего анализа синтаксическим анализатором, упрощает его реализацию. Последний манипулирует не отдельными символами, а законченными элементарными конструкциями, что облегчает их общее восприятие и дальнейший семантический анализ. Кроме этого, при построении лексем может осуществляться простейшая семантическая обработка. Например, преобразование и проверка числовых констант;

  2. уменьшается длина программы, поступающей в синтаксический анализатор, за счет устранения из нее несущественных для дальнейшего анализа пробелов, комментариев, игнорируемых символов. Уменьшение размера текста повышает производительность распознавателя на последующих стадиях анализа;

  3. один и тот же язык программирования может иметь различные внешние представления элементарных конструкций. Поэтому, наличие нескольких лексических анализаторов, порождающих на выходе одно и то же множество лексем, позволяет не переписывать синтаксический анализатор. Написать новый лексический анализатор намного проще, чем синтаксический;

  4. лексический анализатор использует более специализированные, по сравнению с синтаксическим анализатором, методы разбора. Следовательно, на одних и тех же цепочках и при выполнении разбора одних и тех же конструкций его производительность будет выше;

  5. блок лексического анализа естественным образом вписывается в иерархическую структуру языкового процессора, что тоже немаловажно при системном подходе к разработке языковых процессоров.