Лексический анализ в дизайне компилятора с примером

Содержание:

Anonim

Что такое лексический анализ?

ЛЕКСИЧЕСКИЙ АНАЛИЗ - это самый первый этап проектирования компилятора. Лексер берет модифицированный исходный код, который написан в форме предложений. Другими словами, это помогает вам преобразовать последовательность символов в последовательность токенов. Лексический анализатор разбивает этот синтаксис на серию токенов. Он удаляет лишние пробелы или комментарии, написанные в исходном коде.

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

Пример

How Pleasant Is The Weather?

См. Этот пример; Здесь мы можем легко узнать, что есть пять слов, как приятно, погода, есть. Для нас это очень естественно, поскольку мы можем распознавать разделители, пробелы и знаки препинания.

 HowPl easantIs Th ewe ather?

Теперь посмотрим на этот пример, мы также можем прочитать это. Однако это займет некоторое время, потому что разделители помещены в нечетные места. Это не то, что приходит к вам немедленно.

В этом руководстве вы узнаете

  • Основные термины:
  • Архитектура лексического анализатора: как распознаются токены
  • Роли лексического анализатора
  • Лексические ошибки
  • Восстановление ошибок в лексическом анализаторе
  • Лексический анализатор против парсера
  • Зачем разделять лексический и синтаксический анализаторы?
  • Преимущества лексического анализа
  • Недостаток лексического анализа

Основные термины

Что за лексема?

Лексема - это последовательность символов, которые включены в исходную программу в соответствии с шаблоном соответствия токена. Это не что иное, как экземпляр токена.

Что за жетон?

Маркер - это последовательность символов, которая представляет собой единицу информации в исходной программе.

Что такое узор?

Шаблон - это описание, которое используется токеном. В случае ключевого слова, которое используется в качестве токена, шаблон представляет собой последовательность символов.

Архитектура лексического анализатора: как распознаются токены

Основная задача лексического анализа - считывать входные символы в коде и производить токены.

Лексический анализатор сканирует весь исходный код программы. Он идентифицирует каждый токен один за другим. Сканеры обычно реализуются для создания токенов только по запросу парсера. Вот как это работает -

  1. «Получить следующий токен» - это команда, отправляемая парсером лексическому анализатору.
  2. Получив эту команду, лексический анализатор сканирует ввод, пока не найдет следующий токен.
  3. Он возвращает токен в Parser.

Lexical Analyzer пропускает пробелы и комментарии при создании этих токенов. Если присутствует какая-либо ошибка, то лексический анализатор сопоставит эту ошибку с исходным файлом и номером строки.

Роли лексического анализатора

Лексический анализатор выполняет следующие задачи:

  • Помогает идентифицировать токен в таблице символов
  • Удаляет пробелы и комментарии из исходной программы
  • Сопоставляет сообщения об ошибках с исходной программой
  • Помогает расширить макрос, если он найден в исходной программе
  • Чтение вводимых символов из исходной программы

Пример лексического анализа, токены, нетокены

Рассмотрим следующий код, который загружается в Lexical Analyzer.

#include int maximum(int x, int y) {// This will compare 2 numbersif (x > y)return x;else {return y;}}

Примеры созданных токенов

Лексема Токен
int Ключевое слово
максимум Идентификатор
( Оператор
int Ключевое слово
Икс Идентификатор
, Оператор
int Ключевое слово
Y Идентификатор
) Оператор
{ Оператор
Если Ключевое слово

Примеры нетокенов

Тип Примеры
Комментарий // Это сравнит 2 числа
Директива препроцессора #include
Директива препроцессора #define NUMS 8,9
Макрос NUMS
Пробел / н / б / т

Лексические ошибки

Последовательность символов, которую невозможно просканировать в какой-либо действительный токен, является лексической ошибкой. Важные факты о лексической ошибке:

  • Лексические ошибки встречаются не очень часто, но их следует обрабатывать с помощью сканера.
  • Ошибки в написании идентификаторов, операторов, ключевых слов считаются лексическими ошибками.
  • Как правило, лексическая ошибка вызвана появлением какого-либо недопустимого символа, чаще всего в начале токена.

Восстановление ошибок в лексическом анализаторе

Вот несколько наиболее распространенных методов восстановления после ошибок:

  • Удаляет один символ из оставшегося ввода
  • В режиме паники следующие друг за другом символы всегда игнорируются, пока мы не дойдем до хорошо сформированного токена.
  • Вставив недостающий символ в оставшийся ввод
  • Заменить персонажа другим персонажем
  • Переставить два последовательных символа

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

Лексический анализатор Парсер
Программа ввода сканирования Выполните синтаксический анализ
Определить токены Создайте абстрактное представление кода
Вставить токены в таблицу символов Обновить записи таблицы символов
Генерирует лексические ошибки Он генерирует дерево синтаксического анализа исходного кода

Зачем разделять лексический и синтаксический анализаторы?

  • Простота дизайна: упрощает процесс лексического анализа и синтаксического анализа за счет устранения нежелательных токенов.
  • Повышение эффективности компилятора: помогает повысить эффективность компилятора.
  • Специализация: могут применяться специальные методы для улучшения процесса лексического анализа.
  • Портативность: для связи с внешним миром требуется только сканер
  • Более высокая переносимость: специфические особенности устройства ввода ограничены лексером

Преимущества лексического анализа

  • Метод лексического анализатора используется такими программами, как компиляторы, которые могут использовать проанализированные данные из кода программиста для создания скомпилированного двоичного исполняемого кода.
  • Он используется веб-браузерами для форматирования и отображения веб-страницы с помощью проанализированных данных из JavsScript, HTML, CSS.
  • Отдельный лексический анализатор поможет вам сконструировать специализированный и потенциально более эффективный процессор для данной задачи.

Недостаток лексического анализа

  • Вам нужно потратить значительное время на чтение исходной программы и ее разбиение на токены.
  • Некоторые регулярные выражения довольно сложно понять по сравнению с правилами PEG или EBNF.
  • Требуются дополнительные усилия для разработки и отладки лексера и его описаний токенов.
  • Дополнительные накладные расходы времени выполнения требуются для генерации таблиц лексера и построения токенов.

Резюме

  • Лексический анализ - это самый первый этап проектирования компилятора.
  • Лексема - это последовательность символов, которые включены в исходную программу в соответствии с шаблоном соответствия токена.
  • Реализован лексический анализатор для сканирования всего исходного кода программы.
  • Лексический анализатор помогает идентифицировать токен в таблице символов
  • Последовательность символов, которую невозможно просканировать в какой-либо действительный токен, является лексической ошибкой.
  • Удаляет один символ из оставшегося ввода. Полезно. Метод исправления ошибки.
  • Лексический анализатор сканирует входную программу, в то время как синтаксический анализатор выполняет синтаксический анализ
  • Это упрощает процесс лексического анализа и синтаксического анализа, устраняя нежелательные токены.
  • Лексический анализатор используется веб-браузерами для форматирования и отображения веб-страницы с помощью проанализированных данных из JavsScript, HTML, CSS.
  • Самым большим недостатком использования лексического анализатора является то, что ему требуются дополнительные накладные расходы времени выполнения, необходимые для создания таблиц лексера и построения токенов.