Индексированная грамматика - Indexed grammar

Индексированные грамматики являются обобщением контекстно-свободные грамматики в этом нетерминалы снабжены списками флаги, или же индексные символы.Язык, созданный индексированной грамматикой, называется индексированный язык.

Определение

Современное определение Хопкрофта и Ульмана

В современных публикациях после Хопкрофта и Ульмана (1979),[2]индексированная грамматика формально определяется как 5-кортеж грамм = ⟨N,Т,F,п,S⟩ куда

В продуктах, а также в производных индексированных грамматик строка ("стек") σF* индексных символов присоединяется к каждому нетерминальному символу АN, обозначаемый А[σ].[примечание 1]За терминальными символами не могут следовать стеки индексов. σF* и строка α ∈ (NТ)* нетерминальных и терминальных символов, α[σ] обозначает результат прикрепления [σ] на каждый нетерминал в α; например, если α равно а B C d E с а,dТ терминал, и B,C,EN нетерминальные символы, то α[σ] обозначает а B[σ] C[σ] d E[σ].Используя эти обозначения, каждая продукция в п должен иметь форму

  1. А[σ] → α [σ],
  2. А[σ] → B[жσ], или
  3. А[жσ] → α [σ],

куда А, BN нетерминальные символы, жF это индекс, σF* строка индексных символов, а α ∈ (NТ)* представляет собой строку нетерминальных и терминальных символов. Некоторые авторы пишут ".." вместо "σ"для стека индекса в производственных правилах; правило типа 1, 2 и 3 затем читает А[..]→α[..],   А[..]→B[ж..], и А[ж..]→α[..], соответственно.

Выводы аналогичны тем, что в контекстно-свободная грамматика за исключением стека индексов, прикрепленного к каждому нетерминальному символу. А[σ] → B[σ]C[σ] применяется индексный стек А копируется на оба B и CБолее того, правило может помещать индексный символ в стек или выталкивать свой «самый верхний» (т. Е. Крайний левый) индексный символ.

Формально отношение ⇒ («прямой вывод») определено на множестве (N[F*]∪Т)* "предложений" следующим образом:

  1. Если А[σ] → α[σ] - продукция типа 1, то β А[φ] γβ α[φ] γ, используя приведенное выше определение. То есть стек индекса левой стороны правила φ копируется в каждый нетерминал правой части.
  2. Если А[σ] → B[] - продукция типа 2, то β А[φ] γβ B[] γ. То есть стек индекса правой стороны получается из стека левой стороны φ толкая ж на него.
  3. Если А[] → α[σ] - продукция типа 3, то β А[] γβ α[φ] γ, снова используя определение α[σ]. То есть первый индекс ж извлекается из стека левой стороны, который затем распределяется по каждому нетерминалу правой стороны.

Как обычно, выводное соотношение определяется как рефлексивное переходное замыкание прямого происхождения ⇒. L(грамм) = { шТ*: S ш } - это набор всех строк терминальных символов, производных от начального символа.

Оригинальное определение Ахо

Исторически концепция индексированных грамматик была впервые введена Альфред Ахо (1968)[3] используя другой формализм: он определил индексированную грамматику как набор из 5 (N,Т,F,п,S) куда

  1. N конечный алфавит переменных или нетерминальные символы
  2. Т конечный алфавит терминальных символов
  3. F2N × (NТ)* конечный набор так называемых флаги (каждый флаг сам по себе представляет собой набор так называемых индекс производства)
  4. пN × (NF*Т)* конечный набор постановки
  5. SN это начальный символ

Прямые производные были следующими:

  • Производство п = (АИкс1η1Иксkηk) из п соответствует нетерминальному АN за которой следует (возможно, пустая) строка флагов ζF*. В контексте, γ δ, через п, происходит от γ Икс1θ1Иксkθk δ, куда θя = ηяζ если Икся было нетерминальным и пустым словом в противном случае. Старые флаги А поэтому скопировано к каждому новому нетерминалу, производимому п. Каждое такое производство может быть смоделировано соответствующими производствами типа 1 и 2 в формализме Хопкрофта / Ульмана.
  • Индекс производства п = (АИкс1Иксk) ∈ ж совпадения Afζ (флаг ж он должен соответствовать первому символу, следующему за нетерминальным А) и копирует оставшуюся строку индекса ζ к каждому новому нетерминалу: γ Afζ δ происходит от γ Икс1θ1Иксkθk δ, куда θя это пустое слово, когда Икся это терминал и ζ когда это нетерминал. Каждая такая продукция соответствует продукции типа 3 в формализме Хопкрофта / Ульмана.

