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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: