Эта статья требует дополнительных ссылок для проверки . ( декабрь 2018 г. ) ( Узнайте, как и когда удалить это сообщение-шаблон ) |
В теоретическом информатики и теории формальных языков , регулярная грамматика является формальной грамматикой , которая является правым регулярной или левым регулярным. Каждая регулярная грамматика описывает обычный язык .
Строго регулярные грамматики [ править ]
Правая кнопка регулярная грамматика (также называется правым линейная грамматика ) является формальной грамматикой ( N , Σ, P , S ) таким образом, что все правила производства в P имеют одну из следующих форм:
- A → a , где A - нетерминал в N, а a - терминал в Σ
- A → aB , где A и B нетерминалы в N, а a принадлежит Σ
- A → ε, где A находится в N, а ε обозначает пустую строку , то есть строку длины 0.
В левой регулярной грамматике (также называемой левой линейной грамматикой ) все правила подчиняются формам
- A → a , где A - нетерминал в N, а a - терминал в Σ
- A → Ba , где A и B лежат в N, а a принадлежит Σ
- A → ε, где A находится в N, а ε - пустая строка.
Регулярная грамматика является левой регулярной или правым регулярной грамматикой.
Некоторые учебники и статьи запрещают пустые производственные правила и предполагают, что пустая строка отсутствует в языках.
Расширенные регулярные грамматики [ править ]
Расширенное право-регулярная грамматика является один , в котором все правила ПОВИНУЕТСЯ один из
- A → w , где A - нетерминал в N, а w находится в (возможно, пустой) строке терминалов Σ *
- A → wB , где A и B принадлежат N, а w принадлежит Σ * .
Некоторые авторы называют этот тип грамматики правильно-регулярной грамматикой (или право-линейной грамматикой ) [1], а тип выше - строго правильно-регулярной грамматикой (или строго право-линейной грамматикой ). [2]
Расширенная левая регулярная грамматика является один , в котором все правила повинуются один из
- A → w , где A нетерминал в N, а w принадлежит Σ *
- A → Bw , где A и B принадлежат N, а w принадлежит Σ * .
Примеры [ править ]
Пример правильной справа грамматики G с N = {S, A}, Σ = {a, b, c}, P состоит из следующих правил
- S → aS
- S → bA
- A → ε
- А → сА
и S - начальный символ. Эта грамматика описывает тот же язык, что и регулярное выражение a * bc *, а именно. набор всех строк, состоящий из произвольного числа " a ", за которым следует один " b ", за которым следует произвольное количество " c ".
Несколько более длинная, но более явная расширенная правосторонняя грамматика G для того же регулярного выражения задается формулой N = {S, A, B, C}, Σ = {a, b, c}, где P состоит из следующих правил:
- S → A
- А → а
- А → Б
- B → bC
- C → ε
- С → сС
... где каждая заглавная буква соответствует фразам, начинающимся со следующей позиции в регулярном выражении.
В качестве примера из области языков программирования набор всех строк, обозначающих число с плавающей запятой, может быть описан расширенной правой регулярной грамматикой G с N = {S, A, B, C, D, E, F}, Σ = {0,1,2,3,4,5,6,7,8,9, +, -,., E}, где S - начальный символ, а P состоит из следующих правил:
S → + А А → 0А В → 0С С → 0С D → + E E → 0F F → 0F S → -A А → 1А Б → 1С С → 1С D → -E E → 1F F → 1F S → A А → 2А В → 2С С → 2С D → E E → 2F F → 2F А → 3А В → 3С С → 3С E → 3F F → 3F А → 4А В → 4С С → 4С E → 4F F → 4F А → 5А В → 5С С → 5С E → 5F F → 5F А → 6А В → 6С С → 6С E → 6F F → 6F А → 7А В → 7С С → 7С E → 7F F → 7F А → 8А В → 8С С → 8С E → 8F F → 8F А → 9А В → 9С С → 9С E → 9F F → 9F А → .B C → eD F → ε А → Б C → ε
Выразительная сила [ править ]
Существует прямое взаимно однозначное соответствие между правилами (строго) правильно регулярной грамматики и правил недетерминированного конечного автомата , так что грамматика порождает в точности тот язык, который принимает автомат. [3] Следовательно, правильно-регулярные грамматики порождают в точности все регулярные языки . Леворегулярные грамматики описывают инверсии всех таких языков, то есть в точности и регулярные языки.
Каждая строгая правильно-регулярная грамматика является расширенной правильно-регулярной, в то время как каждая расширенная право-регулярная грамматика может быть сделана строгой путем вставки новых нетерминалов, так что результат генерирует тот же язык; следовательно, расширенные правые регулярные грамматики также порождают регулярные языки. Аналогичным образом поступают и расширенные лево-регулярные грамматики.
Если пустая продукция запрещена, могут быть созданы только все обычные языки, которые не включают пустую строку. [4]
Хотя обычные грамматики могут описывать только обычные языки, обратное неверно: обычные языки также могут быть описаны нерегулярными грамматиками.
Смешивание левых регулярных и правых регулярных правил [ править ]
Если разрешено смешивание лево-регулярных и правосторонних правил, у нас все еще есть линейная грамматика , но не обязательно регулярная. Более того, такая грамматика не должна генерировать регулярный язык: все линейные грамматики могут быть легко приведены в эту форму, и, следовательно, такие грамматики могут генерировать в точности все линейные языки , включая нерегулярные.
Например, грамматика G с N = {S, A}, Σ = {a, b}, P с начальным символом S и правилами
- S → aA
- А → Sb
- S → ε
порождает парадигматический нерегулярный линейный язык.
См. Также [ править ]
- Регулярное выражение , компактная запись для регулярных грамматик
- Обычная древовидная грамматика , обобщение от строк к деревьям
- Грамматика префиксов
- Иерархия Хомского
- Перрин, Доминик (1990), «Конечные автоматы», в Левен, Ян ван (редактор), Формальные модели и семантика , Справочник по теоретической информатике, B , Elsevier, стр. 1–58.
- Пин, Жан-Эрик (октябрь 2012 г.). Математические основы теории автоматов (PDF) ., глава III
Ссылки [ править ]
- ^ Джон Э. Хопкрофт и Джеффри Д. Ульман (1979). Введение в теорию автоматов, языки и вычисления . Ридинг / МА: Эддисон-Уэсли. ISBN 0-201-02988-X.Здесь: стр.217 (левые, правые регулярные грамматики как подклассы контекстно-свободных грамматик ), стр.79 (контекстно-свободные грамматики)
- ^ Хопкрофт и Ульман, 1979 (стр. 229, упражнение 9.2) называют это нормальной формой для праволинейных грамматик.
- ^ Hopcroft и Ульман 1979, p.218-219, теорема 9.1 и 9.2
- ^ Hopcroft и Ульман 1979, p.229, Упражнение 9.2