Содержание
- 2. Системное программное обеспечение Тема № 11 Лексические анализаторы
- 3. Системное программное обеспечение Лексические анализаторы Назначение лексического анализатора Лексема (лексическая единица языка) – это структурная единица
- 4. Системное программное обеспечение Лексические анализаторы Назначение лексического анализатора С теоретической точки зрения ЛА не является обязательной
- 5. Системное программное обеспечение Лексические анализаторы Основные функции ЛА: исключить из текста исходной программы комментарии, незначащие пробелы,
- 6. Системное программное обеспечение Лексические анализаторы последовательная – ЛА просматривает весь текст исходной программы от начала до
- 7. Системное программное обеспечение Лексические анализаторы Пример: … begin if a>b then a:=a-b else a:=b*0.3; end; …
- 8. Системное программное обеспечение Лексические анализаторы Принципы построения лексических анализаторов Лексический анализатор имеет дело с такими объектами,
- 9. Системное программное обеспечение Лексические анализаторы Для большинства входных языков границы лексем распознаются по заданным терминальным символам
- 10. Системное программное обеспечение Лексические анализаторы Лексический анализатор работает прямо, если для данного входного текста (цепочки символов
- 12. Скачать презентацию
Системное программное обеспечение
Тема № 11
Лексические анализаторы
Системное программное обеспечение
Тема № 11
Лексические анализаторы
Системное программное обеспечение
Лексические анализаторы
Назначение лексического анализатора
Лексема (лексическая единица языка) – это
Системное программное обеспечение
Лексические анализаторы
Назначение лексического анализатора
Лексема (лексическая единица языка) – это
Язык естественного общения
идентификаторы,
константы,
ключевые слова языка,
знаки операций и т. п.
слова
Язык программирования
Состав возможных лексем
каждого конкретного языка программирования
определяется синтаксисом этого языка.
Лексический анализатор (сканер) – это часть компилятора, которая читает исходную программу и выделяет в ее тексте лексемы входного языка.
На вход лексического анализатора (ЛА) поступает текст исходной программы, а выходная информация передается для дальнейшей обработки компилятором на этапе синтаксического анализа и разбора.
Системное программное обеспечение
Лексические анализаторы
Назначение лексического анализатора
С теоретической точки зрения ЛА не
Системное программное обеспечение
Лексические анализаторы
Назначение лексического анализатора
С теоретической точки зрения ЛА не
Тем не менее, в состав практически всех компиляторов включают лексический анализ по следующим причинам:
применение ЛА упрощает работу с текстом исходной программы на этапе синтаксического разбора и сокращает объем обрабатываемой информации;
для выделения в тексте и разбора лексем возможно применять простую, эффективную и теоретически хорошо проработанную технику анализа, в то время как на этапе синтаксического анализа конструкций исходного языка используются достаточно сложные алгоритмы разбора;
ЛА отделяет сложный по конструкции синтаксический анализатор от работы непосредственно с текстом исходной программы, структура которого может варьироваться в зависимости от версии входного языка.
ЛА структурирует поступающий на вход
исходный текст программы и выкидывает
всю незначащую информацию
При такой конструкции компилятора
для перехода от одной версии языка
к другой достаточно только перестроить
относительно простой лексический анализатор
Системное программное обеспечение
Лексические анализаторы
Основные функции ЛА:
исключить из текста исходной программы
Системное программное обеспечение
Лексические анализаторы
Основные функции ЛА:
исключить из текста исходной программы
выделить лексемы следующих типов: идентификаторы, строковые, символьные и числовые константы, ключевые (служебные) слова входного языка, знаки операций и разделителей.
четко определить границы лексемы, которые в исходном тексте явно не заданы;
выполнить действия для сохранения информации об обнаруженной лексеме (или выдать сообщение об ошибке, если лексема неверна).
Системное программное обеспечение
Лексические анализаторы
последовательная – ЛА просматривает весь текст исходной
Системное программное обеспечение
Лексические анализаторы
последовательная – ЛА просматривает весь текст исходной
Организация взаимосвязи лексического и синтаксического анализа
параллельная – лексический анализ исходного текста выполняется поэтапно так, что синтаксический анализатор, выполнив разбор очередной конструкции языка, обращается к ЛА за следующей лексемой. При этом он может сообщить информацию о том, какую лексему следует ожидать.
В этом варианте реализации ЛА
Просматривает весь текст исходной программы
один раз от начала до конца.
Таблица лексем строится полностью вся сразу,
и больше к ней компилятор не возвращается.
Всю дальнейшую обработку выполняют
следующие фазы компиляции.
В этом варианте реализации
при возникновении ошибки может
происходить «откат назад»
(для попытки выполнения анализа
текста на другой основе).
В случае успешного выполнения разбора
очередной конструкции языка
синтаксическим анализатором,
лексический анализатор
помещает найденные лексемы
в таблицу лексем
и таблицу идентификаторов и анализ
продолжается дальше в том же порядке.
Системное программное обеспечение
Лексические анализаторы
Пример:
…
begin
if a>b then a:=a-b
else a:=b*0.3;
end;
…
Системное программное обеспечение
Лексические анализаторы
Пример:
…
begin
if a>b then a:=a-b
else a:=b*0.3;
end;
…
Системное программное обеспечение
Лексические анализаторы
Принципы построения лексических анализаторов
Лексический анализатор имеет дело с
Системное программное обеспечение
Лексические анализаторы
Принципы построения лексических анализаторов
Лексический анализатор имеет дело с
Язык констант и идентификаторов в большинстве случаев является регулярным, то есть может быть описан с помощью регулярных грамматик.
Распознавателями для регулярных языков являются конечные автоматы (КА).
Существуют правила, с помощью которых для любой регулярной грамматики может быть построен недетерминированный конечный автомат, распознающий цепочки языка, заданного этой грамматикой.
КА для каждой входной цепочки языка дает ответ на вопрос о том, принадлежит или нет цепочка языку, заданному автоматом.
Системное программное обеспечение
Лексические анализаторы
Для большинства входных языков границы лексем распознаются по
Системное программное обеспечение
Лексические анализаторы
Для большинства входных языков границы лексем распознаются по
Поскольку во входном тексте программы лексемы не ограничены никакими специальными символами, то выделение границ лексем представляет определенную проблему (в терминах программы-сканера определение границ лексем есть выделение тех строк в общем потоке входных символов, для которых надо выполнять распознавание).
Принципы построения лексических анализаторов
Лексический анализатор действует по следующему принципу:
очередной символ из входного потока данных добавляется в лексему всегда, когда он может быть туда добавлен.
Как только символ не может быть добавлен в лексему, то считается, что он является границей лексемы и началом следующей лексемы
(если символ не является пустым разделителем – пробелом, символом табуляции или перевода строки, знаком комментария).
Системное программное обеспечение
Лексические анализаторы
Лексический анализатор работает прямо, если для данного входного
Системное программное обеспечение
Лексические анализаторы
Лексический анализатор работает прямо, если для данного входного
Принципы построения лексических анализаторов
Лексический анализатор работает непрямо, если для данного входного текста (цепочки символов входного языка), заданного типа лексемы и текущего положения указателя в нем он определяет лексему, расположенную непосредственно справа от указателя, и если она соответствует требуемому типу, то сдвигает указатель вправо от части текста, образующей эту лексему. В отличие от прямого варианта данному ЛА на входе требуется задавать также и тип ожидаемой лексемы. Поэтому при непрямой работе ЛА требуется его параллельное взаимодействие с синтаксическим распознавателем.