Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Короткова Задачник по курсу Математическая лингвистика и 2012

.pdf
Скачиваний:
191
Добавлен:
12.11.2022
Размер:
1.63 Mб
Скачать

Контекстно-свободные (КС-грамматики) – грамматики, все правила которых имеют вид А→ ψ, где

А VN , ψ (VT VN )*.

В задачах грамматики часто задаются только последовательностью правил, первое правило в последовательности определяется для начального нетерминала.

Для сокращения записи грамматик и выводов будем изображать нетерминальные символы прописными буквами латинского алфавита А, В, С , … , S с индексами или без них, терминальные символы – строчными буквами a, b, c,… и цифрами. Прописными буквами U, V, Z будем обозначать

символы, которые могут быть

как терминальными, так и

нетерминальными; строчными

буквами u, v, x, y, z c

индексами или без них – цепочки, составленные из

терминальных символов, а буквами α, β, γ

из любых

символов. Кроме того,

для обозначения

правил с

одинаковыми левыми частями, имеющими вид: α→β1,

α→β2,…, α→βn будем пользоваться записью

α→β1 β2 βn .

Задачи:

1.Проверить, выводится ли слово abaaba в грамматиках

G1, G2 и G3. Если да, то построить вывод.

G1 : S aS | bS | a | b G2 : S SS | a | b

G3 : S aSa | bSb | λ

2.Пусть V={0,1}. Записать порождающие грамматики G

и G1 для языков L = {1}V* и L1 = {1} {1}V*{1}.

3.Даны грамматики G1 и G2:

11

 

S aS | aB

 

S aS | B

G1

 

G2

 

: B bB | bC ;

: B bC | C .

 

 

 

 

 

C cC | c

 

C cC | c

Какие языки порождаются этими грамматиками?

4.Построить грамматику, порождающую язык a*b*c*.

5.Описать язык, порождаемый грамматикой G:

G : S aSb | ab

6.Построить грамматику, порождающую язык {anbn} для:

a)n ≥ 0;

b)n ≥ 2.

7.Как будет выглядеть грамматика, которая будет порождать язык L = {anbncq; n, q≥1}? Доказать, что построенная грамматика порождает именно этот язык.

8.Построить грамматики G1, G2 и G3 для языков L1 = {anbmcm; n, m ≥ 1}, L2 = {anbmcm; n, m {1; 2}}, и L3 = {ambncm; n, m ≥ 1} соответственно.

9.Пусть алфавит V = {0; 1}. Построить грамматику, порождающую:

a)все цепочки из 0 и 1, где непосредственно справа от любого 0 стоит 1;

b)все цепочки, результаты чтения которых справа и слева совпадают (двоичные палиндромы);

c)все непустые строки из 0 и 1, где 0 в два раза больше, чем 1.

10.Какой язык порождает грамматика G1?

 

S aSBa

 

aba

 

 

 

 

 

 

 

G1

aB Ba

=

 

 

bB bb

 

 

11. Определить язык, который порождает грамматика:

12

S aSBC | aBCCB BC

aB ab G : bB bb

bC bccC cc

12. Записать грамматику для языка, полученного в предыдущей задаче, в более простой форме (содержащую меньшее число правил).

13. Построить грамматику, порождающую язык L = {(001)n; (010)n; n ≥ 2}.

14. Записать грамматику, порождающую все двоичные числа, делящиеся на 8.

15. Построить грамматику, которая будет порождать все неотрицательные десятичные числа:

a) делящиеся на 10; b) делящиеся на 3; c) делящиеся на 6.

16. Какие цепочки будет порождать следующая грамматика?

G : S SbS | SaS | c

17. Какой язык порождает грамматика G?

S bA | aB

G : A a | aS | bAAB b | bS | aBB

18.Пусть алфавит V = {0; 1}. Построить грамматику, порождающую все цепочки, в которых единицы идут парами.

19.Для алфавита {a, b} построить грамматику, порождающую все непустые цепочки, в которых число букв b в два раза больше, чем число букв а.

13

20. Для алфавита V = {a; b; c; d} построить грамматики, порождающие следующие языки:

