
- •Обзорная лекция по курсу «языки программирования и методы трансляции»
- •Основная литература
- •1 Описание языка программирования
- •2 Введение в трансляцию
- •3 Способы описания языка
- •4 Формальные языки и грамматики. Основные термины и определения
- •5 Порождающие грамматики (Грамматики н.Хомского1)
- •6 Классификация формальных грамматик
- •7 Автоматные грамматики и конечные автоматы
- •7.1. Механизмы распознавания и преобразования
- •7.2 Конечные автоматы
- •7.3 Способы задания конечных автоматов
- •Контекстно-свободные грамматики и языки
- •Проверка существования языка
- •Удаление бесполезных символов грамматики
- •Эквивалентные преобразования кс-грамматик
- •9.1 Устранение цепных правил
- •Удаление произвольного правила
- •9.3 Левая факторизация правил
- •9.4 Преобразование к нормальной форме Хомского
- •Распознающий автомат для кс- языков (автомат с магазинной памятью)
- •Разнозновидности мп-автоматов
- •11 Методы синтаксического анализа
- •Нисходящий разбор
- •Восходящий разбор
- •12 Генерация внутреннего представления программ
- •12.1 Польская запись
- •2 Алгоритм перевода на промежуточный язык
- •2.1 Полиз как промежуточный язык
7.3 Способы задания конечных автоматов
Определение конечного автомата как пятерки объектов с детальным описанием функции переходов слишком громоздко и неинформативно.
Существуют два более удобных способа описания автоматов:
таблица переходов
диаграмма (граф) переходов
Таблица переходов: строки отмечены состояниями, а столбцы - входными символами. Начальное состояние находится всегда в первой строке, в конечные состояния – отмечены символом *.
Составим таблицу переходов КА из примера 1.
|
a |
b |
q0 |
{ q1} |
{ q0} |
q1 |
{ q1} |
{ q2} |
q2 |
{ q3} |
{ q0} |
q3* |
{ q3} |
{ q3} |
Диаграммой переходов НКА называется неупорядоченный граф, удовлетворяющий следующим условиям:
каждому состоянию q соответствует некоторая вершина, отмеченная его именем;
диаграмма переходов содержит дугу из состояния p в состояние q, отмеченную символом a, если р (q, a). Если существуют несколько входных символов, переводящих автомат из состояния p в состояние q, то диаграмма переходов может содержать дугу, отмеченную списком этих символов
вершины, соответствующие заключительным состояниям, отмечаются двойным кружком, остальные состояния – одинарным.
На рисунке приведен граф переходов конечного автомата из примера 1:
b
a


a
q0
q1
a, b


b
b

a
q3
q2
Контекстно-свободные грамматики и языки
К классу контекстно-свободных грамматик (КС) относятся грамматики, у которых не накладывается никаких ограничений на вид правых частей их правил, а левая часть каждого правила – единственный нетерминал. С помощью КС-грамматик задаются синтаксис языков программирования.
Напомним, что все правила КС-грамматики имеют вид: А, где А N, ТN. КС-грамматики служат для определения КС-языков и их регулярных подмножеств.
Проверка существования языка
Проверка существования языка выполняется перед всеми другими исследованиями и преобразованиями КС-грамматики. Алгоритм проверки основан на вычислении множества нетерминалов, порождающих терминальные строки. Если начальный символ грамматики оказывается среди этих нетерминалов, то язык, определяемый грамматикой не пуст, т.е. существует.
Обозначим N= {Z | ZN, Z*x, xT} и рассмотрим алгоритм проверки существования языка.
Вход: КС-грамматика G=(N, T, P, S)
Положить N0=
Вычислить N1= N0 {A | (A) P и (N0 T)*}
Если N1 N0 , то положить N0= N1 и перейти к п.2; иначе положить N= N1
Если SN, то язык существует, иначе язык не существует
Пример. Язык, определяемый грамматикой с правилами
1) S AB 2) A aA 3) A a 4) B b
не пуст, что подтверждает результат применения изложенного алгоритма.
N0=
N1={A, B}
N1= N0 ? Нет N0 = N1={A, B}
N1={A, B, S}
N1= N0 ? Нет N0 = N1={A, B, S}
N1={A, B, S}
N1= N0 ? Да N = N1={A, B, S}
SN то L(G) =, т.е. язык существует