
- •Вопрос 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
Вопрос12
3.2.1 Проверка существования языка грамматики
Алгоритм 3.1. Проверка существования языка грамматики.
Вход: КС-грамматика .
Выход: заключение о существовании или отсутствии языка грамматики.
Определим множество
нетерминалов, порождающих терминальные
строки
.
Шаг 1. Положить N0=Ø.
Шаг 2. Вычислить
и
Шаг 3. Если
,
то положить i:=i+1
и перейти к пункту 2, иначе считать
.
Если
,
то выдать сообщение о том, что язык
грамматики существует, иначе сообщить
об отсутствии языка.
Конец алгоритма.
Пример 3.4. Дана
грамматика
,
где множество правил P:
.
Построим последовательность приближений
множества N:
N0 = Ø;
N1 = {A, B};
N2 = {S, A, B};
N3 = {S, A, B}.
Т.к. N2=N3,
то N
= {S,
A,
B},
следовательно, язык грамматики существует,
потому что начальный символ
.
3.2.2 Удаление бесполезных символов грамматики
Определение 3.7. Бесполезными символами грамматики называют:
а) нетерминалы, не порождающие терминальных строк, т.е. множество символов вида:
б) недостижимые нетерминалы, порождающие терминальные строки, т.е. множество символов вида:
в) недостижимые терминалы, т.е. множество символов вида:
Алгоритм 3.2. Устранение нетерминалов, не порождающих терминальных строк. Вход: кс-грамматика .
Выход: КС-грамматика
,
такая, что
и для всех
существуют выводы
,
где
.
Шаг 1. Определить множество нетерминалов, порождающих терминальные строки, с помощью алгоритма 3.1.
Шаг 2. Вычислить
,
где
- это множество правил, содержащих
бесполезные нетерминалы
.
Конец алгоритма.
Пример 3.5. Дана
грамматика
с правилами P:
Преобразуем ее в эквивалентную грамматику G’ по алгоритму 3.2:
N0 = Ø;
N1 = {S, B, C};
N2 = {S, B, C}.
Т.к.
N1
=
N2,
то
N
= {S,
B,
C}.
После
удаления бесполезных нетерминалов и
правил вывода, получим грамматику
с правилами
Алгоритм 3.3. Устранение недостижимых символов грамматики. Вход: кс-грамматика .
Выход: КС-грамматика
,
такая, что
и для всех
существует вывод
,
где
.
Определим множество достижимых символов z грамматики g, т.Е. Множество:
Шаг 1. Положить
Шаг 2. Вычислить очередное приближение следующим образом:
Шаг 3. Если
то положить i:=i+1
и перейти к шагу 2, иначе считать
.
Шаг 4. Вычислить
,
где
- это множество правил, содержащих
недостижимые символы
.
Конец алгоритма.
Пример 3.6. Дана
грамматика
с правилами P’:
Преобразуем ее в эквивалентную грамматику G’ по алгоритму 3.3:
W0 = {S};
W1 = {S, a, b};
W2 = {S, a, b}.
Т.к. W1=W2,
то W={S,
a,
b}.
Множество недостижимых символов
Тогда после удаления недостижимых
символов, получим грамматику
с правилом P’:
Вопрос13
3.2.3 Устранение -правил грамматики Алгоритм 3.4. Устранение -правил. Вход: кс-грамматика .
Выход: Эквивалентная
КС-грамматика
без -правил
для всех нетерминальных символов, кроме
начального, который в этом случае не
должен встречаться в правых частях
правил грамматики.
Шаг 1. В исходной
грамматике G
найти -порождающие
нетерминальные символы
,
такие что
.
Положить
.
Вычислить
.
Если
, то положить i:=i+1 и перейти к пункту 1.2, иначе считать .
Шаг 2. Из множества
P
правил исходной грамматики G
перенести во множество P’
все правила, за исключением -правил,
т.е.
для
всех
Шаг 3. Пополнить множество P’ правилами, которые получаются из каждого правила этого множества путем исключения всевозможных комбинаций -порождающих нетерминалов в правой части. Полученные при этом -правила во множество P’ не включать.
Шаг 4. Если
,
то
,
где
;
иначе
Конец алгоритма.
Пример 3.7.
Дана грамматика
с правилами P:
.
Преобразуем ее в эквивалентную грамматику
по алгоритму 3.4.
Шаг 1. N0 = {A, B}; N1 = {S, A, B}; N2 = {S, A, B}.
Т.к. N1 = N2, то искомое множество построено и N = {S, A, B}.
Шаг 2, 3. МножествоP’
1)
;
2)
;
3)
Шаг 4. Т.к.
,
то введем новый нетерминал С
и пополним множество P’правилом
вида
.
Результирующая грамматика будет иметь
вид:
с правилами:
P’:
.