Обычная грамматика - Regular grammar

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

Строго регулярные грамматики

А правильная грамматика (также называемый праволинейная грамматика ) это формальная грамматика (N, Σ, п, S) такой, что все правила производства в п имеют одну из следующих форм:

  1. Аа, куда А это нетерминальный в N и а является терминалом в Σ
  2. АаБ, куда А и B не являются терминалами в N и а находится в Σ
  3. А → ε, где А в N а ε обозначает пустой строкой, т.е. строка длины 0.

В лево-регулярная грамматика (также называемый леволинейная грамматика ) все правила подчиняются формам

  1. Аа, куда А нетерминал в N и а является терминалом в Σ
  2. АБа, куда А и B находятся в N и а находится в Σ
  3. А → ε, где А в N а ε - пустая строка.

А регулярная грамматика является лево-регулярной или правосторонней грамматикой.

Некоторые учебники и статьи запрещают пустые производственные правила и предполагают, что пустая строка отсутствует в языках.

Расширенные регулярные грамматики

An расширенная правосторонняя грамматика это тот, в котором все правила подчиняются одному из

  1. Аш, куда А нетерминал в N и ш находится в (возможно, пустой) цепочке терминалов Σ*
  2. АwB, куда А и B находятся в N и ш находится в Σ*.

Некоторые авторы называют этот тип грамматики правильная грамматика (или же праволинейная грамматика)[1] и тип над строго правильно-регулярная грамматика (или же строго право-линейная грамматика).[2]

An расширенная лево-регулярная грамматика это тот, в котором все правила подчиняются одному из

  1. Аш, куда А нетерминал в N и ш находится в Σ*
  2. АЧб, куда А и B находятся в N и ш находится в Σ*.

Примеры

Пример правильно регулярной грамматики грамм с N = {S, A}, Σ = {a, b, c}, п состоит из следующих правил

S → aS
S → bA
A → ε
А → сА

и S - начальный символ. Эта грамматика описывает тот же язык, что и регулярное выражение a * bc *, а именно. набор всех строк, состоящий из произвольного числа "а"s, за которым следует сингл"б", а затем произвольно много"c"с.

Несколько более длинная, но более явная расширенная правосторонняя грамматика грамм для того же регулярного выражения дается N = {S, A, B, C}, Σ = {a, b, c}, где п состоит из следующих правил:

S → A
А → а
А → Б
B → bC
C → ε
С → сС

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

В качестве примера из области языков программирования множество всех строк, обозначающих число с плавающей запятой, может быть описано расширенной правильной правильной грамматикой. грамм с N = {S, A, B, C, D, E, F}, Σ = {0,1,2,3,4,5,6,7,8,9, +, -,., E}, где S - начальный символ, а п состоит из следующих правил:

S → + АА → 0АВ → 0СС → 0СD → + EE → 0FF → 0F
S → -AА → 1АБ → 1СС → 1СD → -EE → 1FF → 1F
S → AА → 2АВ → 2СС → 2СD → EE → 2FF → 2F
А → 3АВ → 3СС → 3СE → 3FF → 3F
А → 4АВ → 4СС → 4СE → 4FF → 4F
А → 5АВ → 5СС → 5СE → 5FF → 5F
А → 6АВ → 6СС → 6СE → 6FF → 6F
А → 7АВ → 7СС → 7СE → 7FF → 7F
А → 8АВ → 8СС → 8СE → 8FF → 8F
А → 9АВ → 9СС → 9СE → 9FF → 9F
А → .BC → eDF → ε
А → БC → ε

Выразительная сила

Существует прямое взаимно однозначное соответствие между правилами (строго) праворегулярной грамматики и правилами грамматики. недетерминированный конечный автомат, так что грамматика генерирует именно тот язык, который принимает автомат.[3] Следовательно, правильно-регулярные грамматики порождают в точности все обычные языки. Леворегулярные грамматики описывают инверсии всех таких языков, то есть в точности и регулярные языки.

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

Если пустое производство запрещено, могут быть сгенерированы только все обычные языки, которые не включают пустую строку.[4]

Хотя обычные грамматики могут описывать только обычные языки, обратное неверно: обычные языки также могут быть описаны с помощью нерегулярных грамматик.

Смешивание левых регулярных и правых регулярных правил

Если разрешено смешивание левых регулярных и правых регулярных правил, мы все равно имеем линейная грамматика, но не обязательно регулярный. Более того, такая грамматика не обязательно должна генерировать регулярный язык: все линейные грамматики могут быть легко приведены в эту форму, и, следовательно, такие грамматики могут генерировать в точности все линейные языки, в том числе нерегулярные.

Например, грамматика грамм с N = {S, A}, Σ = {a, b}, п с начальным символом S и правила

S → aA
А → Sb
S → ε

генерирует , парадигматический нерегулярный линейный язык.

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

  • Регулярное выражение, компактная запись для регулярных грамматик
  • Грамматика регулярных деревьев, обобщение от строк к деревьям
  • Грамматика префиксов
  • Иерархия Хомского
  • Перрен, Доминик (1990), «Конечные автоматы», в Левен, Ян ван (редактор), Формальные модели и семантика, Справочник по теоретической информатике, B, Elsevier, стр. 1–58.
  • Пин, Жан-Эрик (Октябрь 2012 г.). Математические основы теории автоматов (PDF)., глава III

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

  1. ^ Джон Э. Хопкрофт и Джеффри Д. Уллман (1979). Введение в теорию автоматов, языки и вычисления. Ридинг / МА: Эддисон-Уэсли. ISBN  0-201-02988-X. Здесь: с.217 (левые, правые регулярные грамматики как подклассы контекстно-свободные грамматики ), стр.79 (контекстно-свободные грамматики)
  2. ^ Хопкрофт и Ульман, 1979 (с. 229, упражнение 9.2) называют это нормальной формой для праволинейных грамматик.
  3. ^ Хопкрофт и Ульман, 1979, с. 218-219, теоремы 9.1 и 9.2.
  4. ^ Хопкрофт и Ульман, 1979, с. 229, упражнение 9.2.