Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В формальной языковой теории, контекстно-свободная грамматика , G , называется в нормальной форме Хомского (впервые описанным Хомского ) [1] , если все его продукционных правил имеют вид: [ править ]

ABC , или
Aa , или
S → ε,

где A , B и C - нетерминальные символы , буква a - конечный символ (символ, представляющий постоянное значение), S - начальный символ, а ε обозначает пустую строку . Кроме того , ни В , ни С может быть начальным символом , а третье правило производство может появиться только тогда , когда ε в L ( G ), язык производства контекстно-свободной грамматики G . [2] : 92–93,106

Каждая грамматика в нормальной форме Хомского является контекстно-свободной , и , наоборот, каждый контекстно-свободная грамматика может быть преобразована в эквивалентную одному [примечание 1] , которая находится в нормальной форме Хомского и имеет размер не больше , чем квадрат размера оригинальной грамматики .

Преобразование грамматики в нормальную форму Хомского [ править ]

Чтобы преобразовать грамматику в нормальную форму Хомского, применяется последовательность простых преобразований в определенном порядке; это описано в большинстве учебников по теории автоматов. [2] : 87–94 [3] [4] [5] Представление здесь следует за Hopcroft, Ullman (1979), но адаптировано для использования имен преобразований из Lange, Leiß (2009). [6] [примечание 2] Каждое из следующих преобразований устанавливает одно из свойств, требуемых для нормальной формы Хомского.

СТАРТ: Удалите начальный символ с правой стороны [ править ]

Введите новый начальный символ S 0 и новое правило

S 0S ,

где S - предыдущий начальный символ. Это не меняет язык, созданный грамматикой, и S 0 не встречается в правой части любого правила.

СРОК: Отменить правила с неуединенными терминалами [ править ]

Чтобы устранить каждое правило

АХ 1 ... а ... Х n

с терминальным символом a, который не является единственным символом в правой части, введите для каждого такого терминала новый нетерминальный символ N a и новое правило

N aa .

Измените каждое правило

АХ 1 ... а ... Х n

к

AX 1 ... N a ... X n .

Если в правой части встречается несколько оконечных символов, одновременно замените каждый из них соответствующим нетерминальным символом. Это не меняет язык, созданный грамматикой. [2] : 92

BIN: удалите правые части с более чем 2 нетерминалами [ править ]

Заменить каждое правило

АХ 1 Х 2 ... Х n

с более чем 2 нетерминалами X 1 , ..., X n по правилам

АХ 1 А 1 ,
А 1Х 2 А 2 ,
...,
A n -2X n -1 X n ,

где A i - новые нетерминальные символы. Опять же, это не меняет язык, созданный грамматикой. [2] : 93

DEL: отменить ε-правила [ править ]

Ε-правило - это правило вида

A → ε,

где A не S 0 , начальный символ грамматики.

Чтобы исключить все правила этой формы, сначала определите набор всех нетерминалов, которые производят ε. Хопкрофт и Ульман (1979) называют такие нетерминалы обнуляемыми и вычисляют их следующим образом:

  • Если существует правило A → ε, то A допускает значение NULL.
  • Если существует правило AX 1 ... X n и каждый X i допускает значение NULL, то A также допускает значение NULL.

Получите промежуточную грамматику, заменив каждое правило

АХ 1 ... Х n

во всех версиях с опущенным X i, допускающим значение NULL . Путем удаления из этой грамматики каждого ε-правила, если его левая часть не является начальным символом, получается преобразованная грамматика. [2] : 90

Например, в следующей грамматике с начальным символом S 0 ,

S 0AbB | C
BAA | AC
Cb | c
Aa | ε

нетерминал A , а следовательно, и B , не допускает значения NULL, в то время как ни C, ни S 0 не допускаются . Таким образом получается следующая промежуточная грамматика: [примечание 3]

S 0A b B | A b B | A b B | A b B   |   C
BAA | A A | A A | A ε A   |   A C | А С
Cb | c
Aa | ε

В этой грамматике все ε-правила были « встроены в сайт вызова». [примечание 4] На следующем этапе их можно удалить, получив грамматику:

S 0AbB | Ab | bB | б   |   C
BAA | А   |   AC | C
Cb | c
Аа

