Формальные порождающие грамматики

Порождающей грамматикой называется упорядоченная четверка 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, называются заключительными.