Задача 1. Если задана некоторая грамматика G, то возникает вопрос: какой язык порождает G?
Пример:
G= {V, N, S, R}, V= {a, b, c}, N= {A, B, S},
R: bA®abc; aS®bAc; S®caS;bAB®ab.
Вывод начинается с символа S – начального символа грамматики:
S
caS
(ca)2S
(ca)3S
…
(ca)nS= (ca)n-1c aS
(ca)n-1c bA c
(ca)n-1cabcc= (ca)nbcc
Таким образом, данная грамматика порождает язык L(G)= {a| a= (ca)nbcc}.
Определение: Две грамматики называют эквивалентными, если они порождают один и тот же язык.
Если из рассмотренной грамматики исключить последнее правило, то получим эквивалентную ей грамматику.
Задача 2. Пусть задан некоторый язык. Построить грамматику, порождающую данный язык.
L= {aab, babaa, ababab}
R1: S®aab, S®babaa, S®ababab; G1= {{a, b}, {S}, S, R1}
R2: S®aA; S® BBa; S®AAA; A®ab;B®ba; G2= {{a,b}, {S, A, B}, S, R2}.
Вопросы и упражнения
1. Дана грамматика G= (Т, N, S, R), Т= {a, b, c, d}, N= {A, B, S},
R0: S®aSc
bAB®ab
bAd®abc
aS®bAdc
Какой язык порождает данная грамматика?
Построить эквивалентную ей грамматику.
2. Построить нетривиальную грамматику, порождающую следующий язык:
L={abcda, abcaba, daabc, aabdaa, cada}. Докажите, что построенная Вами грамматика действительно порождает этот язык.