- •Введение
- •Формальные грамматики. Выводы Основные понятия
- •Способы задания языков
- •Операции над языками
- •Формальные грамматики. Выводы
- •Преобразования кс-грамматик Основные понятия
- •Устранение лишних символов
- •Исключение лишних правил
- •Исключение -правил
- •Устранение цепных правил
- •Выделение нетерминала
- •Левая факторизация
- •Устранение левой рекурсии
- •Устранение правой рекурсии
- •Нормальная форма Хомского
- •Нормальная форма Грейбах
- •Операторная кс-грамматика
- •Регулярные языки и конечные распознаватели Правосторонние грамматики
- •Левосторонние грамматики
- •Связь правосторонних и левосторонних грамматик
- •Преобразование кс-грамматики произвольного вида в правостороннюю
- •Конечные распознаватели. Основные понятия
- •Преобразование недетерминированных конечных распознавателей с -переходами в детерминированные
- •Эквивалентность состояний конечных детерминированных распознавателей
- •Эквивалентность конечных детерминированных распознавателей
- •Минимизация конечных детерминированных распознавателей
- •Регулярные множества и регулярные выражения
- •Регулярные выражения и конечные распознаватели
- •Получение регулярного выражения из конечного распознавателя
- •Построение конечного распознавателя по регулярному выражению
- •Конечные распознаватели и регулярные грамматики
- •Получение грамматики из конечного распознавателя
- •Построение конечных распознавателей по регулярным грамматикам
- •Ещё один способ взаимного преобразования право- и левосторонних грамматик
- •Программная реализация конечных детерминированных распознавателей
- •Лексический анализ
- •Принципы построения лексических анализаторов
- •Определение границ лексем
- •Выполнение действий, связанных с лексемами
- •Выделение ключевых слов
- •Программная реализация лексических анализаторов
- •Глава 3. Синтаксический анализ
- •3.1. Автомат с магазинной памятью
- •3.2. Таблично-управляемый предсказывающий разбор
- •3.2.1. Алгоритм разбора сверху-вниз
- •3.2.2. Множества first и follow
- •3.2.3. Конструирование таблиц предсказывающего анализатора
- •3.2.4. Ll(1)-грамматики
- •3.2.7. Рекурсивный спуск
- •3.3. Разбор снизу-вверх типа сдвиг-свертка
- •3.3.1. Основа
- •3.3.2. Lr(k)-анализаторы
- •3.3.4. Конфликты разбора типа сдвиг-свертка
Операторная кс-грамматика
Любой КС язык может быть задан операторной КС-грамматикой , а любую КС-грамматику можно преобразовать в эквивалентную ей операторную. Операторной грамматикой называется КС-грамматика без -правил, в которой правые части всех правил не содержат смежных нетерминалов. Правило назовём операторным, если в его правой части нет смежных нетерминалов.
Для преобразования произвольной грамматики в операторную предварительно получим грамматику, правые части правил которой начинаются терминалом (см. ‘Нормальная форма Грейбах’).
Алгоритм преобразования грамматики, правые части правил которой начинаются терминалом , в операторную.
1. Для каждого правила вида А,
где А – нетерминал;
- цепочка терминалов и нетерминалов, начинающаяся с терминала;
- цепочка нетерминалов, содержащая более одного символа;
- цепочка терминалов и нетерминалов, возможно пустая;
выполнить следующее преобразование:
если в грамматике есть одиночное правило В, то правило А заменить на АВ, иначе ввести правило N , где N – новый нетерминал, и правило А заменить на АN .
Выполнять п.1 , пока в грамматике есть правила вида А .
В результате выполнения п.1 правила, определяющие нетерминалы исходной грамматики, будут операторными.
2. Пока в грамматике есть правила, содержащие в правой части пару смежных нетерминалов XY , выполнять замену второго нетерминала Y .
Пример.
Преобразовать заданную грамматику в операторную.
Исходная грамматика |
Результат выполнения п.1 |
Операторная грамматика |
АaBAC |
АaN1 |
АaN1 |
Аe |
Аe |
Аe |
BdBACb |
Bd N1b |
Bd N1b |
Bb |
Bb |
Bb |
CaBaAB |
CaBa N2 |
CaBa N2 |
|
N1BAC |
N1Ba N1aBaN2 |
|
N2AB |
N1BeC |
|
|
N2A d N1b |
|
|
N2Ab |
Регулярные языки и конечные распознаватели Правосторонние грамматики
В 1959 г. американский учёный-лингвист Н.Хомский предложил классифицировать формальные языки по типу правил порождающей грамматики. Регулярный язык – это язык, который может быть задан регулярной (правосторонней) грамматикой, которая может иметь правила двух видов: А или АВ, где А и В – нетерминалы, а - цепочка терминалов, возможно, пустая. Другими словами, в правой части правил может быть не более одного нетерминала и, если он есть, то занимает самую крайнюу правую позицию. Очевидно, что правосторонняя грамматика является подклассом КС-грамматик.
Грамматику, которая может иметь правила двух видов: АtВ и А , где А и В – нетерминалы, а t – терминал, назовём автоматной правосторонней или правосторонней грамматикой специального вида. Любую правостороннюю грамматику можно преобразовать в автоматную правостороннюю.
Алгоритм преобразования правосторонней грамматики в автоматную правостороннюю.
1. Если имеются правила вида А , - непустая цепочка термина-лов, то ввести новый нетерминал Е и добавить правило Е . Затем каждое из правил вида А заменить правилом АЕ.
2. Пока в грамматике есть правила вида АВ , где - цепочка более чем из одного терминала, выполнять выделение нетерминала следующим образом: правило АВ заменить правилами АtC и СВ , где t – первый терминал в цепочке , С – новый нетерминал, - цепочка без первого терминала.
3. Устранить цепные правила.
Пример.
Привести правостороннюю грамматику к автоматному виду.
1. SaA 4. AabS
2. Sb 5. AcA
3. SA 6. A
1. В грамматике есть правило 2 вида А, поэтому введём новый нетерминал Е , добавим правило 7 и изменим правило 2 :
1. SaA 4. AabS
2. SbЕ 5. AcA
3. SA 6. A
7. Е
2. Выполним выделение нетерминала в правиле 4, обозначив цепочку bS ннетерминал В :
1. SaA 4.2. ВbS
2. SbЕ 5. AcA
3. SA 6. A
4.1. AaВ 7. Е
3. Устраним цепное правило 3 :
1. SaA 4.1. AaВ
2. SbЕ 4.2. ВbS
3.1. SaB 5. AcA
3.1. ScA 6. A
3.1. S 7. E
Автоматная правосторонняя грамматика получена.
