Главная Промышленная автоматика. имеет два дерева вывода, показанные на рис. 2.18. Дерево а предполагает интерпретацию if & then (if b then a) else a тогда как дерево б дает if b then (if Ь then а else tz) □ Нам хотелось бы иметь алгоритм, который по произвольной КС-грамматике выясняет, однозначна ли она, но, к сожалению, такого алгоритма не существует. Н" * then If & then it д then S else Рис. 2.18- Два дерева вывода. Теорема 2.30, Проблема, однозначна ли КС-грамматика G, неразрешима. Доказательство. Пусть C = (Xi, i/i), (x,ji/J-частный случай проблемы соответствий над алфавитом 2. Возьмем КС-грамматику G-({5, Л, В}. 2 и/. Л 5), где / = {1, 2, ..., п} и Р содержит правила А -» XiAi I Xii для 1 < t < /г В -> yiBi I yii для К i < АХ Нетерминалы Aw В порождают соответственно языки Lq и Мс, определенные в разд. 2.6.3. Легко видеть, что не существует цепочки с двумя различными левыми выводами из нетерминала Л или ИЗ нетерминала В. Следовательно, если существует цепочка с двумя различными левыми выводами из 5, то один должен начинаться шагом 5= Л, а другой - шагом S=iB. Но по.лемме 2.29 некоторая цепочка выводится из Л н из S тогда и только тогда, когда частный случаи С проблемы соответствий Поста имеет решение. Таким образом, КС-грамматика G неоднозначна тогда и только тогда, когда С имеет решение. Отсюда сразу заключаем, что если бы существовал алгоритм, решающий проблему однозначности для КС-грамматик, то была бы разрешима проблема соответствий. □ Определенная нами неоднозначность - это свойство грамматики, а не языка. Для некоторых неоднозначных грамматик можно построить эквивалентные им однозначные грамматики. Пример 2.46. Рассмотрим грамматику и язык из предыдущего примера. Грамматика G иеодпозначна потому, что else можно ассоциировать с двумя разными then. По этой причине языки программирования, в которых разрешаются как операторы вида, if-then, так и операторы вида if-then-else, могут быть неоднозначными. Неоднозначность можно устранить, если догово-риться> что else должно ассоциироваться с последним из предшествующих ему then, как на рис. 2.18,6. Можно подправить грамматику из примера 2.45, введя два нетерминала 5 и 5,, и потребовав, чтобы порождал операторы вида if-then-else, тогда как 5 может порождать операторы обоих видов. Правила новой грамматики таковы: 5i if 6 then 5i (ff 6 then else 5 a S-Wb then 5, else 5„ I a Tot факт, что слову else предшествует только S, гарантирует появление внутри конструкции then-else либо символа а, либо другого else. Таким образом, структура, изображенная на рис. 2.18, а, не возникнет. В гл. 5 мы изложим детерминированные методы разбора для различных грамматик, в том числе для грамматики этого примера, и там мы сможем доказать, что наша новая грамматика однозначна. П Хотя нет общего алгоритма, выясняющего, однозначна ли грамматика, можно указать некоторые встречающиеся в правилах, конструкции, приводящие к неоднозначности. Поскольку неоднозначные грамматики часто анализируются труднее, чем однозначные, мы назовем здесь несколько наиболее распространенных конструкций такого "рода, так что их можно будет распознать на практике. Приведенная грамматика, содер}кащая правила Л->ЛЛа, неоднозначна, так как подцепочка АЛА допускает два разных разбора (рис. 2.19). Эта неоднозначность исчезнет, если вместо правил А-*АА\а взять правила А-АВ\В или правила А-ВА\В В-а Другой пример неоднозначности -правило Л-+ЛаЛ. Пара правил А-t-alp тоже создает неоднозначность, так как це- /\ А А А А Рис. 2.19. Да дерева разбора. почка аЛр имеет два разных левых вывода Л=аЛ=фаЛр и Л=фЛр=аЛр. В качестве более тонкого примера пары правил, из-за которых грамматика может стать неоднозначной, приведем Л-*-аЛаЛрЛ. Другие примеры неоднозначных грамматик можно найти в упражнениях. КС-язык называется неоднозначным (или сущственно неоднозначным), если он не порождается никакой однозначной КС-грамматикой. С первого взгляда не видно, существуют ли вообще неоднозначные КС-языки, но нашим следующим примером и будет как раз такой язык. Проблема, .порождает ли данная КС-грамматика однозначный язык (т. е. существует ли эквивалентная ей однозначная грамматика), на самом деле неразрешима, но для некоторых больших подклассов КС-языков известно, что они однозначны; все придуманные до сих пор языки программирования тоже однозначны. Важнее всего то, что, как мы увидим в гл. 8, каждый детерминированный КС-язык оире-деляетсяоднозначной КС-грамматикой. Пример 2.47. Пусть L~{abh\i j или / = /}. Этот КС-язык неоднозначен. Интуитивно это объясняется тем, что цепочки с i==l должны порождаться группой правил, отличных от правил, поролдающнх цепочки с i = По крайней мере некоторые нз цепочек с i~j = l должны порождаться обоими механизмами. Одна из КС-грамматик, порождающих L, такова: S-AB\DC А~аА\е В-ЬВс\е D-aDb\e Ясно, что она неоднозначна. С помощью леммы Огдена можно показать, что язык L неоднозначен. Пусть G - произвольная КС-граМматика, порождающая L, и /е-число, связанное с G (см. теорему 2.24). Можно считать, что /гЗ. Рассмотрим" цепочку z = abc+}\ в которой выделены все символы а. Ее можно записать в виде z = uuwxy. Так "как w содержит выделенные позиции, то и и v состоят только из символов а. Если х содержит два различных символа, то, конечно, uvwxyL, так что либо ха*, либо л: Ь*, либо хе*. Если то цепочка uuwxy имеет вид для некоторого lp/e и потому не принадлежит L. Если-хс*, то uv-wxy имеет вид apifov++p, где, ipk. Эга цепочка тоже не принадлежит L. Если xi?*, то auwxy = a-Pb-pc+\ где lpk. Если эта цепочка принадлежит L, то либо р - р, либо рфр и p - k\. В последнем случае цепочка wuK.i.vf/- a+2pfc+2pi,(;;+ft- конечно, не принадлежит L. Поэтому заключаем, что рр. Заметим, что pj = \v\ w р.=\х\. По теореме 2.24 для любого /пО найдется вывод (2.6.1) 5 => WЛf/ ->Wv"AxHjuu"wx"y Пусть, в частности, fn = k\/p. Так как 1</Ji<ft, то т - целое число. Тогда wwxy = а+Ьс+-. Для цепо*1ки а--Ьс можно показать по симметрии, что существуют н,, у, ffii, Ху, уу, где только Uy содержит символ а, £6*, и что найдется такой нетерминал В, что (2.6.2) S=>+ иВу=> uv"Bxfy ио"1тх"у = abk- Если мы сумеем показать, что этим двум выводам цепочки Qk+k\ijk-vk\.k-vk\ соответствуют разные деревья, то тем самым докажем, что L - неоднозначный язык, поскольку грамматнка 0 была выбрана произвольно и оказалась неоднозначной. Допустим, что выводам (2.6.1) и (2.6.2) соответствует одно и то же дерево. Так как Л порождает цепочки из символов а Ь, а В порождает цепочки из символов b и с, то А (соответственно В) не может быть меткой вершины, которая является ул. . элМЁнШ Теории зык&б потомком вершины, помеченной В (соответственно Л). Следовательно, найдется выводимая цепочка tAtBtay где t, t, t - терминальные цепочки. Для всех i и / цепочка t-vwxtv{wxlt должна по предположению принадлежать L. Но \v\\x\ и lillxil и, кроме того, X м состоят только из символов &, V-из символов а и - из символов с. Тогда, выбрав i и / равными, и достаточно большими, можно считать, что в соответствующей цепочке символов Ь больше, чем символов а или с. Отсюда заключаем, что грамматика О неоднозначна, а стало быть, и язык L неоднозначен. □ УПРАЖНЕНИЯ 2.6.1. Пусть КС-язык и -регулярное множество Пока жите, что следующие языки контекстно-свободны* (а) INIT(L); (б) FIN(L); (в) SUB(L); (г) LIR\ (д) L{\R. Определения операций (а) -(г) даны перед упр. 2.3.17. 2.6.2. Покажите, что если Л - КС-язык и h - гомоморфизм, то h~(L) - КС-язык. Указание; Пусть Р-МП-автомат, допускающий L. Постройте МП-автомат Р\ который применяет h по очереди к каждому входному символу, запасает результат в буфере управляющего устройства и моделирует Р на символах из буфера. Позаботьтесь о том, чтобы Ваш буфер был конечной длины. 2.6.3. Покажите, что следующие языки не контекстно-свободны: (а) {WЬc\ii}\ (б) \aW\i<i<k}\ (в) множество цепочек с одинаковым числом символов а, & и с; (г) {аУа¥\11}\ (д) {«";7"rt"m, п> l); (е) {aVc* I все числа t, /, k разные}; (ж) {пНа \ -число в десятичной записи]-. (Эта конструкция представляет холлеритовы поля в Фортране.) **2.6.4. Покажите, что каждый КС-язык в однобуквенном алфавите регулярен. Указание: Воспользуйтесь леммой о разрастании. **2.6.5. Покажите, что следующие хезыки не всегда являются КС-языками, когда L-КС-язык: упражнения (а) МАХ (L); (б) МШ(Р); (в) Lf = {х\ху для некоторого у и л: = г/}. *2.6.6. Докажите следующую лемму о разрастании для линейных языков. Если L-линейный язык, то найдется такая константа k, что если zL я \ z\k, то z = uvwxy, где uvxy \k, ьхфе и uv%xyL для всех i. 2.6.7. Покажите, что язык {a"b"a"b"\n, 1} не линейный. *2.6.8. МП-автоматом с одним поворотом называется МП-автомат, который для любой входной цепочки сначала только пишет в магазин, а потом только стирает, т. е. начав стирать символы в магазине, он уже не может снова записывать (это и есть один поворот в работе с магазином). Покажите, что КС-язык линеен тогда и только тогда, когда он распознается МП-автоматом с одним поворотом. *2.6.9. Пусть G-=(N, S, Р, 5) -КС-грамматика. Покажите, что следующие языки контекстно-свободны: (а) {а I 5 =>;«!; (б) {a\S=;ay, (в) {а5=*а}. 2.6.10. Дайте подробное доказательство следствия из теоремы 2.25. 2.6.11. Дополните доказательство теоремы 2.26. 2.6.12. Дайте более формальное описание ДМП-автоматов, фигурирующих в доказательствах лемм 2.29(1) и 2.30(1). *2.6.13. Покажите, что язык QcHPc из разд. 2.6.3 контекстно-свободен тогда и только тогда, когда он пуст. 2.6.14, Покажите, что следующие проблемы для кс-грамматик О неразрешимы: (а) е(0)-кс-язык? (б) P(G) -регулярный язык? (в) P(G)-детерминированный кс-язык? <Указание: Используйте упр. 2.6.13 и рассмотрите кс-грамматику для языка QcDPc. 2.6.15. Докажите, что проблема, порождает ли контекстно-зависимая грамматика кс-язык, неразрешима. гтт,,** Усть Gj и G„ -кс-грамматнки. Докажите неразрешимость проблемы „L{G,)f]L{G,) = 0?" *2 6 17 ТТ к.о,/ Уь 1 -кс-грамматика и Gg -праволинейная грамматика. Докажите 0 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 31 32 33 34 35 36 37 [38] 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 0.0019 |