Этот формализм, например, использовался Хаяси (1973, с. 65-66).[4]

Примеры

На практике стопки индексов могут подсчитывать и запоминать, какие правила применялись и в каком порядке. Например, индексированные грамматики могут описывать контекстно-зависимый язык троек слов { www : ш ∈ {а,б}* }:

S[σ]S[]Т[]а Т[σ]
S[σ]S[]Т[]б Т[σ]
S[σ]Т[σ] Т[σ] Т[σ]      Т[]ε

Вывод abbabbabb затем

S[]S[грамм]S[gg]S[фгг]Т[фгг] Т[фгг] Т[фгг]а Т[gg] Т[фгг] Т[фгг]ab Т[грамм] Т[фгг] Т[фгг]abb Т[] Т[фгг] Т[фгг]abb Т[фгг] Т[фгг]...abb abb Т[фгг]...abb abb abb.

Другой пример: грамматика грамм = ⟨ {S,Т,А,B,C}, {а,б,c}, {ж,грамм}, п, S ⟩ Производит язык { апбпcп: п ≥ 1}, где производственное множество п состоит из

S[σ] → Т[]А[] → а А[σ]А[] → а
Т[σ] → Т[]B[] → б B[σ]B[] → б
Т[σ] → А[σ] B[σ] C[σ]      C[] → c C[σ]      C[] → c

Пример вывода:

S[]Т[грамм]Т[фг]А[фг] B[фг] C[фг]аА[грамм] B[фг] C[фг]аА[грамм] bB[грамм] C[фг]аА[грамм] bB[грамм] cC[грамм]аа bB[грамм] cC[грамм]аа bb cC[грамм]аа bb cc.

Оба примера языков не являются контекстно-независимыми по лемма о накачке.

Характеристики

Хопкрофт и Ульман склонны рассматривать индексированные языки как «естественный» класс, поскольку они порождаются несколькими формализмами, отличными от индексированных грамматик, а именно.[5]

Хаяси[4] обобщил лемма о накачке к индексированным грамматикам. И наоборот, Гилман[10][11] дает «лемму сжатия» для индексированных языков.

Линейные индексированные грамматики

Джеральд Газдар определил второй класс, линейные индексированные грамматики (LIG),[14] требуя, чтобы не более одного нетерминала в каждом продукте указывалось как принимающее стек,[заметка 2]тогда как в обычной индексированной грамматике все нетерминалы получают копии стека. Формально линейная индексированная грамматика определяется так же, как и обычная индексированная грамматика, но требования к форме продукта изменены на:

  1. А[σ] → α[] B[σ] β[],
  2. А[σ] → α[] B[] β[],
  3. А[] → α[] B[σ] β[],

куда А, B, ж, σ, α используются как над, и β ∈ (NТ)* представляет собой строку нетерминальных и конечных символов, например α.[заметка 3] Кроме того, отношение прямого вывода ⇒ определяется аналогично приведенному выше. Этот новый класс грамматик определяет строго меньший класс языков,[15] который принадлежит слегка контекстно-зависимый классы.

Язык { www : ш ∈ {а,б}* } генерируется индексированной грамматикой, но не линейной индексированной грамматикой, в то время как оба { ww : ш ∈ {а,б}* } и { ап бп cп : n ≥ 1} порождаются линейной индексированной грамматикой.

Если допускаются как исходные, так и измененные производственные правила, языковой класс остается индексируемыми языками.[16]

Пример

Обозначая σ произвольный набор символов стека, мы можем определить грамматику для языка L = {ап бп cп | п ≥ 1 }[примечание 4] в качестве

S[σ]в качестве[] c
S[σ]Т[σ]
Т[]Т[σ] б
Т[]ε

Чтобы получить строку abc у нас есть шаги:

