Короткова Задачник по курсу Математическая лингвистика и 2012
.pdfКонтекстно-свободные (КС-грамматики) – грамматики, все правила которых имеют вид А→ ψ, где
А 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. Для грамматики с множеством правил S→a|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, m≥0}; d) L= {cmanbn, n≥0, 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→λ
После такого преобразования все правила грамматики приобретают вид A→aB или A→λ
Построение диаграммы может быть описано следующими правилами.
1.Каждому нетерминальному символу поставим в соответствие вершину и пометим ее этим символом.
2.Каждому правилу A→aB сопоставим дугу из вершины A в вершину В и пометим ее терминальным символом а.
3.Отметим в графе как начальную вершину - вершину, соответствующую начальному символу, и как
заключительные - все такие вершины В, что B→λ (на диаграмме используется символ #) .
Лингвистический автомат – это SL= <Q, VT, q0, F, K>, где
•Q = {q0,q1,…qk}, k≥0 – множество состояний автомата (внутренний алфавит),
•VT ={a1,a2,…am}, m≥1– множество терминальных символов (внешний алфавит) автомата,
•q0 – начальное состояние автомата, q0 Q,
•F: Q× VT→Q функция переходов,
•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, сопоставляется правило грамматики
P→ aQ.
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
