Формальные порождающие грамматики
Порождающей грамматикой называется упорядоченная четверка G=< VT,VN, S, R>, где VT - алфавит терминальных или основных символов; VN — алфавит нетерминальных или вспомогательных символов(VTÇVN = Æ ); S -начальный символ или аксиома, S ÎVN, R - конечное множество правил или продукций вида j ® y, где j Î(VTÈVN)* VN (VTÈVN)*,y Î(VTÈVN)* -различные цепочки, а ® специальный символ, не принадлежащийVTÈVNи служащий для отделения левой части правила j от правой y. Такие символы, которые служат для описания языка, но не принадлежат самому языку, будем называть метасимволами. Говорят, что цепочкаw1 непосредственно выводима из цепочки w0(обозначается w0Þw1 ), если существуют такие x1, x2, j, y,чтоw0=x1 j x2,w1=x1 y x2и существует правило j®y (j®y ÎR). Иными словамиw0Þw1 ,если в w0 найдется вхождение левой части какого-либо правила грамматики, а цепочка w1 получена заменой этого вхождения на правую часть правила. Существенно, что при определении отношения непосредственной выводимости обозначаемого Þ (Þ разумеется, также метасимвол) мы не указываем, какое правило нужно применять и к какому именно вхождению (если их несколько). Здесь проявляются характерные черты исчислений, к классу которых относятся и порождающие грамматики. Исчисления представляют собой "разрешения" в отличие от алгоритмов, являющихся "предписаниями".
Говорят, что цепочка wn выводима из цепочкиw0за один или несколько шагов или просто выводима (обозначается w0Þ+wn ), если существует последовательность цепочек w1, w2,…, wn (n>0), такая, чтоwiÞwi+1, iÎ{0,…n}.Эта последовательность называется выводомwn изw0, а n – длиной вывода. Выводимость за n шагов иногда обозначается w0Þn wn Наконец, еслиw0Þ+wn илиw0=wn , то пишутw0Þ*wn.
Нетрудно видеть, что Þ+ есть транзитивное, а Þ* -транзитивно-рефлексивное замыкание отношенияÞ.
Цепочка wназывается сентенциальной формой, если она совпадает или выводима из начального символа грамматики, т.е. еслиS Þ w,
Множество цепочек в основном алфавите грамматики, выводимых из начального символа, иначе множество сентенциальных форм, состоящих из терминальных символов, называется языком, порождаемым грамматикой G, и обозначается L(G).
L(G) = {x / S Þ* x & xÎVT }.
Для любого перечислимого множества слов М существует грамматика G, такая, что М= L(G).
Говорят, что грамматики G1и G2 эквивалентны, если L(G1 )=L(G2).
Например,
G1 = < {S}, {a}, S, { S®a, S ®a a S}>
L(G1)= {a 2n+1, n³ 0}
G2 = < {S, A}, {0, 1}, S, R>
R = {S ® 1 A, A ® 1 A, A ® 0 A, A ®0 }
L(G2) – множество четных двоичных чисел, больших нуля.
G3 = < {S, A}, {0, 1}, S, R>
R = {S ® 1 A 0, A ® 1 A, A ® 0 A, A ®l }
L(G2) = L(G3)
Для сокращения записи грамматик и выводов будем изображать нетерминальные символы прописными буквами латинского алфавитаА , В , С , … , S терминальные -строчными буквамиa, b, c,… и цифрами. Прописными буквами U, V, Zбудем обозначать символы, которые могут быть как терминальными, так и нетерминальными; строчными буквамиu, v, zc индексами или без них - цепочки, составленные из терминальных символов, а буквами a,b,g … - из любых символов. Кроме того, для обозначения правил
a®b1
a®b2
………..
a®bn
будем пользоваться записью a®b1½b2½…½bn .
Правила вида j ® y, где y Î VT, называются заключительными.