- •Входные языки сапр и
- •Предисловие
- •1. Языки формулировки задания
- •1.1. Функции. Программ перевода.
- •Общие требования к языкам формулировки задания.
- •1.1.2. Требования к языкам формулировки задания с точки зрения их использования.
- •1.2.Лексический и синтаксический анализ.
- •1.3.Проверка контекста и порождение сценария.
- •2.Теория формальных языков.
- •2.1. Порождающие грамматики
- •2.2. Иерархия распознающих автоматов
- •3. Синтаксис языков программирования.
- •3.1. Основные характеристики языков.
- •3.2. Нормальные формы Бекуса
- •3.3. Определение и общие свойства порождающих грамматик
- •3.4. Контекстно-свободные грамматики
- •3.4.1. Определение дерева вывода.
- •3.4.2. Алгоритм получения скобочной записи синтаксического дерева вывода.
- •3.4.3. Операции над бинарными отношениями.
- •3.5. Автоматные грамматики.
- •3.6. Методы распознавания и анализа языков.
- •3.6.1. Машина Тьюринга как распознающее устройство.
- •3.6.2. Автоматы и преобразователи с магазинной памятью.
- •3.7. Построение анализаторов кс-языков по порождающим грамматикам.
- •3.7.1. Анализаторы предшествования.
- •3.7.2. Lr(k)-анализатор
- •3.7.3. Глобальный анализатор
- •3.8. Контекстные условия языков программирования
3.3. Определение и общие свойства порождающих грамматик
Преобразуем нормальные формы Бекуса с целью сделать их более удобными для изучения математическими средствами и исключить ненужные элементы семантики. Для преобразования выполним следующие действия над каждой металингвистической формулой:
Заменим каждое понятие в угловых скобках символом, не входящим в множество основных символов. Множество таких символов назовем нетерминальными или вспомогательными.
Металингвистическую связку ::= заменим на знак .
Каждую многовариантную формулу заменим на соответствующее число формул с одним вариантом.
Основные символы языка будем называть также терминальными символами, цепочки основных символов – терминальными цепочками.
Выделим общий нетерминальный символ, соответствующий самой общей из описываемых конструкций, и назовем его начальным символом.
Обозначим используемые в формулах конструкции буквами русского алфавита следующим образом : Ч – число, Н – число без знака, Д – десятичное число, П – порядок, М – правильная дробь, Ф – целое, Б – целое без знака, Ц – цифра.
Нормальные формы Бекуса после преобразований примут следующий вид : Таблица 1.
-
Ч Н
П eФ
Ц 2
Ч +Н
М Б
Ц 3
Ч –Н
Ф Б
Ц 4
Н Д
Ф +Б
Ц 5
Н П
Ф –Б
Ц 6
Н ДП
Б Ц
Ц 7
Д Б
Б БЦ
Ц 8
Д М
Ц 0
Ц 9
Д БМ
Ц 1
Определение: Порождающей грамматикой G называется четверка объектов < VТ, VA, I, S >, где
VТ – конечное множество (словарь) терминальных или основных символов;
VA – конечное множество (словарь) нетерминальных или вспомогательных символов, VТ VA =
I начальный символ или аксиома грамматики, I VA ;
S – конечное множество правил вида , где и –цепочки, состоящие из терминальных и нетерминальных символов. Правила из S называются правилами вывода грамматики G.
*
*
2) Говорят, что цепочка n выводима из цепочки в грамматике G ( n), если i , i = 1..n : i-1i.
3) Если из 0 выводится цепочка n и 0 = А VA, то говорят, что цепочка n выводима из символа А, n - терминальная цепочка.
4) Совокупность терминальных цепочек грамматики G, выводимых в ней из начального символа, называется языком, порождаемым этой грамматикой, и обозначается через L(G).
Одной из основных проблем, связанных с практическим применением грамматик, является проблема распознавания.
Проблема распознавания разрешима, если существует такой алгоритм, который за конечное число шагов дает ответ на вопрос, входит ли произвольная цепочка над основным словарем некоторой грамматики в язык, порождаемый этой грамматикой.
Если такой алгоритм существует, то язык называется распознаваемым.
Если число шагов алгоритма распознавания зависит от длины цепочки и может быть оценено до выполнения алгоритма, язык называется легко распознаваемым.
Определение: Длиной цепочки над некоторым словарем (обозначение l ()) , будем называть число символов, входящих в эту цепочку. Если l()=0, цепочка называется пустой. Пустую цепочку будем обозначать через
Определение: Грамматика называется не укорачивающей, если для любого ее правила вывода справедливо неравенство l (l (
Теорема 1: Язык L(G), порождаемый не укорачивающей грамматикой G, легко распознаваем.
Рассмотрим несколько классов грамматик:
Таблица 2.
НАЗВАНИЕ грамматик |
ПРАВИЛА |
ЗАМЕЧАНИЯ |
Контекстно-зависимые |
|
–произвольные цепочки А – нетерминальный символ |
Контекстно-свободные |
А |
– непустая цепочка А – нетерминальный символ |
Укорачивающие контекстно-свободные |
А |
–может быть и пустой цепочкой А – нетерминальный символ |
Автоматные |
А bB, A b |
А,В–нетерминальные символы, b – терминальный символ |
Пример 8: Приведенная грамматика
является контекстной, но не контекстно-свободной (последние пять правил не имеют требуемого вида).
Упражнения
1. Описать язык, порождаемый грамматикой
2. Описать язык, порождаемый грамматикой
3. Описать язык, порождаемый грамматикой
4. Описать язык, порождаемый грамматикой
5. Описать язык, порождаемый грамматикой
6. Какому классу принадлежит грамматика
7. Какому классу принадлежит грамматика