Контролируемая грамматика
![]() | Эта статья может сбивать с толку или быть непонятной читателям . ( Ноябрь 2019 г. ) |
Контролируемые грамматики [1] — это класс грамматик , которые обычно расширяют контекстно-свободные грамматики дополнительными средствами управления выводом предложения на языке. Существует множество различных типов контролируемых грамматик, четырьмя основными разделами которых являются индексированные грамматики , грамматики с предписанными последовательностями вывода, грамматики с контекстными условиями применения правил и грамматики с параллелизмом в применении правил. Поскольку индексированные грамматики настолько хорошо зарекомендовали себя в этой области, в этой статье будут рассмотрены только последние три вида контролируемых грамматик.
Управление по заданным последовательностям
[ редактировать ]Грамматики с предписанными последовательностями — это грамматики, в которых последовательность применения правил каким-либо образом ограничена. Существует четыре различных версии грамматик предписанных последовательностей: грамматики, управляемые языком (часто называемые просто управляемыми грамматиками), матричные грамматики , векторные грамматики и программированные грамматики.
В стандартном формализме контекстно-свободной грамматики сама грамматика рассматривается как четырехкортеж . , где N — набор нетерминальных/фразовых символов , T — непересекающийся набор символов терминала/слова, S — специально назначенный начальный символ, выбранный из N , а P — набор правил продукции, таких как , где X — некоторый член N , и какой-то член .
Продукция такой грамматики представляет собой последовательность правил в P , которые при применении в порядке последовательности приводят к терминальной строке. То есть можно рассматривать множество мыслимых дифференцирований в G как множество и язык G как набор терминальных строк . Управляющие грамматики серьезно относятся к этому определению языка, порожденному грамматикой, конкретизируя набор производных как аспект грамматики. Таким образом, заданная грамматика с контролируемой последовательностью представляет собой, по крайней мере, приблизительно пятикортежную грамматику. где все, кроме R, такое же, как и в CFG, а R представляет собой бесконечный набор допустимых последовательностей вывода. .
Множество R из-за своей бесконечности почти всегда (хотя и не обязательно) описывается с помощью какого-либо более удобного механизма, такого как грамматика (как в грамматиках, управляемых языком) или набор матриц или векторов (как в матричных и векторных грамматиках). ). Таким образом, различные варианты предписанных грамматик последовательностей различаются тем, как последовательность выводов определяется поверх контекстно-свободной базы. Поскольку матричные и векторные грамматики по сути являются частными случаями грамматик, управляемых языком, примеры первых двух ниже не приводятся.
Грамматики, контролируемые языком
[ редактировать ]Грамматики, управляемые языком, — это грамматики, в которых производственные последовательности составляют четко определенный язык произвольной природы, обычно, хотя и не обязательно регулярный, на основе набора (опять же обычно, хотя и не обязательно) контекстно-свободных производственных правил. Они также часто имеют шестой набор в грамматическом кортеже, что делает его , где F — множество продукций, которые разрешено применять безосновательно. Отныне эта версия грамматик, управляемых языком, с так называемой «проверкой внешнего вида».
Теоретико-доказательное описание
[ редактировать ]Мы позволяем регулярно контролируемой контекстно-свободной грамматике с проверкой внешнего вида быть шестикортежной где N , T , S и P определены как в CFG, R — подмножество P*, регулярный язык над P , а F — некоторое подмножество P. составляющее Затем мы определяем отношение немедленного вывода следующее:
Учитывая некоторые строки x и y , обе в и некоторое правило ,
имеет место, если либо
- и , или
- и
Интуитивно это означает, что правило может применяться к строке, если левая часть правила присутствует в этой строке, или если правило входит в набор «бесприменимых» правил, которые могут «применяться» к строке без меняя что-либо. Это требование, согласно которому должны применяться непусто применимые правила, представляет собой аспект проверки внешнего вида такой грамматики. Языком такого типа грамматики является просто набор терминальных строк. .
Пример
[ редактировать ]Рассмотрим простую (хотя и не самую простую) контекстно-свободную грамматику, генерирующую язык :
Позволять , где
В управляемой языком форме эта грамматика просто (где — регулярное выражение, обозначающее набор всех последовательностей продукционных правил). Простая модификация этой грамматики: изменение набора управляющих последовательностей R на набор и изменив свой бессмысленный набор правил F на , дает грамматику, которая генерирует язык, отличный от CF. . Чтобы увидеть, как это сделать, рассмотрим общий случай некоторой строки с n экземплярами S в ней, т.е. (особый случай тривиально выводит строку a, которая , неинтересный факт).
Если мы выбрали некоторую произвольную производственную последовательность , мы можем рассмотреть три возможности: , , и Когда мы переписываем все n экземпляров S как AA , применяя правило f к строке u раз, и переходим к применению g , которое применяется бессмысленно (в силу того, что оно находится в F ). Когда , мы переписываем все n экземпляров S как AA , а затем пытаемся выполнить перезапись n+1 , используя правило f , но это терпит неудачу, потому что больше нет S для перезаписи, а f не находится в F и поэтому не может применяться бессмысленно, таким образом, когда , вывод не удался. Наконец, тогда , мы переписываем u экземпляров S один экземпляр S для перезаписи при последующем применении g , переписывая S как X. , оставляя по крайней мере Учитывая, что ни одно правило этой грамматики никогда не переписывает X , такой вывод никогда не приведет к созданию терминальной строки. Таким образом, только выводы с когда-нибудь успешно перезапишет строку . Аналогичные рассуждения справедливы и для числа A s и v . В общем, тогда мы можем сказать, что единственные действительные выводы имеют структуру создаст терминальные строки грамматики. Правила X в сочетании со структурой управления по существу вынуждают все S перезаписывать как AA до того, как любые A будут перезаписаны как S , что опять же вынуждено произойти перед всеми еще более поздними итерациями над S. цикл до-АА . Наконец, S перезаписываются как s . Таким образом, количество S удваивается для каждого экземпляра который появляется в последовательности, производной от терминала.
Выбрав две случайные нетерминальные производные последовательности и одну терминальную, мы можем увидеть это в работе:
Позволять , то мы получим неудавшийся вывод:
Позволять , то мы получим неудавшийся вывод:
Позволять , то мы получим успешный вывод:
Подобные выводы со вторым циклом производить только SSSS . Показан только (продолжающийся) успешный вывод:
Матричные грамматики
[ редактировать ]Матричные грамматики (расширенные в отдельной статье ) представляют собой частный случай регулярных управляемых контекстно-свободных грамматик, в которых язык производственных последовательностей имеет форму , где каждая «матрица» представляет собой единую последовательность. Для удобства такая грамматика представляется не грамматикой над P , а просто набором матриц вместо языка и правил продукции. Таким образом, матричная грамматика представляет собой пятикортеж , где N , T , S и F определяются по существу так же, как это было сделано ранее ( на этот раз F является подмножеством M ), а M представляет собой набор матриц где каждый это контекстно-свободное производственное правило.
Таким образом, отношение производных в матричной грамматике определяется просто как:
Учитывая некоторые строки x и y , обе в и некоторая матрица ,
имеет место, если либо
- , , и , или
- и
Неформально, матричная грамматика — это просто грамматика, в которой во время каждого цикла перезаписи должна выполняться определенная последовательность операций перезаписи, а не просто одна операция перезаписи, т. е. одно правило «запускает» каскад других правил. Подобные явления могут быть реализованы в стандартной контекстно-зависимой идиоме, как это делалось в фонологии, основанной на правилах, и в более ранней Трансформационной грамматике , с помощью так называемых «подпитывающих» правил, которые изменяют вывод таким образом, чтобы обеспечить среду для нефакультативное правило, которое следует сразу за ним.
Векторные грамматики
[ редактировать ]Векторные грамматики тесно связаны с матричными грамматиками и фактически могут рассматриваться как особый класс матричных грамматик, в котором если , то таковы и все его перестановки . Однако для удобства мы определим векторные грамматики следующим образом: векторная грамматика представляет собой 5-кортеж , где N , T и F определены ранее ( F снова является подмножеством M ), и где M представляет собой набор векторов , каждый вектор представляет собой набор контекстно-свободных правил.
Тогда отношение производных в векторной грамматике будет следующим:
Учитывая некоторые строки x и y , обе в и некоторая матрица ,
имеет место, если либо
- , , и , где , или
- и
Обратите внимание, что количество продукционных правил, используемых в последовательности вывода, n , совпадает с количеством продукционных правил в векторе. Неофициально векторная грамматика — это такая грамматика, в которой применяется набор продукций, причем каждая продукция применяется ровно один раз в произвольном порядке для получения одной строки из другой. Таким образом, векторные грамматики почти идентичны матричным грамматикам, за исключением ограничения на порядок, в котором продукция должна происходить во время каждого цикла применения правил.
Программированные грамматики
[ редактировать ]Программированные грамматики представляют собой относительно простые расширения контекстно-свободных грамматик с постепенным контролем вывода. Программированная грамматика представляет собой четырехкортеж , где N , T и S такие же, как в контекстно-свободной грамматике, а P — набор кортежей , где p — контекстно-свободное производственное правило, является подмножеством P (называемым полем успеха), и является подмножеством P (называемым полем отказа). Если поле сбоя каждого правила в P пусто, в грамматике отсутствует проверка внешнего вида, а если хотя бы одно поле сбоя не пусто, грамматика имеет проверку внешнего вида. Отношение вывода в программной грамматике определяется следующим образом:
Даны две строки и некоторое правило ,
- и , или
- и А не появляется в x.
Язык программируемой грамматики G определяется путем ограничения правила вывода, как , где для каждого , или или .
Интуитивно понятно, что при применении правила p в запрограммированной грамматике правило может либо успешно перезаписать символ в строке, и в этом случае последующее правило должно находиться в поле успеха p , либо правило может не переписать символ (таким образом, применяется бессмысленно), и в этом случае последующее правило должно быть в p поле отказа s. Выбор того, какое правило применить к начальной строке, является произвольным, в отличие от грамматики, управляемой языком, но как только выбор сделан, правила, которые могут быть применены после этого, с этого момента ограничивают последовательность правил.
Пример
[ редактировать ]Как и многие другие контролируемые грамматики, запрограммированные грамматики могут генерировать язык :
Позволять , где
Вывод строки aaaa следующий:
Как видно из вывода и правил, каждый раз и преуспевают, они возвращают информацию самим себе, что заставляет каждое правило продолжать перезаписывать строку снова и снова, пока оно больше не сможет это делать. В случае неудачи деривация может переключиться на другое правило. В случае , это означает перезапись всех S как AA , а затем переключение на . В случае , это означает перезапись всех A как S , а затем переключение либо на , что приведет к удвоению количества произведенных S или к который преобразует S в a s, а затем останавливает вывод. Каждый цикл через затем поэтому либо удваивает исходное количество S , либо преобразует S в a . Тривиальный случай генерации a , если его трудно увидеть, просто включает в себя бессмысленное применение , таким образом перепрыгивая прямо к что также бессмысленно применимо, а затем перепрыгиваем к производит . который
Управление по условиям контекста
[ редактировать ]В отличие от грамматик, управляемых предписанными последовательностями продукционных правил, которые ограничивают пространство допустимых выводов, но не ограничивают типы предложений, к которым может применяться продукционное правило, грамматики, управляемые контекстными условиями, не имеют ограничений последовательности, но допускают ограничения различной сложности на предложения, к которым применяется производственное правило. Подобно грамматикам, управляемым предписанными последовательностями, существует множество различных типов грамматик, управляемых условиями контекста: условные грамматики, полуусловные грамматики, грамматики случайного контекста и упорядоченные грамматики.
Условные грамматики
[ редактировать ]Условные грамматики — это простейшая версия грамматик, управляемых контекстными условиями. Структура условной грамматики очень похожа на структуру обычной переписанной грамматики: , где N , T и S определены в контекстно-свободной грамматике, а P представляет собой набор пар формы где p — производственное правило (обычно контекстно-свободное), а R — язык (обычно регулярный) над . Когда R является регулярным, R можно просто выразить как регулярное выражение.
Теоретико-доказательное определение
[ редактировать ]Используя это определение условной грамматики, мы можем определить отношение производных следующим образом:
Даны две строки , и некоторое производственное правило ,
- тогда и только тогда, когда , , и
Тогда неформально правило продукции для некоторой пары в P может применяться только к строкам, которые находятся на языке ее контекста. Так, например, если бы у нас была какая-то пара , мы можем применить это только к строкам, состоящим из любого количества букв , за которыми следует ровно только S, за которым следует любое количество букв b , то есть к предложениям в , например, строки S , aSb , aaaS , aSbbbbbb и т. д. Это не может применяться к таким строкам, как xSy , aaaSxbbb и т. д.
Пример
[ редактировать ]Условные грамматики могут генерировать контекстно-зависимый язык. .
Позволять , где
Затем мы можем сгенерировать предложение aaaa со следующим выводом:
Полуусловные грамматики
[ редактировать ]Полуусловная грамматика очень похожа на условную грамматику, и технически класс полуусловных грамматик является подмножеством условных грамматик. Вместо указания того, как должна выглядеть вся строка, чтобы правило применялось, полуусловные грамматики указывают, что для применения правила строка должна иметь в качестве подстрок все строки из некоторого набора строк и ни одной из другого набора. . Тогда формально полуусловная грамматика представляет собой кортеж , где N , T и S определены как в CFG, а P представляет собой набор правил, таких как где p — производственное правило (обычно контекстно-свободное), а R и Q — конечные наборы строк. Тогда отношение производных можно определить следующим образом.
Для двух струн и некоторое правило ,
- тогда и только тогда, когда каждая строка в R является подстрокой , и ни одна строка в Q не является подстрокой
Тогда язык полуусловной грамматики тривиально представляет собой набор терминальных строк. .
Ниже приведен пример полуусловной грамматики, также как пример грамматик случайного контекста.
Случайные контекстные грамматики
[ редактировать ]Грамматика случайного контекста — это полуусловная грамматика, в которой R и Q являются подмножествами N. множества Поскольку подмножества N являются конечными множествами над , ясно, что грамматики случайного контекста действительно являются разновидностью полуусловных грамматик.
Пример
[ редактировать ]Подобно условным грамматикам, грамматики случайного контекста (и, следовательно, полуусловные грамматики) могут генерировать язык . Одна грамматика, которая может это сделать:
Позволять , где
Рассмотрим теперь постановку aaaa :
Поведение множеств R здесь тривиально: любую строку можно переписать в соответствии с ними, поскольку они не требуют наличия каких-либо подстрок. Однако поведение множеств Q более интересно. В вынуждает нас , набор Q перезаписать S , тем самым начиная процесс S -удвоения, только тогда, когда нет Y или A в строке , что означает только тогда, когда предыдущий процесс S -удвоения был полностью инициирован, исключая возможность удвоения только некоторых S . В , который переводит процесс S -удвоения на второй этап, мы не можем начать этот процесс до тех пор, пока первый этап не будет завершен и не останется больше S , которые можно попытаться удвоить, потому что набор Q препятствует применению правила, если есть S символ все еще находится в строке. В , мы завершаем этап удвоения, возвращая S обратно только тогда, когда больше не осталось X , которые нужно перезаписывать, то есть когда второй этап завершен. Мы можем проходить через эти этапы столько раз, сколько захотим, переписывая все S в XX , затем переписывая каждый X в Y, а затем каждый Y в S , и, наконец, заканчивая заменой каждого S на A , а затем на a. . Поскольку правило замены S на A запрещает применение к строке с X в ней, мы не можем применить его в середине первого этапа процесса S -удвоения, что снова не позволяет нам удвоить только некоторые S .
Упорядоченные грамматики
[ редактировать ]Упорядоченные грамматики, возможно, являются одним из самых простых расширений грамматик в контролируемую грамматическую область. Упорядоченная грамматика — это просто кортеж где N , T и S идентичны правилам в CFG, а P — набор контекстно-свободных правил перезаписи с частичным упорядочением. . Частичный порядок затем используется для определения того, какое правило применить к строке, если применимо несколько правил. Тогда отношение производных будет следующим:
Учитывая некоторые строки и некоторые правила ,
- тогда и только тогда, когда нет правила такой, что .
Пример
[ редактировать ]Как и многие другие грамматики, управляемые контекстом, упорядоченные грамматики могут обеспечивать применение правил в определенном порядке. Поскольку это важнейшее свойство предыдущих грамматик, которые могли породить язык , неудивительно, что грамматика, которая явно использует порядок правил, а не кодирует его через строковые контексты, также должна иметь возможность захватывать этот язык. И как оказалось, существует именно такая упорядоченная грамматика:
Позволять , где P — частично упорядоченное множество, описываемое диаграммой Хассе
Вывод строки aaaa прост:
На каждом шаге вывода происходит циклическая перезапись. Обратите внимание: если на пятом шаге SY у нас было четыре варианта: , первые два из которых останавливают вывод, поскольку Z невозможно переписать. В примере мы использовали чтобы вывести SS , но подумайте, выбрали ли мы вместо. Мы бы создали строку AS , варианты которой: и , оба из которых останавливают вывод. Таким образом, со строкой SY и наоборот с YS мы должны переписать Y , чтобы получить SS . То же самое справедливо и для других комбинаций, так что в целом упорядочивание приводит к остановке вывода или продолжению переписывания всех S в XX , затем всех X в Y , затем всех Y в S и так далее. , затем, наконец, все S в A , затем все A в as . Таким образом, строка можно переписать только как который производит s или как . Начиная с n = 0 , должно быть ясно, что эта грамматика генерирует только язык .
Грамматики с параллелизмом
[ редактировать ]Еще одним классом управляемых грамматик является класс грамматик с параллелизмом в применении операции перезаписи, в котором каждый шаг перезаписи может (или должен) перезаписывать более одного нетерминала одновременно. Они также бывают нескольких разновидностей: индийские параллельные грамматики, k-грамматики, грамматики с разрозненным контекстом, неупорядоченные грамматики с разбросанным контекстом и k-простые матричные грамматики. Опять же, варианты различаются тем, как определяется параллелизм.
Индийские параллельные грамматики
[ редактировать ]Индийская параллельная грамматика — это просто CFG, в которой для использования правила перезаписи все экземпляры нетерминального символа правил должны быть переписаны одновременно. Так, например, дана строка aXbYcXd с двумя экземплярами X и некоторым правилом , единственный способ переписать эту строку с помощью этого правила — переписать ее как awbYcwd ; ни awbYcXd , ни aXbYcwd не являются допустимыми перезаписями в индийской параллельной грамматике, поскольку они не переписывают все экземпляры X .
Индийские параллельные грамматики могут легко создать язык :
Позволять , где
Генерировать aabaab довольно просто:
Язык еще проще:
Позволять , где P состоит из
Уже из первого правила и требования, чтобы все экземпляры нетерминала переписывались одновременно по одному и тому же правилу, должно быть очевидно, что число S удваивается на каждом шаге перезаписи с использованием первого правила, что дает шаги вывода . Окончательное применение второго правила заменяет все S на s , показывая тем самым, как этот простой язык может создать язык .
К-грамматики
[ редактировать ]K-грамматика — это еще один вид параллельной грамматики, сильно отличающийся от индийской параллельной грамматики, но все же обладающий определенным уровнем параллелизма. В k-грамматике для некоторого числа k на каждом шаге необходимо переписать ровно k нетерминальных символов (кроме первого шага, где единственный символ в строке является начальным символом). Если в строке меньше k нетерминалов, деривация не удалась.
3-грамматика может создать язык , как можно видеть ниже:
Позволять , где P состоит из:
Со следующим выводом для aaabbbccc :
На каждом шаге вывода, кроме первого и последнего, мы использовали саморекурсивные правила. . Если бы мы не использовали рекурсивные правила, а использовали бы, скажем, , если одно из правил не является саморекурсивным, количество нетерминалов уменьшится до 2, что сделает невозможным дальнейшее выведение строки, поскольку в ней будет слишком мало нетерминалов для перезаписи.
Русские параллельные грамматики
[ редактировать ]Русские параллельные грамматики [2] находятся где-то между индийскими параллельными грамматиками и k-грамматиками, определяемыми как , где N , T и S такие же, как в контекстно-свободной грамматике, а P — набор пар , где является контекстно-свободным продукционным правилом, а k равно 1 или 2. Применение правила включает переписывание k вхождений A в w одновременно.
Разбросанные контекстные грамматики
[ редактировать ]Грамматика с рассеянным контекстом представляет собой четырехкортеж. где N , T и S определены как в контекстно-свободной грамматике, а P — это набор кортежей, называемых матрицами. , где может варьироваться в зависимости от матрицы. Отношение производных для такой грамматики имеет вид
- тогда и только тогда, когда
- , и
- , для
Таким образом, интуитивно понятно, что матрицы в грамматике разбросанного контекста предоставляют список правил, каждое из которых должно применяться к нетерминалам в строке, где эти нетерминалы появляются в том же линейном порядке, что и правила, которые их переписывают.
контекста — это грамматика рассеянного контекста, в которой для каждого правила из P каждая из его перестановок также находится в P. Неупорядоченная грамматика рассеянного Таким образом, правило и его перестановки могут быть представлены в виде набора, а не кортежей.
Пример
[ редактировать ]Грамматики с разбросанным контекстом способны описывать язык. довольно легко.
Позволять , где
Вывод aaabbbccc тогда тривиален: