Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Теорема 5.7 типична для доказательств, показывающих, что та или иная грамматика задает некоторый неформально определенный язык. Сначала строится предположение индукции, говорящее о свойствах цепочек, порождаемых из каждой переменной. В данном примере была только одна переменная Р, поэтому нам было достаточно доказать, что ее цепочки были палиндромами.
Доказывается достаточность: если цепочка w удовлетворяет неформальным утверждениям о цепочках переменной А, то А => w. В нашем примере, поскольку Р явля-
*
ется стартовым символом, мы утверждали "Р => w", говоря, что w принадлежит языку грамматики. Обычно достаточность доказывается индукцией по длине слова w. Если в грамматике к переменных, то индуктивное утверждение имеет к частей, которые доказываются с помощью взаимной индукции.
*
Нужно доказать также необходимость, т. е. что если А => w, то w удовлетворяет неформальным утверждениям о цепочках, порождаемых из переменной А. Поскольку в
нашем примере был только стартовый символ Р, предположение о том, что
*
w б L(Gpai), было равносильно Р => w. Для доказательства этой части типична индукция по числу шагов порождения. Если в грамматике есть продукции, позволяющие нескольким переменным появляться в порождаемых цепочках, то «-шаговое порождение нужно разбить на несколько частей, по одному порождению из каждой переменной. Эти порождения могут иметь менее п шагов, поэтому следует предполагать утверждение индукции верным для всех значений, которые не больше п, как это обсуждалось в разделе 1.4.2.
5.1.7. Упражнения к разделу 5.1
Построить КС-грамматики для следующих языков:а) (*) множество {0"1п|/7> 1} всех цепочек из одного и более символов 0, за которыми следуют символы 1 в таком же количестве;
б) (*!) множество {аУск | i или j # к) всех цепочек из символов а, за которыми следуют символы Ъ и затем с так, что количества символов а и Ъ или количества Ьис различны;
в) (!) множество всех цепочек из символов а и Ь, не имеющих вида тс, т. е. не равных ни одной цепочке-повторению;
г) (!!) множество всех цепочек, у которых символов 0 вдвое больше, чем символов 1.
Следующая грамматика порождает язык регулярного выражения 0*1(0 + 1)*.S-M1B
А—>0А\е
В->0В\ \В\е
Запишите левое и правое порождения следующих цепочек:
а) 00101;
б) 1001; в) 00011.
Докажите, что каждый регулярный язык является КС-языком. Указание. Постройте КС-грамматику с помощью индукции по числу операторов в регулярном выражении. КС-грамматика называется праволинейной, если тело каждой продукции имеет не более одной переменной, причем она находится на правом краю тела. Таким образом, продукции праволинейной грамматики имеют вид А —> wB или A —>w, где А и В — переменные, aw — терминальная цепочка, возможно, пустая:а) докажите, что каждая праволинейная грамматика порождает регулярный язык. Указание. Постройте е-НКА, который имитирует левые порождения, представляя своим состоянием единственную переменную в текущей лево - выводимой цепочке;
б) докажите, что каждый регулярный язык имеет праволинейную грамматику. Указание. Начните с ДКА, состояния которого представляются переменными грамматики.
(*!) Пусть Т= {0, 1, (,),+,*, 0, е}. Т можно рассматривать как множество символов, используемых в регулярных выражениях над алфавитом {0, 1}. Единственная разница состоит в том, что во избежание возможной путаницы вместо символа е используется символ е. Постройте КС-грамматику со множеством терминалов Т, которая порождает в точности регулярные выражения в алфавите {0, 1}. Отношение => было определено с базисом "а=>а" и индукцией, утверждав-* * ♦
шей: "из а => Р и /3 => /следует а => Есть несколько других способов определения отношения =>, также равнозначных фразе: "=> есть нуль или несколько шагов отношения =>". Докажите следующие утверждения:
а) а Р тогда и только тогда, когда существует последовательность из одной или нескольких цепочек у,, у2, ..., у„ где а= yh /3 = у„ и для /'= 1, 2, ..., п - 1 имеет место у, => уьГ,
б) если а => Р и /3 у, то а => у. Указание. Воспользуйтесь индукцией по
числу шагов в порождении Р => у.
(!) Рассмотрим КС-грамматику G, определяемую следующими продукциями: S->aS|S6|a|6а) докажите индукцией по длине цепочки, что ни одна цепочка в 1(G) не содержит Ьа как подцепочку;
б) дайте неформальное описание L(G). Уточните ответ, используя часть (а). 5.1.8. (!!) Рассмотрим КС-грамматику G, определяемую следующими продукциями.
S-> aSbS | bSaS \ e
Докажите, что L(G) представляет собой множество всех цепочек, в которых поровну символов а и Ь.
5.2. Деревья разбора
Для порождений существует чрезвычайно полезное представление в виде дерева. Это дерево наглядно показывает, каким образом символы цепочки группируются в подцепочки, каждая из которых принадлежит языку одной из переменных грамматики. Возможно, более важно то, что дерево, известное в компиляции как "дерево разбора", является основной структурой данных для представления исходной программы. В компиляторе древовидная структура исходной программы облегчает ее трансляцию в исполняемый код за счет того, что допускает естественные рекурсивные функции для выполнения этой трансляции.
В данном разделе представлено понятие дерева разбора и показано, что существование дерева разбора тесно связано с существованием порождений и рекурсивных выводов. Далее изучается сущность неоднозначности в грамматиках и языках, являющейся важным свойством деревьев разбора. Некоторые грамматики допускают, что терминальная цепочка имеет несколько деревьев разбора. Такое свойство делает грамматику непригодной для описания языков программирования, поскольку в этом случае компилятор не мог бы распознать структуру некоторых исходных программ, и, как следствие, не мог бы однозначно определить исполняемый код, соответствующий программе.
5.2.1. Построение деревьев разбора
Будем рассматривать грамматику G = (V, Т, Р, S). Деревья разбора для G — это деревья со следующими свойствами.
Каждый внутренний узел отмечен переменной из V. Каждый лист отмечен либо переменной, либо терминалом, либо е. При этом, если лист отмечен Ј, он должен быть единственным сыном своего родителя. Если внутренний узел отмечен А, и его сыновья отмечены слева направо Xh Х2, ..., Хк, соответственно, то А —>Х, Х2 — Хк является продукцией в Р. Отметим, что Сможет быть Ј лишь в одном случае— если он отмечает единственного сына, и А Ј — продукция грамматики G.Обзор терминов, связанных с деревьями
Мы предполагаем, что читатель знаком с понятием дерева и основными определениями для деревьев. Тем не менее, напомним их вкратце.
- Деревья представляют собой множества узлов с отношением родитель-сын. Узел имеет не более одного родителя, изображаемого над узлом, и нуль или несколько сыновей, изображаемых под ним. Родителей и их сыновей соединяют линии. Примеры деревьев представлены на рис. 5.4-5.6. Один узел, корень, не имеет родителя; он появляется на вершине дерева. Узлы без сыновей называются листьями. Узлы, не являющиеся листьями, называются внутренними узлами. Сын сына и так далее узла называется его потомком', соответственно, родитель родителя и так далее — предком. Узлы считаются потомками и предками самих себя. Сыновья узла упорядочиваются слева направо и изображаются в этом порядке. Если узел N находится слева от узла М, то считается, что все потомки узла N находятся слева от всех потомков М.
Пример 5.9. На рис. 5.4 показано дерево разбора, которое использует грамматику выражений (см. рис. 5.2). Корень отменен переменной Ј. В корне применена продукция Ј—»Ј + Ј, поскольку три сына корня отмечены слева направо как Ј, +, Ј. В левом сыне корня применена продукция Ј —» /, так как у этого узла один сын, отмеченный переменной /. □
Пример 5.10. На рис. 5.5 показано дерево разбора для грамматики палиндромов (см. рис. 5.1). В корне применена продукция Р —» 0/>0, а в среднем сыне корня — Р —> \Р\. Отметим, что внизу использована продукция Р —> е. Это использование, при котором у узла есть сын с отметкой е, является единственным случаем, когда в дереве может быть узел, отмеченный е. □
Р
![]()
Е
О
О
![]()
![]()
Е
Е
+
Р
Р
е
I
Рис. 5.4. Дерево разбора, показы - Рис. 5.5. Дерево разбора, показывающее порождение 1 + ЕизЕ .
' ' Ч/У/У М Ч III III
вающее порождение Р => 0110
5.2.2. Крона дерева разбора
Если мы посмотрим на листья любого дерева разбора и выпишем их отметки слева направо, то получим цепочку, которая называется кроной дерева и всегда является цепочкой, выводимой из переменной, отмечающей корень. Утверждение о том, что крона выводима из отметки корня, будет доказано далее. Особый интерес представляют деревья разбора со следующими свойствами.
- Крона является терминальной цепочкой, т. е. все листья отмечены терминалами или е. Корень отмечен стартовым символом.
Кроны таких деревьев разбора представляют собой цепочки языка рассматриваемой грамматики. Мы докажем также, что еще один способ описания языка грамматики состоит в определении его как множества крон тех деревьев разбора, у которых корень отмечен стартовым символом, а крона является терминальной цепочкой.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |


