- •Вопрос 1
- •Определение 1.3. Цепочка, которая не содержит ни одного символа, называется пустой цепочкой и обозначается .
- •Определение 1.13. Цепочка , для которой существует вывод s*, называется сентенциальной формой или сентенцией в грамматике .
- •Вопрос 2
- •Вопрос 3
- •Расширение допускает единственное -правило вида s, но в этом случае начальный символ грамматики s не должен встречаться в правых частях правил.
- •Вопрос 4
- •3.1.2 Дерево разбора
- •Вопрос 5
- •Вопрос 6
- •Вопрос 7
- •Вопрос 8
- •Существуют следующие три способа представления функции переходов.
- •Вопрос 9 Алгоритм 2.4. Построение ка по регулярной грамматике.
- •Выход: ка .
- •Вопрос 10
- •Алгоритм 2.1. Преобразование нка в дка.
- •Вопрос 11
- •Алгоритм 2.2. Устранение недостижимых состояний ка.
- •Алгоритм 2.3. Объединение эквивалентных состояний ка.
- •Вопрос12
- •3.2.1 Проверка существования языка грамматики
- •3.2.2 Удаление бесполезных символов грамматики
- •Алгоритм 3.2. Устранение нетерминалов, не порождающих терминальных строк. Вход: кс-грамматика .
- •Алгоритм 3.3. Устранение недостижимых символов грамматики. Вход: кс-грамматика .
- •Определим множество достижимых символов z грамматики g, т.Е. Множество:
- •Вопрос13
- •3.2.3 Устранение -правил грамматики Алгоритм 3.4. Устранение -правил. Вход: кс-грамматика .
- •3.2.4 Устранение цепных правил Алгоритм 3.5. Устранение цепных правил. Вход: кс-грамматика .
- •Вопрос 14 Алгоритм 3.6. Устранение левой факторизации правил. Вход: кс-грамматика .
- •Алгоритм 3.7. Устранение прямой левой рекурсии. Вход: кс-грамматика .
- •Вопрос 15
- •Вопрос 16 Алгоритм 3.9. Построение мп-автомата по кс-грамматике.
- •Вопрос 17
- •Вопрос 18
- •18. 3.4.1 Рекурсивный спуск
- •Теорема 3.1. Достаточные условия применимости метода рекурсивного спуска.
- •Вопрос 19
- •Вопрос 20
- •Вопрос 21
- •21. Функционирование распознавателя цепочек для ll(1)-грамматик.
- •Вопрос 22
- •Вопрос 23 Алгоритм 3.16. Построение множеств l(a) и r(a).
- •Вопрос 24
- •Вопрос 26
- •Вопрос 27
- •Вопрос28
- •Вопрос 29
- •Вопрос 30
- •Вопрос 31
- •Вопрос 32. Определение 4.1. Транслятор – это программа, которая переводит входную программу на исходном (входном) языке в эквивалентную ей выходную программу на результирующем (выходном) языке.
- •Вопрос 33 Общая схема работы компилятора
- •Вопрос 34 ЛекАнализ программы
- •Вопрос 35
- •Вопрос 36
- •Вопрос 37
- •Вопрос 38
- •Вопрос 39
- •Вопрос 40
- •Вопрос 41 Свертка объектного кода программы.
- •Вопрос 42
- •Вопрос 43
- •Вопрос 44
- •Вопрос 45 Схемы компиляции
- •Вопрос 46
- •Вопрос 47
- •Вопрос 48
- •Вопрос 49
- •Вопрос 50
Вопрос 34 ЛекАнализ программы
Определение 4.6. Лексический анализ (ЛА) – это первый этап процесса компиляции, на котором символы, составляющие исходную программу, группируются в отдельные минимальные единицы текста, несущие смысловую нагрузку – лексемы.
Задача лексического анализа - выделить лексемы и преобразовать их к виду, удобному для последующей обработки. ЛА необязательный этап компиляции, но желательный по следующим причинам:
1) замена идентификаторов, констант, ограничителей и служебных слов лексемами делает программу более удобной для дальнейшей обработки;
2) ЛА уменьшает длину программы, устраняя из ее исходного представления несущественные пробелы и комментарии;
3) если будет изменена кодировка в исходном представлении программы, то это отразится только на ЛА.
В процедурных языках лексемы обычно делятся на классы:
служебные слова;
ограничители;
числа;
идентификаторы.
Каждую лексему можно представить парой чисел вида (n, k), где n – номер таблицы лексем, k - номер лексемы в таблице. Тогда входными данными ЛА будет текст транслируемой программы на входном языке, а выходными - последовательность лексем в числовом представлении.
Таблицы идентификаторов и чисел формируются в ходе лексического анализа.
лексема |
x |
0 |
> |
13 |
!F |
x |
x |
8 |
+ |
номер |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Выделяются методы непрямого и прямого лексического анализа.
Непрямой лексический анализ, или лексический анализ с возвратами, заключается в последовательной проверке версий о классах лексем. Если проверка текущей версии не подтверждается, то происходит откат назад по цепочке символов и осуществляется проверка следующей версии.
Непрямой лексический анализатор состоит из отдельных автоматов, каждый из которых распознает одну заданную лексему. Все автоматы имеют одинаковую структуру и отличаются только внутренними состояниями, что связано с различием распознаваемых лексем.
Прямой лексический анализ позволяет определить значение лексемы без откатов назад по цепочке символов. Прямой лексический анализатор строится на основе одного детерминированного автомата, объединяющего множество автоматов, распознающих отдельные лексемы. Такой автомат на каждом шаге читает один входной символ и переходит в следующее состояние, приближающее его к распознаванию текущей лексемы или формированию ошибки. Для лексем, имеющих одинаковые подцепочки, автомат имеет общие фрагменты, реализующие единое множество состояний. Отличающиеся части реализуются своими фрагментами.
Обычно лексический анализатор строится в два этапа:
1) построение конечного автомата с действиями для распознавания и формирования внутреннего представления лексем;
2) написание по конечному автомату с действиями функции сканирования текста исходной программы.
Рассмотрим реализацию данной методики на примере ЛА для числовых констант.
