Формальные грамматики — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м (Обозначения)
(Арифметические выражения)
Строка 60: Строка 60:
  
 
===Арифметические выражения===
 
===Арифметические выражения===
<tex>\Sigma = \{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, +, *, /, -, (, )\}</tex>
+
<tex>\Sigma = \{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, *, /, -, (, )\}</tex>
 
<br/>
 
<br/>
  

Версия 22:20, 23 июня 2018

Определения

Определение:
Формальная грамматика (англ. Formal grammar) — способ описания формального языка, представляющий собой четверку

Γ=Σ,N,SN,PN+×(ΣN), где:

  • Σалфавит, элементы которого называют терминалами (англ. terminals);
  • N — множество, элементы которого называют нетерминалами (англ. nonterminals);
  • S — начальный символ грамматики (англ. start symbol);
  • P — набор правил вывода (англ. production rules или productions) αβ.


Определение:
β выводится из α за один шаг (αβ):
  1. α=α1α2α3
  2. β=β1β2β3
  3. α1=β1, α3=β3, α2β2P.


Определение:
β выводится из α за ноль или более шагов (αβ): γ1,γ2,,γn:αγ1γ2γnβ ( Рефлексивно-транзитивное замыкание отношения ).


Определение:
Языком грамматики (англ. Language of grammar) называется L(Γ)={ωΣSω}.


Определение:
Сентенциальная форма (англ. Sentential form) — последовательность терминалов и нетерминалов, выводимых из начального символа.


Обозначения

  • Нетерминалы обозначаются заглавными буквами латинского алфавита (например: A,B,C).
  • Терминалы обозначаются строчными буквами из начала латинского алфавита (например: a,b,c).
  • Последовательности из терминалов (слова) обозначают строчными буквами из конца латинского или греческого алфавита (например: ω).
  • Последовательности из терминалов и нетерминалов обозначаются строчными буквами из начала греческого алфавита (например: β,α).

Примеры грамматик

Правильные скобочные последовательности

Σ={(,)}
S(S)SSSSε

Вывод строки (()()):
S(S)(SS)((S)S)((S)(S))(()(S))(()()).

Вывод строки ((()())(())):
S(S)(SS)((S)S)((S)(S))((SS)((S)))(((S)S)((S)))((()S)((S)))
((()(S))((S)))((()())((S)))((()())(())).

Арифметические выражения

Σ={0,1,2,3,4,5,6,7,8,9,+,,/,,(,)}

SSOSS(S)S0SDNO+/D123456789NNNεN0123456789.

Вывод строки 2+22: SSOSSOSOS2OSOS2O2OS2O2O22+2O22+22.

Левосторонний вывод этой же строки: SSOS2OS2+S2+SOS2+2OS2+2S2+22.

Язык 0n1n2n

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

Σ={0,1,2}

S012S0TS2T00TT111

Вывод строки 000111222 :

S0TS20T0TS220T0T012220T00T122200T0T1222000TT1222000T11222000111222

Данная грамматика описывает этот язык, так как мы можем вывести любую строку одним методом. n1 раз выполняем правило вывода S0TS2. Потом выполняем правило S012, n1 раз выполняем T00T. После этого у нас получается строка 0nTn12n. Выполняем n1 раз последнее правило и в результате получаем искомую строку.

См. также

Источники информации

  • Wikipedia — Formal grammar
  • Wikipedia — Formal language
  • Хопкрофт Д., Мотвани Р., Ульман Д. — Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)