- •Введение
- •Порождающие грамматики Хомского Цель
- •Неограниченные грамматики
- •Контекстно зависимые грамматики
- •Контекстно свободные грамматики
- •Автоматные грамматики
- •Эквивалентность грамматик
- •Однозначность грамматик
- •Задачи и упражнения
- •Контрольные вопросы
- •Конечный автомат
- •Детерминированный конечный автомат
- •Построение дка из -нка
- •Задачи и упражнения
- •Контрольные вопросы
- •Регулярные грамматики. Лексический анализатор. Роль лексических анализаторов
- •Лексические ошибки
- •Регулярные выражения
- •Преобразование регулярного выражения в автомат
- •Распознание токенов
- •Задачи и упражнения
- •Контрольные вопросы
- •Автоматы с магазинной памятью
- •Нисходящие методы разбора Устранение левой рекурсии
- •Левая факторизация
- •Метод рекурсивного спуска
- •Пример нисходящего интерпретатора
- •Задачи и упражнения
- •Контрольные вопросы
Задачи и упражнения
Вход лексического анализатора:
Файл с текстом программы на одном из языков.
Выход лексического анализатора:
Таблица символов.
Распечатка лексической структуры программы.
Порядок выполнения работы:
Построить грамматику для заданного языка (см. Таблица 5) в виде продукций.
Построить грамматику для распознавания токенов в виде продукций.
Получить регулярные выражения для распознавания токенов.
Построить -НКА для регулярных выражений.
Провести преобразование в -НКА в ДКА.
Реализовать полученный анализатор на любом языке.
Контрольные вопросы
Какова задача лексических анализаторов?
Что такое токены, шаблоны, лексемы? Приведите пример.
Что является ошибкой лексического анализа?
Приведите примеры восстановления после лексической ошибки.
Какие ошибки распознает лексической анализатор:
while (a < b) } {;
if (2d > 3) {};
or (int I = 5;;){};
int g == 8;
Можно ли язык, представленный регулярным выражением, задать некоторым конечным автоматом?
Какие шаги нужно выполнить, чтобы добиться распознавания токенов?
S–грамматики. Автоматы с магазинной памятью.
Автоматы с магазинной памятью
МП-автомат – это конечный автомат, снабжённый дополнительным стеком (магазином) для хранения промежуточной информации потенциально бесконечного объёма.
МПА = <S, S0, F, , Г, >
где S – множество внутренних состояний автомата; F – множество допускающих состояний; S0 – начальное состояние автомата; – конечный алфавит входных сигналов; Г – конечный алфавит магазина; – функция переходов, вида (si, x, top(гГ)) {sj, push(гГ)}
Рисунок 5. Автомат с магазинной памятью.
Пример 9. МП-Автомат, распознающий сбалансированные скобочные выражения
M = ({s}, s, {s}, {(,)}, {A}, )
(s, “(”, Г) {s, push(“A”)}
(s, “)”, Г) {s, pop()}
Протокол:
<“(”, > A
<“(”, A> AA
<“)”, AA> A
<“)”, A>
S-грамматики
Грамматики вида: A a, где a T, (TN)*
МП-автомат с одним состоянием, с алфавитом = (TN)
Алгоритм:
Начальное состояние: поместить в магазин начальный символ грамматики.
Рекурсивно: по очередному символу цепочки и верхнему символу магазина определить цепочку, которая должна быть помещена в магазин:
Если верхний символ магазина – нетерминал, то очередной входной терминал является ключом, определяющий правую часть правила грамматики, которой должен быть заменён нетерминал;
Если верхний символ магазина – терминал, он должен совпадать с очередным терминалом цепочки. При совпадении терминал выбрасывается из магазина и на его место записывается пустая цепочка ().
Произвести сдвиг по входной цепочке.
Пример 10. Вывод цепочки с помощью s-грамматики.
S acSbA | bAb
A aaB | cbSb
B bAa | a
Произвести вывод цепочки acbaaabbaaa
Таблица 9.Переходы МП-автомата.
|
a |
b |
c |
S |
cSbA |
Ab |
Ошибка |
A |
aB |
Ошибка |
bSb |
B |
|
Aa |
Ошибка |
a |
|
Ошибка |
Ошибкa |
b |
Ошибка |
|
Ошибка |
c |
Ошибка |
Ошибка |
|
a S
c cSbA
b SbA
a AbbA
a aBbbA
a BbbA
b bbA
b bA
a A
a aB
a B