ФСтаМО_Лк_8_пор_гр_Хомского.ppt
- Количество слайдов: 39
(ФСта. МО) 2012/2013 н. р. для студентів 3 курсу, поток КН-10 -4, 5 Лекція № 8 “Породні граматики Хомського” Лектор доц. Рябова Н. В. , кафедра ШІ ХНУРЕ, ai@kture. kharkov. ua
v v Дюбко Г. Ф. Введение в формальные системы. Учеб. пособие – К. : УМК ВО, 1992. – 171 с. Хопкрофт Джон Э. , Мотвани Р. , Ульман Джеффри Д. Введение в теорию автоматов, языков и вычислений. – М. : изд. дом. «Вильямс» , 2002. – 528 с. Ахо А. , Ульман Дж. Теория синтаксического анализа, перевода и компиляции. Том 1. Синтаксаический анализ. - М. : Мир, 1978, - 612 с. Гладкий А. В. Формальные грамматики и языки. - М. : Наука, 1973. - 368 с.
Книги по разделу
Методическое обеспечение Рябова Н. В. Комплект слайд-лекций по дисциплине «Формальные системы и математические основы представления знаний» , 2012 г. Рябова Н. В. , Чала Л. Е. , Волкова В. В. Методичні вказівки до курсового проектування з дисципліни „Формальні системи та математичні основи представлення знань” для студентів денної форми навчання спеціальності „Інтелектуальні системи прийняття рішень”. – Харків: ХНУРЕ. , 2010. – 28 с. Рябова Н. В. , Чала Л. Е. , Волкова В. В. Методичні вказівки до практичних занять та самостійної роботи з дисципліни „Формальні системи та математичні основи представлення знань” для студентів денної форми навчання напрямку 6. 050101 – „Комп'ютерні науки”. – Харків: ХНУРЕ. , 2012. – 84 с. (електронний варіант).
Интернет-источники Ø Formal. Systems. Language http: //www. w 3. org/wiki/Formal. Systems. Language Ø CSCI E-207: Introduction to Formal Systems and Computation – Video by Instructor: Harry R. Lewis, Ph. D, Harvard College Professor and Gordon Mc. Kay Professor of Computer Science, Harvard University. http: //itunes. apple. com/us/itunes-u/csci-e 207 -introduction-to/id 429428100
Примеры порождающих грамматик. Связь языка с порождающей его ФГ. Построение синтаксического дерева (дерева вывода). Контекстно-зависимые грамматики (НСграмматики): Нормальная форма НС-грамматики (нормальная форма Куроды); Левоконтекстные и правоконтекстные грамматики; Свойства НС-грамматик.
Формальный язык L(G), порождаемый грамматикой G называется терминальным, если L - множество терминальных цепочек грамматики G, выводимых из начального символа S по правилам грамматики Р: Конструктивное описание формальных языков осуществляется с помощью формальных систем специального вида, называемых формальными порождающими грамматики.
q Ноам Хомский ( Avram Noam Chomsky). Родился 07. 12. 1928, Филадельфия, США. q Американский лингвист, политический публицист, философ. q Профессор лингвистики Массачусетсткого технологического института, автор классификации формальных языков, , называемой иерархией Хомского. Его работы о порождающих грамматиках внесли значительный вклад в упадок бихевиоризма и содействовали развитию когнитивных наук. Основные интересы: лингвистика; философия языка; философия сознания; психология; этика; политика Значительные идеи: Генеративная грамматика; универсальная грамматика; нормальная форма Хомского, иерархия Хомского http: //chomsky. info
• Множество нечётных чисел в унарном представлении – это множество цепочек вида а, ааааа, … , т. е. язык (n=1, …). • Он порождается грамматикой G =
• Язык L(G)= является КС-языком (типа 2), поскольку он порождается КС-грамматикой G =
• Язык булевых формул с переменными a, b, c порождается КС-грамматикой, где VT={a, b, c, V, &, ┐, (, )}; VN={S}, P={S → (SVS); S→ (S/S); S→ ┐S; S→a; S→b; S→c } Этот язык отличается от языка формул исчисления высказываний отсутствием импликации.
q Если в предыдущем языке последние три правила вводящие операции V, &, заменить четырьмя правилами, вводящими операции +, –, *, /, то получим язык арифметических выражений. q Этот язык отличается от обычного языка арифметических выражений тем, что не учитывает ассоциативности сложения и умножения, а также приоритетов операций, и поэтому его выражения содержат слишком много скобок (аналогичное замечание относится и к предыдущему примеру).
Более близкий к обычному язык арифметических выражений с переменными a, b, c задается более сложной КС-грамматикой: Для полного совпадения с обычным языком арифметических выражений в эту грамматику надо добавить правила, порождающие числовые константы и произвольные идентификаторы переменных (? ) (Для сам. /р. ) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. S→T; S→ S + T S→ S - T T → M T → T*M T → T/M M → (S) M → K K → a K →b K → c
• Язык порождается следующей грамматикой: 1. 2. 3. 4. 5. 6. S → a. Ba; B → a. BCa; B → b; BC → b. B; b. C →b. B; a. C → Ca.
q Эта грамматика не является контекстной из-за последних двух правил. Однако, можно убедиться, что ей эквивалентна следующая контекстная грамматика: 1. P = {S → ABA; 2. B → ABCA; 3. B → b; 4. b. C → bb; 5. AC → DC 6. DC →DA 7. DA →CA 8. A →a}, q в которой неконтекстное правило а. С →Са заменено четырьмя контекстными правилами, а А играет роль двойника а. q Поэтому язык имеет тип 1.
Связь языка с порождающей его грамматикой имеет ту же природу, что и связь функции с порождающим её алгоритмом. Поэтому проблемы распознавания свойств языка по свойствам задающей его грамматики часто оказывается алгоритмически неразрешимыми. В частности, неразрешима проблема распознавания эквивалентности двух грамматик (разрешим лишь её частный случай, когда обе грамматики имеют тип 3).
• Для грамматики G 1 = (VT, VN, P, S), VN={S}, P 1={S → B, S → CS} строки порождённого ею языка образуют бесконечное множество: • L(G 1) = {B, CCB, CCCB, …}
Построить грамматику G 2, порождающую язык L(G 2)= В этом случае все цепочки языка α є L(G 2) можно рассматривать как результат конкатенции є , где = , = . Для цепочек и можно построить правила грамматики, используя понятие рекурсии и вводя необходимое количество нетерминальных символов. Получаем: P 2 = {S → BC, B → a, B → ab, C → b. С} P 3 = {S → AB, A → a, A → a. A, B → b. B}
• Построить грамматику, порождающую цепочки {GET_EDIT, PUT_EDIT}. • Каждую такую цепочку можно представить, как составленную из трёх частей: α = βγδ, где β принимает значения GET или PUT, γ – представляет собой произвольное число пробелов (не менее одного), δ является константой EDIT. Исходя из этого, получаем следующие правила: Р 3 = {S →BC EDIT, B →PUT, B →GET, C →_C, C →_ }.
• Важную роль в теории трансляции играет понятие синтаксического дерева или дерева вывода. Его называют также деревом разбора или деревом порождения. • Синтаксическое дерево строится по порождению S → N 1, N 2 … Nn → T 1 T 2 … Tk, Ni є VN, Tj є VT (j = 1, 2, …, k), (i=1, n)
Из корня дерева, помеченного нетерминальным символом S, отходит n ветвей по числу символов в строке, непосредственно порождённой начальным нетерминальным символом. Каждая из n ветвей заканчивается вершиной, помеченной символом Mi. Вершины метятся слева направо в порядке возрастания номера и индекса. Если в процессе порождения к нетерминальному символу Ni применено грамматическое правило Ni →B 1, B 2, … Bt, то вершина Ni становится корнем поддерева. Из этой вершины выходит t ветвей, каждая из которых заканчивается вершиной, помеченной символом Br (r=1, 2, …t). Такое построение производится для всех вершин, помеченных терминальными символами. Построение дерева вывода заканчивается, когда все вершины со степенью по выходу, равной нулю, оказываются помеченными терминальными символами T 1 T 2 … Tk. Совокупность этих меток при просмотре вершин слева направо образует терминальную строку T 1 T 2 … Tk
• Рассмотрим грамматику G 4 = (VT, VN, P 4, S). P 4 = {S → А, S → BEEF, E→BC, E → A}. • Дерево вывода, отображающее порождение • S → BEEF → BABCF Корнем дерева является вершина, S F E E B A F C B помеченная начальным нетерминальным символом S, непосредственно порождающим строку BEEF. В этой строке нетерминальными являются символы Е, которые порождают рёбра, заканчивающиеся вершинми А, В, С. Вершины, помеченные терминальными символами, имеют степень по выходу, равную нулю. Совокупность этих меток при просмотре их слева направо образует терминальную строку ВАВСF.
Определения • Грамматика G называется однозначной, если не существует цепочки α L(G), имеющей более одного дерева вывода. В противном случае грамматика называется неоднозначной. • Различные грамматики могут порождать один и тот же язык. Такие грамматики называются эквивалентными.
• • Построить ФГ, порождающую язык L(G 1) = и определить её тип. Показать, что грамматика G = (VT, VN, P, S), где Р = { S → (S), S → a, S → SBS, B → +, B → -, B → *, B → /}, неодназначна, построив два синтаксических дерева для одного выражения а + а * а. 3. Опишите грамматику, язык который состоит из множества целых чётных чисел, исключая числа с нулём вначале. 4. Пусть грамматика определена правилами р = {S → AB, A → Aa, A → b. B, B → a, B → Sb}, S – аксиома. Построить деревья выводов для следующих цепочек: Baabaab, b. BABb, ba. Sb. 5. Построить грамматику, порождающую язык L(G) =
Построить грамматику, выводящую все неотрицательные целые чётные числа. При этом « 0» не должен появляться слева от значащей части числа. • Чтобы грамматика была построена, достаточно построить её 4 компоненты. Терминальный алфавит включает в себя все символы, из которых состоит строка, выражающая запись чётного числа, т. е. символы 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Терминальными строками построенной грамматики должны быть 0, 4, 18, 3112, а 00, 25 не должны выводиться грамматикой. • Алфавит нетерминальных символов может быть сформирован после построения продукций также, как и символика. • Для обозначения нетерминалов используем прописные латинские буквы или строки символов русского и латинского алфавитов, заключённые в треугольные скобки.
q При построении продукций руководствуемся следующими соображениями. Чётное число может быть одноразрядным или многоразрядным. Если оно одноразрядное, то его задают следующим множеством продукций: <чётное> → 0, <чётное> → 2, <чётное> → 4, <чётное> → 6, <чётное> → 8. q Поскольку у этих продукций левая часть одинакова, можно ввести сокращенную запись q <чётное> → 0 | 2 | 4 | 6 | 8 где вертикальная черта разделяет правые части продукций, имеющих одну и ту же левую часть.
q При конструировании продукций для многоразрядных чётных чисел используют операцию конкатенации любого целого числа и чётного одноразрядного числа, что приводит к получению строки, задающей чётное число, т. е. в правой части продукции должна быть строка, представляющая собой конкатенацию нетерминалов. <целое> <одноразрядное - чётное> q Продукции для определения нетерминала <целое> строятся аналогично продукциям для нетерминала <чётное>. Т. к. символ 0 не должен появляться слева от значащей части числа, вводится нетерминал <чётное 1>.
§ В результате приведенных рассуждений можно построить грамматику G = (VT, VN, P, S), где VT = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, VN = {<цифра>, <целое>, <чётное 1>, <одноразрядноечётное>, <чётное>}, S - <чётное>. § Множество продукций Р: § 1. <чётное> → 0 | <чётное 1>; § 2. <чётное 1> → <одноразрядное-чётное> | <целое> <одноразрядное-чётное> | <целое> 0; § 3. <одноразрядное-чётное> → 2 | 4 | 6 | 8; § 4. <целое> → <цифра> | <целое> 0; § 5. <цифра> → 1| 2| 3| 4| 5| 6| 7| 8| 9.
• В построенной грамматике пять продукций пронумерованы. В действительности их гораздо больше. Здесь также продукции пронумерованы по нетерминальному символу. • В подобных случаях номер продукции можно указывать двойной нумерацией, например, продукция <целое> → <целое> 0 имеет номер 4. 3, либо порядковой нумерацией (для той же продукции это № 12, считая от начала) • Замечания по построению продукций: • Символ 0 не включён в продукцию 3, которая определяет одноразрядное целое число, потому что он не должен появляться слева от значащей части числа, но он включён в продукцию 1, которая одной из двух своих альтернатив определяет одноразрядное чётное число 0. • Продукция 4 определяет целое число как одноразрядное целое посредством нетерминала <цифра> или как многоразрядное посредством конкатенции <целое> и строки <цифра>. Символ 0 не включён в продукцию 5 по тем же соображениям, что и в продукцию 3
• Грамматики типа 0, порождающие языки, являющиеся рекурсивно-перечислимыми множествами, не нашли практического применения. • Их использование для описания синтаксиса языков неудобно, т. к. для произвольной грамматики G данного типа очень трудно или невозможно построить приемлемый по трудоемкости алгоритм распознавания, который давал бы ответ на вопрос, принадлежит ли произвольная терминальная цепочка языку L(G). • Контекстно-зависимые языки (НС-языки), порождаемые грамматиками типа 1, имеют большую практическую ценность, чем языки типа 0.
q Возникает вопрос, почему языки типа 1 называют контекстнозависимыми. q Можно доказать, что если G - контекстно-зависимая грамматика, то существует эквивалентная ей грамматика G 1 такая, что каждая продукция из P имеет вид: αAβ→ατβ, где α, β є (VT U VN)*, A є VN, τ є (VT U VN)+. q Другими словами, символ А может быть заменен непустой цепочкой в определенном «контексте» . q Говорят, что грамматика G 1 представляет собой так называемую нормальную форму контекстно-зависимой грамматики G. q Таким образом нетерминальные символы можно интерпретировать как металингвистические переменные или, иными словами, конструкции языка, а вывод цепочек языка можно рассматривать как информацию о синтаксической структуре этих цепочек.
Пусть необходимо построить язык для описания равносторонних треугольников, каждая сторона которых состоит из конечного числа ориентированных отрезков определенной длины. На рис. 8 -1 приведены примеры таких треугольников. В зависимости от направления обозначим эти отрезки символами l, r или x. l а) r б) x Рис. 8 -1. Графическая интерпретация языка (а) и его терминальных символов (б)
• Двигаясь по часовой стрелке от левого нижнего угла каждого треугольника, получим следующие описания этих треугольников: 1. LLLRRRXXX, 2. LLRRXX, 3. LLLLRRRRXXXX. • Можно считать, что это цепочки некоторого языка описания равносторонних треугольников указанного типа.
Для данного языка можно предложить следующую грамматику типа 1, которую, однако, нельзя отнести к классу бесконтекстных грамматик: G = (VT, VN, P, S), где VT = {l, r, x}, VN = {S, R, X}, а множество продукций P: P = { (1) S→l. SRX, (2) S→l. RX, (3) XR→RX, (4) l. R→lr, (5) r. R→rr, (6) r. X→rx, (7) x. X→xx }.
• Чтобы получить цепочку надо сделать следующее количество шагов: • причем, первую продукцию необходимо применить (n-1) раз, затем один раз – вторую продукцию, 1/2 n (n-1) раз – третью, один раз четвертую, n-1 раз – пятую, один раз – шестую, и (n-1) раз седьмую. • Можно доказать, что с помощью данной грамматики нельзя построить терминальные цепочки, не являющиеся цепочками языка { }. Более того, можно доказать, что данному языку не может соответствовать никакая бесконтекстная грамматика. • Заметим, что данная грамматика не представляет собой нормальной формы, т. к. продукция XR→RX имеет вид, отличный от вида αАβ→ β.
• Существует еще одна нормальная форма для грамматик непосредственно составляющих, называемая нормальной формой Куроды. • Грамматика G = (VT, VN, P, S) задана в нормальной форме Куроды, если каждая ее продукция имеет одну из следующих форм: (1) A→BC, (2) A→AB, (3) AB→CB, (4) A→B, (5) A→a • Можно показать, что для каждой грамматики G типа 1 можно построить эквивалентную ей грамматику G 1 в нормальной форме Куроды.
Продолжение следует…