a) {anbmcmd n , n 1, m 1} ; b) {anbmcnd m , n 0, m 0} ; c) {anbncnd m , n 1, m 1}; d) {anbncmd m , n 1, m 0} ; e) {anbncnd n , n 1}.

21. Для грамматики с множеством правил Sa|aaS построить вывод слова a7.

22. Для грамматики G6, заданной своими правилами, построить вывод слов a2b2, a3b3, a4b4. Записать грамматику полностью.

S abA | ab

bA Ab

G :

6 aA aabAaA aab.

23. Для грамматики G7 с правилами:

S aS | aB

G7 : B bB | bCC cC | c

построить вывод слов abc, a2b3c, a3b2c3. Записать грамматику полностью. Определить язык, порождаемый грамматикой.

24. Для грамматики G8 с правилами:

S aS | B

G8 : B C | bCC cC | c

14

построить вывод слов abc, a2bc3, b2c3. Записать грамматику полностью. Определить язык, порождаемый грамматикой.

25. Определить класс грамматики G6 c правилами:

S abA | ab

bA Ab

G :

6 aA aabAaA aab

26. Построить грамматику для порождения языка L. Определить класс построенной грамматики.

a) L= {anbncm, n≥1, m>1}; b) L= {anb2ncm, n≥1, m>1}; c) L= {anbmcn, n≥1, m0}; d) L= {cmanbn, n0, m≥1}; e) L= {anbncmdm, n≥1, m≥1}.

Тема 3. А-грамматики, конечные автоматы

Теория. Автоматные грамматики (А-грамматики) –

это грамматики, все правила которых имеют вид Аа,

Аa B, А→λ, a VT, A,B VN.

Пусть дана А-грамматика G=< VN, VT, S, R> . Диаграмма А-грамматики – граф с помеченными вершинами и дугами. Множество вершин графа соответствует множеству нетерминалов А-грамматики, приведенной к каноническому виду, а множество дуг – множеству правил грамматики.

Преобразование грамматики к каноническому виду:

1. Вводим дополнительный нетерминальный символ Z.

VN’=VN {Z}.

2. Заменяем все правила вида Аа на правила АаZ.

15

3. Вводим дополнительное правило Z→λ

После такого преобразования все правила грамматики приобретают вид AaB или A→λ

Построение диаграммы может быть описано следующими правилами.

1.Каждому нетерминальному символу поставим в соответствие вершину и пометим ее этим символом.

2.Каждому правилу AaB сопоставим дугу из вершины A в вершину В и пометим ее терминальным символом а.

3.Отметим в графе как начальную вершину - вершину, соответствующую начальному символу, и как

