- •Вопрос 1 Трансляторы , интерпретаторы и компиляторы
- •Вопрос 2
- •Вопрос3 Понятие о грамматике языка
- •Вопрос 4
- •Вопрос 4 Способы задания схем грамматик
- •Вопрос 5 Классификация грамматик и языков по Хомскому (грамматики классифицируются по виду их правил вывода)
- •Вопрос 6 *каша* думайте сами что и куда писать
- •Вопрос 6. Парт 2 Разбор цепочек
- •Преобразования грамматик
- •Вопрос 7
- •Вопрос 8 Простейшие способы организации таблицы идентификаторов
- •Вопрос 9 Автоматные грамматики и конечные автоматы
- •Вопрос 10 Регулярные выражения. Свойства регулярных выражений
- •Вопрос 11
- •Вопрос 12.1.
- •Вопрос 12.2
- •1. Для каждой упорядоченной пары терминальных символов выполняется не более чем одно из трех отношений предшествования:
- •Вопрос 13
- •Вопрос 14
- •Вопрос 15
- •Вопрос 16
- •Вопрос 17
- •Вопрос 18
- •Вопрос 19
- •Вопрос 20 Распознаватель на основе алгоритма «сдвиг-свертка»
- •Вопрос 21 Метод рекурсивного спуска
- •Вопрос 22
- •Вопрос 23 внутренние формы представления программы
- •Вопрос 24 Оптимизация объектного кода методом свертки
- •Оптимизация объектного кода методом исключения лишних операций
- •Общий алгоритм генерации и оптимизации объектного кода
Вопрос 2
Определение: алфавит - это конечное множество символов. (Термин "символ" имеет достаточно ясный интуитивный смысл и не нуждается в дальнейшем уточнении.)
Например, алфавит A = {a, b, c, +, !} содержит 5 букв, а алфавит B = {00, 01, 10, 11} содержит 4 буквы, каждая из которых состоит из двух символов.
Определение: цепочкой символов в алфавите V называется любая конечная последовательность символов этого алфавита.
Определение: цепочка, которая не содержит ни одного символа, называется пустой цепочкой. Для ее обозначения будем использовать символ .
Более формально цепочка символов в алфавите V определяется следующим образом:
(1) - цепочка в алфавите V;
(2) если - цепочка в алфавите V и a - символ этого алфавита, то a или а - цепочка в алфавите V;
- цепочка в алфавите V тогда и только тогда, когда она является таковой в силу (1) и (2).
Определение: если и - цепочки, то цепочка называется конкатенацией (или сцеплением) цепочек и .
Например, если = ab и = cd, то = abcd.
Для любой цепочки всегда = = .
Определение: обращением (или реверсом) цепочки называется цепочка, символы которой записаны в обратном порядке.
Обращение цепочки будем обозначать R.
Например, если = abcdef, то R = fedcba.
Для пустой цепочки: R.
Определение: n-ой степенью цепочки будем обозначать n) называется конкатенация n цепочек
0 = ; n = n-1 = n-1.
Определение: длина цепочки - это число составляющих ее символов.
Например, если = abcdefg, то длина равна 7.
Длину цепочки будем обозначать ||. Длина равна 0.
Определение: язык в алфавите V - это подмножество цепочек конечной длины в этом алфавите.
Определение: обозначим через V* множество, содержащее все цепочки в алфавите V, включая пустую цепочку .
Например, если V={0,1}, то V* = {, 0, 1, 00, 11, 01, 10, 000, 001, 011, ...}.
Определение: обозначим через V+ множество, содержащее все цепочки в алфавите V, исключая пустую цепочку .
Следовательно, V* = V+ {.
Ясно, что каждый язык в алфавите V является подмножеством множества V*.
Известно несколько различных способов описания языков [3]. Один из них использует порождающие грамматики. Именно этот способ описания языков чаще всего будет использоваться нами в дальнейшем.
Определение: декартовым произведением A B множеств A и B называется множество {(a,b) | a A, b B}.
Цепочкой символов (или строкой) называют произвольную последовательность символов, записанных один за другим. Цепочка – это последовательность, в которую могут входить любые допустимые символы.
Понятие символа (или буквы) является базовым в теории формальных языков и не нуждается в определении.
Цепочки символов обозначают греческими буквами: α, β, γ, …
Цепочка – это необязательно некоторая осмысленная последовательность символов. Последовательность «аввв..аагрьь ,.лл» – пример цепочки символов.
Для цепочки символов важен состав и количество символов в ней, а также порядок символов в цепочке. Один и тот же символ может произвольное число раз входить в цепочку. Поэтому цепочки «а» и «аа», а также «аб» и «ба» – это разные цепочки символов. Цепочки символов α и β равны (совпадают), α = β, если они имеют один и тот же состав символов, одно и то же их количество и одинаковый порядок следования символов в цепочке.
Количество символов в цепочке называют длиной цепочки. Длина цепочки символов α обозначается как |α|. Очевидно, что если α = β, то и |α| = |β|.
Основной операцией над цепочками символов является операция конкатенации (объединения или сложения) цепочек.
Конкатенация (сложение, объединение) двух цепочек символов – это дописывание второй цепочки в конец первой. Конкатенация цепочек α и β обозначается как αβ. Выполнить конкатенацию цепочек просто: например, если α = «аб», а β = «вг», то αβ = «абвг».
Так как в цепочке важен порядок символов, то очевидно, что операция конкатенации не обладает свойством коммутативности, то есть в общем случае существуют α и β такие, что αβ ≠ βα. Также очевидно, что конкатенация обладает свойством ассоциативности, то есть (αβ)γ = α(βγ).
Можно выделить еще две операции над цепочками.
Обращение цепочки – это запись символов цепочки в обратном порядке. Обращение цепочки α обозначается как αR. Если α = «абвг», то αR = «гвба». Для операции обращения справедливо следующее равенство ∀α,β: (αβ)R = βRαR. Т.е. обращение конкатенации равно конкатенации обращений.
Итерация (повторение) цепочки n раз, где n є N,
n > 0 – это конкатенация цепочки самой с собой n раз. Итерация цепочки α n раз обозначается как αn. Для операции повторения справедливо следующее равенство∀ α: α1 = α, α2 = αα, α3 = ααα, … и т.д.
Среди всех цепочек символов выделяется одна особенная – пустая цепочка. Пустая цепочка символов – это цепочка, не содержащая ни одного символа. Пустую цепочку обозначают греческой буквой λ (в литературе ее иногда обозначают латинской буквой е или греческой ε).
Для пустой цепочки справедливы следующие равенства:
1) |λ| = 0 – Длина пустой цепочки; Д
2) ∀α: λα = αλ = α – Коммутативность; К
3) λR = λ – Обращение; О
4) ∀ n ≥ 0: λn = λ – Итерация; И
5) ∀ α: α0 = λ.