ВУЗ:
Составители:
Также предполагается, что правые части правил, для которых совпадают левые части,
можно записать в одну строку с использованием разделителя. Так, правила вывода из
приведенного примера можно записать следующим образом: S → aSb | ab.
4.3. Классификация грамматик
Правила порождающих грамматик позволяют осуществлять преобразования строк.
Ограничения же на виды правил позволяют выделить классы грамматик. Рассмотрим
классификацию, которую предложил Н. Хомский.
Грамматики типа 0 - это грамматики, на правила вывода которых нет ограничений.
Грамматики типа 1, или контекcтные грамматики -это грамматики, все правила которых
имеют следующий вид: хАу → хϕу, где A ∈ V
N
, x, y, ϕ ∈ (V
N
∪ V
T
)
+
.
Грамматики типа 2 - это бесконтекстные, или контекстно-свободные грамматики (КС-
грамматики). Правила вывода для этих грамматик имеют следующий вид: А → ϕ, где А ∈
V
N
, ϕ ∈ (V
N
∪ V
T
)
*
.
Грамматики типа 3 - это автоматные грамматики, которые делятся на два типа:
а) леволинейные (леворекурсивные), правила вывода для которых имеют следующий
вид: А → Аа | a, где А ∈ V
N
;
б) праволинейные (праворекурсивные), правила вывода для которых имеют следующий
вид: А → Aа | a.
Язык L называется языком типа i, если существует грамматика типа i, порождающая
язык L.
4.3.1. Методика решения задач
Пример 1. Дана порождающая грамматика G = (V
T
, V
N
, Р, S), в которой V
T
= {a, d, е}, V
N
= {В, С, S}, Р = {S → аВ, В → Cd | dC, С → е}. Выписать терминальные цепочки,
порожденные данной грамматикой, и определить длину их вывода.
Решение. Получим следующие терминальные цепочки:
S → аВ → aCd → aed,
S → аВ → adC → ade,
длина вывода которых равна 3.
Пример 2. Дана грамматика G = (V
T
, V
N
, Р, C), в которой V
T
= {a, b, c, d, е}, V
N
= {A, В,
С, D, E}, Р = {A → ed, В → Ab, С → Bc, С → dD, D → Ae, E → bc}. Определить,
принадлежит ли языку L(G) цепочка eadabcb.
Решение. Выведем возможные терминальные цепочки из аксиомы с помощью заданных
правил вывода:
С → Bc → Abc → edbc,
С → dD → dAe → dede.
Так как первые же терминальные символы полученных цепочек не совпадают с
заданной, можно сделать вывод о том, что цепочка eadabcb не принадлежит языку L(G).
Пример 3. Построить КС-грамматику (грамматику типа 2), порождающую цепочки из 0
и 1 с одинаковым числом тех и других символов.
Решение. Определим множества, задающие грамматику: V
T
= {0, 1}; V
N
= {S}; Р =
{S → 0S1, S → 1S0, S → ε, S → S01, S → S10}.
Пример 4. Описать язык, порождаемый следующими правилами: S → bSS | а.
Решение. Построим несколько терминальных цепочек, применяя заданные правила
вывода:
S → a;
S → bSS → baa;
S → bSS → bbSSS → bbaaa;
Также предполагается, что правые части правил, для которых совпадают левые части, можно записать в одну строку с использованием разделителя. Так, правила вывода из приведенного примера можно записать следующим образом: S → aSb | ab. 4.3. Классификация грамматик Правила порождающих грамматик позволяют осуществлять преобразования строк. Ограничения же на виды правил позволяют выделить классы грамматик. Рассмотрим классификацию, которую предложил Н. Хомский. Грамматики типа 0 - это грамматики, на правила вывода которых нет ограничений. Грамматики типа 1, или контекcтные грамматики -это грамматики, все правила которых имеют следующий вид: хАу → хϕу, где A ∈ VN, x, y, ϕ ∈ (VN ∪ VT)+. Грамматики типа 2 - это бесконтекстные, или контекстно-свободные грамматики (КС- грамматики). Правила вывода для этих грамматик имеют следующий вид: А → ϕ, где А ∈ VN, ϕ ∈ (VN ∪ VT)*. Грамматики типа 3 - это автоматные грамматики, которые делятся на два типа: а) леволинейные (леворекурсивные), правила вывода для которых имеют следующий вид: А → Аа | a, где А ∈ VN; б) праволинейные (праворекурсивные), правила вывода для которых имеют следующий вид: А → Aа | a. Язык L называется языком типа i, если существует грамматика типа i, порождающая язык L. 4.3.1. Методика решения задач Пример 1. Дана порождающая грамматика G = (VT, VN, Р, S), в которой VT = {a, d, е}, VN = {В, С, S}, Р = {S → аВ, В → Cd | dC, С → е}. Выписать терминальные цепочки, порожденные данной грамматикой, и определить длину их вывода. Решение. Получим следующие терминальные цепочки: S → аВ → aCd → aed, S → аВ → adC → ade, длина вывода которых равна 3. Пример 2. Дана грамматика G = (VT, VN, Р, C), в которой VT = {a, b, c, d, е}, VN = {A, В, С, D, E}, Р = {A → ed, В → Ab, С → Bc, С → dD, D → Ae, E → bc}. Определить, принадлежит ли языку L(G) цепочка eadabcb. Решение. Выведем возможные терминальные цепочки из аксиомы с помощью заданных правил вывода: С → Bc → Abc → edbc, С → dD → dAe → dede. Так как первые же терминальные символы полученных цепочек не совпадают с заданной, можно сделать вывод о том, что цепочка eadabcb не принадлежит языку L(G). Пример 3. Построить КС-грамматику (грамматику типа 2), порождающую цепочки из 0 и 1 с одинаковым числом тех и других символов. Решение. Определим множества, задающие грамматику: VT = {0, 1}; VN = {S}; Р = {S → 0S1, S → 1S0, S → ε, S → S01, S → S10}. Пример 4. Описать язык, порождаемый следующими правилами: S → bSS | а. Решение. Построим несколько терминальных цепочек, применяя заданные правила вывода: S → a; S → bSS → baa; S → bSS → bbSSS → bbaaa;
Страницы
- « первая
- ‹ предыдущая
- …
- 25
- 26
- 27
- 28
- 29
- …
- следующая ›
- последняя »