заключительные - все такие вершины В, что B→λ (на диаграмме используется символ #) .

Лингвистический автомат – это SL= <Q, VT, q0, F, K>, где

Q = {q0,q1,…qk}, k0 – множество состояний автомата (внутренний алфавит),

VT ={a1,a2,…am}, m1– множество терминальных символов (внешний алфавит) автомата,

q0 – начальное состояние автомата, q0 Q,

F: Q× VTQ функция переходов,

K Q – множество конечных (заключительных) состояний.

Вначале работы автомат находится в состоянии q0, на входе – цепочка a1 a2 … an, обозревается самый левый символ цепочки. Назовём конфигурацией автомата пару H=(q, x), где q — текущее состояние автомата; x — остаток входной цепочки, самый левый символ которой обозревается входной головкой. Говорят, что конфигурация (p, x1) получена из конфигурации (q, x) за один такт

(обозначается (q, x) (p, x1) ), если x= a x1 и F(q, a)= p.

16

Если H0, H1,…, Hn (n 1) — последовательность конфигураций, таких, что Hi Hi+1 , i {0,1,…, n-1}, то, как и раньше, будем использовать обозначения H0 + Hn, и H0

* Hn, если справедливо H0 +Hn H0=Hn. Пусть x — анализируемая цепочка. Начальная

конфигурация имеет вид (q0, x), заключительная – (qs, λ), qs K. Говорят, что автомат A допустил цепочку x, если (q0, x)

* (q, λ) и q K (Использование отношения * позволяет включить в множество допускаемых цепочек и пустую цепочку λ, если q0 K).

Языком L(A), допускаемым конечным автоматом A, называется множество допускаемых им цепочек: L(A) = { x /

(q0, x) * (q, λ) & q K}.

По диаграмме автомата можно записать грамматику, порождающую язык, распознаваемый автоматом.

Правила грамматики по диаграмме автомата строятся следующим образом:

1.Каждой вершине диаграммы сопоставляем нетерминал грамматики.

2.Каждой дуге из вершины P в вершину Q, помеченной терминалом a, сопоставляется правило грамматики

PaQ.

3.Каждой заключительной вершине R сопоставляется правило R→λ.

4.Начальной вершине диаграммы сопоставляется начальный символ грамматики.

Будем называть недетерминированным конечным автоматом S пятерку объектов S = <Q, VT, q0, F, K>, где интерпретация Q, VT, q0, K такая же, как и раньше, а F – отображение Q × VT в P(Q). Здесь P(Q) обозначает

17

множество подмножеств множества Q. Множество состояний {qi1 , qi2 ,..., qil } будем обозначать как обобщённое

состояние qi1 , qi2 ,..., qil .

Алгоритм построения детерминированного автомата по недетерминированному:

1.Строим начальное состояние q0’= [q0], помечаем его как начальное.

2.Для каждого состояния, построенного на предыдущем

шаге, строим F(qi’, a) для всех a VT. Если для какогонибудь из построенных состояний функция перехода ещё не построена, возвращаемся к шагу 2.

3. Помечаем как конечные все состояния qi’=[qi1 ,qi2 ,...,qil ]

такие, что {qi1,qi2 ,...q,il }K.

Конечность процесса обеспечивается конечностью множества P(Q).

Автоматы с λ - переходами естественно возникают в различных приложениях, и позволяют представить любой автомат в виде двухполюсников с одним входом и одним выходом, а также строить сети из таких автоматов, сохраняя в них единственный вход и единственный выход. От рассмотренных ранее автоматов они отличаются тем, что в них присутствуют переходы, осуществляемые без чтения входной цепочки (на диаграмме такие переходы обозначаются стрелками, помеченными символом λ).

18

Очевидно, что если L – А-язык, то ему можно сопоставить некоторый двухполюсник.

Пусть языкам L1 и L2 сопоставлены соответствующие двухполюсники (см рис.).

Тогда их объединению, конкатенации и итерации языка L1 будут, соответственно, сопоставлены двухполюсники:

L1 L2:

L1

L2

L1L2:

L1*

Алгоритм минимизации лингвистического автомата (метод Хаффмана).

19

1.Составляем таблицу переходов. По строкам указываются входные символы, по

столбцам – состояния.

2.Составляем классы предположительно эквивалентных состояний (первоначально разбиванием на класс конечных и неконечных состояний).

3.Составляем таблицу переходов, в которой вместо состояний указываются классы, которым принадлежат состояния. Если в пределах одного класса состояния ведут себя по-разному (есть отличия в столбцах таблицы переходов), то класс разбивается на подклассы состояний, для которых столбцы одинаковы, и возвращаемся к шагу 3.

4.Если во всех классах состояния ведут себя одинаково, то это действительно классы эквивалентности. Строится автомат, состояниями которого являются классы эквивалентности исходного автомата.

Систему уравнений с регулярными коэффициентами назовем стандартной над множеством неизвестных

={X1,X2,..., Xn}, если она имеет вид

X1 = α10 + α11 X1 + α12 X2 + ... + α1n Xn;

X2 = α20 + α21 X1 + α22 X2 + ... + α2n Xn;

Xn = αn0 + αn1 X1 + αn2 X2 + ... + αnn Xn;

где все αi j ,i [1,n], j [0,n] – регулярные выражения. Если какое-либо i-е уравнение не содержит переменную Xj, то достаточно положить соответствующий коэффициент αi j = 0, если αi j =1 , то этот коэффициент можно не писать. Пусть есть А-грамматика G = < VT,VN, S, R>, правила для

Ai:

Ai a1 a2 … ak b1Aj1 b2Aj2 … bmAjm

где as, bq VT, Ajs VN. Обозначим Xk – язык, порождаемый грамматикой Gk, в которой в качестве начального символа

20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]