S[] ⇒ в качестве[ж]cв[ж]cв[]до н.эabc

По аналогии:

S[] ⇒ в качестве[ж]caaS[ff]ccааТ[ff]ccааТ[ж]скрытая копияааТ[]bbccaabbcc

Вычислительная мощность

Линейно индексированные языки являются подмножеством индексированных языков, и, таким образом, все LIG могут быть перекодированы как IG, что делает LIG строго менее мощными, чем IG. Преобразование LIG в IG относительно просто.[17] Правила LIG в целом выглядят примерно так , по модулю push / pop часть правила перезаписи. Символы и представляют строки терминальных и / или нетерминальных символов, и любой нетерминальный символ в любом из них должен иметь пустой стек по определению LIG. Это, конечно, противоречит тому, как определены IG: в IG нетерминалы, чьи стеки не передаются или не извлекаются, должны иметь точно такой же стек, что и перезаписанный нетерминал. Таким образом, каким-то образом нам нужно иметь нетерминалы в и которые, несмотря на непустые стеки, ведут себя так, как если бы у них были пустые стеки.

Рассмотрим правило в качестве примера. При преобразовании этого в IG замена для должно быть несколько это ведет себя точно так же, как независимо от того, что является. Для этого мы можем просто иметь пару правил, которые принимают любые куда не пуст, а выталкивает символы из стека. Затем, когда стек пуст, его можно переписать как .

Мы можем применить это в целом, чтобы получить IG из LIG. Так, например, если LIG для языка как следует:

Правило предложения здесь не является правилом IG, но, используя приведенный выше алгоритм преобразования, мы можем определить новые правила для , изменив грамматику на:

Каждое правило теперь соответствует определению IG, в котором все нетерминалы в правой части правила перезаписи получают копию стека перезаписанного символа. Таким образом, индексированные грамматики могут описывать все языки, которые могут описывать линейно индексированные грамматики.

Отношение к другому формализму

Виджай-Шанкер и Вейр (1994)[18] демонстрирует, что линейные индексированные грамматики, Комбинаторные категориальные грамматики, Грамматики, примыкающие к дереву, и Головные грамматики все они определяют один и тот же класс строковых языков. Их формальное определение линейных индексированных грамматик[19] отличается от над.[требуется разъяснение ]

LIG (и их слабо эквиваленты ) строго менее выразительны (то есть они порождают собственное подмножество), чем языки, порожденные другим семейством слабоэквивалентного формализма, которые включают: LCFRS, MCTAG, MCFG и минималистская грамматика (MG). Последнее семейство может (также) быть проанализировано в полиномиальное время.[20]

Грамматики распределенного индекса

Другая форма индексированных грамматик, введенная Штаудахером (1993),[12] - это класс грамматик распределенного индекса (DIG). Что отличает DIG от индексированных грамматик Aho, так это распространение индексов. В отличие от IG Aho, которые распределяют весь стек символов всем нетерминалам во время операции перезаписи, DIG делят стек на подстаки и распределяют подстаки по выбранным нетерминалам.

Общая схема правила для бинарно распределяемого правила DIG - это форма

Икс[ж1...жяжя+1...жп] → α Y[f1...жя] β Z[жя+1...жп] γ

Где α, β и γ - произвольные терминальные строки. Для строки с тройным распределением:

Икс[ж1...жяжя+1...жjжj+1...жп] → α Y[f1...жя] β Z[жя+1...жj] γ W[жj+1...жп] η

И так далее для большего количества нетерминалов в правой части правила перезаписи. В общем, если есть м нетерминалы в правой части правила перезаписи, стек разбивается на разделы м способами и распределены среди новых нетерминалов. Обратите внимание, что существует особый случай, когда раздел пуст, что фактически делает правило правилом LIG. Таким образом, языки распределенного индекса являются надмножеством языков с линейным индексом.

Смотрите также

Примечания

  1. ^ «[» и «]» являются метасимволами для обозначения стека.
  2. ^ все остальные нетерминалы получают пустой стек
  3. ^ а б Чтобы вообще сгенерировать любую строку, нужно разрешить некоторые произведения, не имеющие нетерминального символа справа. Однако Газдар не стал обсуждать этот вопрос.
  4. ^ Ср. правильно проиндексированная грамматика для данного языка над. Последнее правило, а именно. Т[] → ε линейной индексированной грамматики не соответствует определению Газдара в строгом смысле, ср. [заметка 3]

