Порождающей грамматикой называется упорядоченная четверка 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, z c индексами или без них - цепочки, составленные из терминальных символов, а буквами a,b,g … - из любых символов. Кроме того, для обозначения правил
|
|
a®b1
a®b2
………..
a®bn
будем пользоваться записью a®b1½b2½…½bn.
Правила вида j ® y, где y Î VT, называются заключительными.