Эта грамматика создает тот же язык, что и исходный пример грамматики, а именно. { ab , aba , abaa , abab , abac , abb , abc , b , bab , bac , bb , bc , c }, но не имеет ε-правил.

UNIT: исключить правила для единиц [ править ]

Единичное правило - это правило формы

АБ ,

где A , B - нетерминальные символы. Чтобы удалить его, для каждого правила

BX 1 ... X n ,

где X 1 ... X n - строка нетерминалов и терминалов, добавьте правило

АХ 1 ... Х n

кроме случаев, когда это правило юнита уже было (или удаляется).

Порядок преобразований [ править ]

При выборе порядка, в котором должны применяться вышеуказанные преобразования, необходимо учитывать, что некоторые преобразования могут разрушить результат, достигнутый другими. Например, START повторно вводит правило юнита, если оно применяется после UNIT . В таблице показано, какие заказы принимаются.

Более того, наихудшее увеличение размера грамматики [примечание 5] зависит от порядка преобразования. Использование | G | для обозначения размера исходной грамматики G размер увеличения в худшем случае может находиться в диапазоне от | G | 2 к 2 2 | G | , в зависимости от используемого алгоритма преобразования. [6] : 7 Увеличение размера грамматики зависит от порядка между DEL и BIN . Он может быть экспоненциальным, когда сначала выполняется DEL , но в противном случае - линейным. UNIT может привести к квадратичному увеличению размера грамматики. [6] : 5Последовательности START , TERM , BIN , DEL , UNIT и START , BIN , DEL , UNIT , TERM приводят к наименьшему (т.е. квадратичному) разрушению.

Пример [ править ]

Абстрактное синтаксическое дерево из арифметического выражения « в ^ 2 + 4 * б » WRT. пример грамматики ( вверху ) и ее нормальная форма Хомского ( внизу )

Следующая грамматика с начальным символом Expr описывает упрощенную версию набора всех синтаксических допустимых арифметических выражений в языках программирования, таких как C или Algol60 . И число, и переменная здесь считаются терминальными символами для простоты, поскольку во внешнем интерфейсе компилятора их внутренняя структура обычно не рассматривается анализатором . Конечный символ «^» обозначает возведение в степень в Algol60.

На шаге «START» описанного выше алгоритма преобразования в грамматику добавляется только правило S 0Expr . После шага «TERM» грамматика выглядит так:

После шага «БИН» получается следующая грамматика:

Поскольку ε-правил нет, шаг «DEL» не меняет грамматики. После шага «UNIT» получается следующая грамматика в нормальной форме Хомского:

Н введенный в шаге «СРОК» являются PowOp , Открыть и Закрыть . Я введенный в шаге «БИН» являются AddOp_Term , MulOp_Factor , PowOp_Primary и Expr_Close .

Альтернативное определение [ править ]

Сокращенная форма Хомского [ править ]

Другой способ [2] : 92 [7] определить нормальную форму Хомского:

Формальная грамматика в Хомский уменьшенный форму , если все ее правила производства имеют вид:

или же
,

где , и - нетерминальные символы, а - конечный символ . При использовании этого определения или может быть начальным символом. Только те контекстно-свободные грамматики, которые не генерируют пустую строку, могут быть преобразованы в сокращенную форму Хомского.

Нормальная форма Флойда [ править ]

В письме, в котором он предложил термин « форма Бэкуса – Наура» (BNF), Дональд Э. Кнут подразумевал BNF, «синтаксис, в котором все определения имеют такую ​​форму, можно сказать, что она находится в« нормальной форме Флойда »»

или же
или же
,

где , и - нетерминальные символы, а - конечный символ , поскольку Роберт У. Флойд обнаружил, что любой синтаксис BNF может быть преобразован в указанный выше в 1961 году. [8] Но он отозвал этот термин, «поскольку многие люди, несомненно, использовали его независимо простой факт в их собственной работе, и дело только в основных соображениях примечания Флойда ". [9] В то время как в примечании Флойда цитируется оригинальная статья Хомского 1959 года, в письме Кнута нет.

Заявление [ править ]

Помимо своей теоретической значимости, преобразование CNF используется в некоторых алгоритмах в качестве этапа предварительной обработки, например, в алгоритме CYK , восходящем синтаксическом анализе для контекстно-свободных грамматик и его варианте вероятностного CKY. [10]