Рекомендации

  1. ^ а б Хопкрофт, John E .; Джеффри Д. Уллман (1979). Введение в теорию автоматов, языки и вычисления. Эддисон-Уэсли. ISBN  978-0-201-02988-8.
  2. ^ Хопкрофт и Ульман (1979),[1] Раздел 14.3, с.389-390. Этот раздел опущен во 2-м издании 2003 г.
  3. ^ Ахо, Альфред (1968). «Индексированные грамматики - расширение контекстно-свободных грамматик». Журнал ACM. 15 (4): 647–671. Дои:10.1145/321479.321488.
  4. ^ а б Хаяси, Такеши (1973). "О деревьях происхождения индексированных грамматик: расширение uvwxy-теорема ". Публикации НИИ математических наук. 9: 61–92. Дои:10.2977 / prims / 1195192738.
  5. ^ Хопкрофт и Ульман (1979),[1] Библиографические примечания, с.394-395
  6. ^ Альфред Ахо (1969). «Вложенные автоматы стека». Журнал ACM. 16 (3): 383–406. Дои:10.1145/321526.321529.
  7. ^ Майкл Дж. Фишер (1968). «Грамматики с Macro-Like Productions». Proc. 9-я Ann. IEEE Symp. по теории коммутации и автоматов (SWAT). С. 131–142. Дои:10.1109 / SWAT.1968.12.
  8. ^ Шейла А. Грейбах (1970). «Полная AFL и вложенная итерационная замена». Информация и контроль. 16 (1): 7–35. Дои:10.1016 / s0019-9958 (70) 80039-0.
  9. ^ Т.С.Е. Майбаум (1974). «Обобщенный подход к формальным языкам». Журнал компьютерных и системных наук. 8 (3): 409–439. Дои:10.1016 / s0022-0000 (74) 80031-0.
  10. ^ Роберт Х. Гилман (1996). «Лемма о сжатии для индексированных языков». Теоретическая информатика. 163 (1–2): 277–281. arXiv:математика / 9509205. Дои:10.1016/0304-3975(96)00244-7.
  11. ^ Роберт Х. Гилман (сентябрь 1995 г.). «Лемма о сжатии для индексированных языков». arXiv:математика / 9509205.
  12. ^ а б Стаудахер, Питер (1993), Новые границы за пределами контекстной свободы: DI-грамматики (DIG) и DI-автоматы. (PDF), стр. 358–367, архивировано с оригинал (PDF) в 2006-07-19
  13. ^ Дэвид Дж. Вейр; Аравинд К. Джоши (1988). «Комбинированные категориальные грамматики: порождающая сила и связь с линейными бесконтекстными системами перезаписи» (PDF). Proc. 26-е заседание доц. Comput. Линг. С. 278–285.
  14. ^ Согласно Штаудахеру (1993, с. 361 слева, раздел 2.2),[12] название "линейные индексированные грамматики" не использовалось в статье Газдара 1988 года, но появилось позже, например в Weir and Joshi (1988).[13]
  15. ^ Газдар, Джеральд (1988). «Применимость индексированных грамматик к естественным языкам». В У. Рейле и К. Рорере (ред.). Анализ естественного языка и лингвистические теории. Исследования в области лингвистики и философии. 35. Издательство Д. Рейдел. С. 69–94. ISBN  978-1-55608-055-5.
  16. ^ Газдар (1988), Приложение, стр.89
  17. ^ Газдар 1988, Приложение, стр.89-91
  18. ^ Виджай-Шанкер, К .; Вейр, Дэвид Дж. 1994. (1994). «Эквивалентность четырех расширений контекстно-свободных грамматик». Математическая теория систем. 27 (6): 511–546. Дои:10.1007 / bf01191624.
  19. ^ стр.517-518
  20. ^ Йохан F.A.K. ван Бентем; Алиса тер Мёлен (2010). Справочник по логике и языку (2-е изд.). Эльзевир. п. 404. ISBN  978-0-444-53727-0.

внешняя ссылка