Лекция 5 Классификация грамматик по Хомскому Линейные грамматики Определение 5.1 • Грамматика G = (N, , P, S) называется линейной, если все ее правила имеют вид либо , где N, N, *, *. Определение 5.2 • Грамматика G = (N, , P, S) называется право линейной, если все ее правила имеют вид либо , где N, N, *. Определение 5.3 • Грамматика G = (N, , P, S) называется лево линейной, если все ее правила имеют вид либо , где N, N, *. • Пример 5.1. • G=({<цифра>}, {0, 1, …, 9}, {<цифра>0, <цифра>1, …, <цифра>9},<цифра>) • Здесь <цифра> рассматривается как единственный нетерминальный символ. • L(G) – это множество, состоящее из 10 цифр. L(G) – конечное множество. Здесь грамматика является как праволинейной, так и леволинейной. • Частным случаем праволинейной грамматики является правоавтоматная грамматика. Определение 5.4 • Грамматика G = (N, , P, S) называется правоавтоматной, если все ее правила имеют вид либо , где N, N, , и допускается правило S . • Таким образом, в правилах правоавтоматной грамматики допускается использование единственного терминального символа, тогда как в праволинейной – цепочки терминальных символов. Грамматика примера 5.1. является правоавтоматной грамматикой. • Частным случаем леволинейной грамматики является левоавтоматная грамматика. Определение 5.5 • Грамматика G = (N, , P, S) называется левоавтоматной, если все ее правила имеют вид либо , где N, N, , и допускается правило S . Задание 6 • Построить примеры леволинейной, праволинейной, левоавтоматной и правоавтоматных грамматик. Описать порождаемые ими языки. Контекстно-свободные грамматики Определение 5.6 • Грамматика G = (N, , P, S) называется контекстносвободной (или бесконтекстной) (КС-грамматикой), если все ее правила имеют вид , где N, а (N)*. Определение 5.7 • Контекстно-свободная грамматика называется неукорачивающей, если правая часть ни одного из правил (за исключением правила S ) не является пустой цепочкой (т.е. грамматика не содержит правил вида , где S). • Пример 5.2. • Пусть G0 = ({E, T, F}, {a, +, *, (, )}, P, E), где P состоит из правил • E E+T | T • T T*F | F • F (E) | a • • • • • • • • • • Пример вывода в этой грамматике: E E+T T+T F+T a+T a+T*F a+F*F a+a*F a+a*a Язык L(G0) представляет собой множество арифметических выражений, построенных из символов a, +, *, (, ). Задание 7 • Построить пример контекстно-свободной грамматики. Описать порождаемый ею язык. Контекстно-зависимые грамматики грамматики непосредственных составляющих Определение 5.8 • Грамматика G = (N, , P, S) называется грамматикой непосредственных составляющих, если все ее правила имеют вид , где N, (N)*, (N)* а (N)*. Здесь цепочки и называются левым и правым контекстом (соответственно). • Таким образом, каждое правило грамматики непосредственных составляющих указывает подстановку некоторой цепочки вместо нетерминального символа. Однако возможность реализации этой подстановки зависит от символов, окружающих заменяемый, или, другими словами, от контекста, в котором находится заменяемый символ. Очевидно, что в случае, когда в каждом правиле грамматики непосредственных составляющих как левый, так и правый контекст есть пустая цепочка, получим контекстно-свободную грамматику. • • • • • • • • • • Пример 5.3. Пусть G определяется правилами: (1) S aSBC (2) S aBC (3) bCBC bBCBC (4) aB ab (5) bB bb (6) bC bc (7) cC cc (8) cBC cсC • • • • • • • • • В грамматике G возможен вывод S aSBC применяется правило (1) aaBCBC применяется правило (2) aabCBC применяется правило (4) aabBCBC применяется правило (3) aabbCBC применяется правило (5) aabbcBC применяется правило (6) aabbccC применяется правило (8) aabbccc применяется правило (7) Задание 8 • Построить пример контекстно-зависимой грамматики, описать порождаемый ею язык. Грамматики без ограничений грамматики общего вида • Грамматики общего вида (или просто грамматики) – это грамматики, правила в которых имеют вид AX, где A (N)*N(N)*, X (N)*. • • • • • • • • • • • • • Пример 5.4. Пусть G — грамматика с правилами (1) S CD (2) C aCA (3) C bCB (4) AD aD (5) BD bD (6) Aa aA (7) Ab bA (8) Ba aB (9) Bb bB (10) C (11) D • Пример вывода в грамматике G: • S CD применяется правило (1) • aCAD применяется правило (2) • abCBAD применяется правило (3) • abBAD применяется правило (10) • abBaD применяется правило (4) • abaBD применяется правило (8) • ababD применяется правило (5) • abab применяется правило (11) • L(G) = {|{a,b}}, т.е. L(G) состоит из цепочек четной длины, составленных из букв a и b, причем первая половина каждой цепочки совпадает со второй половиной. • • • • • • • • • Пример 5.5. Пусть G определяется правилами: (1) S aSBC (2) S aBC (3) CB BC (4) aB ab (5) bB bb (6) bC bc (7) cC cc • • • • • • • • • В грамматике G возможен вывод S aSBC применяется правило (1) aaBCBC применяется правило (2) aabCBC применяется правило (4) aabBCC применяется правило (3) aabbCC применяется правило (5) aabbcC применяется правило (6) aabbcc применяется правило (7) Данная грамматика порождает язык anbncn (n 1). • Легко видеть, что каждая линейная грамматика является КС-грамматикой, каждая КС-грамматика является грамматикой непосредственных составляющих, каждая грамматика непосредственных составляющих является грамматикой общего вида. Но не каждая КСграмматика является линейной грамматикой, не каждая грамматика непосредственных составляющих является КС-грамматикой, и, в свою очередь, не каждая грамматика общего вида является грамматикой непосредственных составляющих. Таким образом, класс грамматик общего вида шире класса грамматик непосредственных составляющих; класс грамматик непосредственных составляющих шире класса КС-грамматик; класс КС-грамматик шире класса линейных грамматик. • По аналогии будем называть некоторый язык • линейным языком, если для него существует хотя бы одна порождающая его линейная грамматика, • левоавтоматным (правоавтоматным) языком, если существует хотя бы одна порождающая его левоавтоматная (правоавтоматная) грамматика, • КС-языком, если для него существует хотя бы одна порождающая его КС-грамматика.