См. Также [ править ]

  • Форма Бэкуса – Наура
  • CYK алгоритм
  • Нормальная форма Грейбаха
  • Курода нормальная форма
  • Лемма о накачке для контекстно-свободных языков - ее доказательство опирается на нормальную форму Хомского

Заметки [ править ]

  1. ^ то есть тот, который производит тот же язык
  2. ^ Например, Hopcroft, Ullman (1979) объединили TERM и BIN в одно преобразование.
  3. ^ с указанием сохраненного и пропущенного нетерминального N посредством N и N , соответственно
  4. ^ Если бы грамматика имела правило S 0 → ε, она не могла бы быть «встроенной», так как в ней не было «сайтов вызова». Поэтому его нельзя было удалить на следующем шаге.
  5. ^ т.е. письменная длина, измеряемая в символах

Ссылки [ править ]

  1. ^ Хомский, Ноам (1959). «О некоторых формальных свойствах грамматик» . Информация и контроль . 2 (2): 137–167. DOI : 10.1016 / S0019-9958 (59) 90362-6 . Здесь: раздел 6, стр. 152 и далее.
  2. ^ a b c d e f Хопкрофт, Джон Э .; Ульман, Джеффри Д. (1979). Введение в теорию автоматов, языки и вычисления . Ридинг, Массачусетс: издательство Addison-Wesley Publishing. ISBN 978-0-201-02988-8.
  3. ^ Хопкрофт, Джон Э .; Мотвани, Раджив; Ульман, Джеффри Д. (2006). Введение в теорию автоматов, языки и вычисления (3-е изд.). Эддисон-Уэсли. ISBN 978-0-321-45536-9. Раздел 7.1.5, стр. 272
  4. ^ Рич, Элейн (2007). Автоматы, вычислимость и сложность: теория и приложения (1-е изд.). Прентис-Холл. ISBN 978-0132288064.[ требуется страница ]
  5. ^ Вегенер, Инго (1993). Теоретическая информатика - Eine algorithmmenorientierte Einführung . Leitfäden und Mongraphien der Informatik (на немецком языке). Штутгарт: BG Teubner. ISBN 978-3-519-02123-0.Раздел 6.2 «Die Chomsky-Normalform für kontextfreie Grammatiken», с. 149–152
  6. ^ a b c Ланге, Мартин; Лайсс, Ганс (2009). «В CNF или не в CNF? Эффективная, но презентабельная версия алгоритма CYK» (PDF) . Informatica Didactica . 8 .
  7. ^ Хопкрофт и др. (2006) [ необходима страница ]
  8. ^ Флойд, Роберт В. (1961). «Заметка о математической индукции в грамматиках фразовой структуры» (PDF) . Информация и контроль . 4 (4): 353–358. DOI : 10.1016 / S0019-9958 (61) 80052-1 . Здесь: с.354
  9. ^ Кнут, Дональд Э. (декабрь 1964 г.). «Нормальная форма Бэкуса против формы Бэкуса Наура». Коммуникации ACM . 7 (12): 735–736. DOI : 10.1145 / 355588.365140 . S2CID 47537431 . 
  10. ^ Джурафски, Даниэль; Мартин, Джеймс Х. (2008). Обработка речи и языка (2-е изд.). Пирсон Прентис Холл. п. 465. ISBN 978-0-13-187321-6.

Дальнейшее чтение [ править ]

  • Коул, Ричард. Преобразование CFG в CNF (нормальная форма Хомского) , 17 октября 2007 г. (pdf) - использует порядок TERM, BIN, START, DEL, UNIT.
  • Джон Мартин (2003). Введение в языки и теорию вычислений . Макгроу Хилл. ISBN 978-0-07-232200-2. (Страницы 237–240 раздела 6.6: упрощенные и нормальные формы.)
  • Майкл Сипсер (1997). Введение в теорию вычислений . PWS Publishing. ISBN 978-0-534-94728-6. (Страницы 98–101 раздела 2.1: контекстно-свободные грамматики. Страница 156.)
  • Сипсер, Майкл. Введение в теорию вычислений, 2-е издание.
  • Александр Медуна (6 декабря 2012 г.). Автоматы и языки: теория и приложения . Springer Science & Business Media. ISBN 978-1-4471-0501-5.