- •1. Алфавит, слова, операции над словами
- •2. Языки. Операции над языками
- •3. Абстрактные формальные системы
- •4. Формальные порождающие грамматики
- •5. Классификация грамматик
- •Диаграмма грамматики.
- •Порождение и распознавание цепочек.
- •Детерминизация конечных автоматов
- •Автоматы с - переходами.
- •9. Минимизация числа состояний автомата
- •9.1. Лингвистический автомат.
- •9.2. Метод Хафмена.
- •Регулярные множества и регулярные выражения.
- •Разрешимые проблемы для а-грамматик
- •7. Нотации для задания кс-грамматик.
- •8. Структура цепочек. Су-схемы
- •9. Преобразования грамматик.
- •10. Разрешимые и неразрешимые свойства кс-грамматик
- •11. Синтаксический анализ для кс-языков
- •11.1 Ll(k)-грамматики
- •12.Элементы теории конечных автоматов
- •13.Сети автоматов. Их анализ и синтез.
Регулярные множества и регулярные выражения.
Определим еще некоторый класс языков — регулярных множеств. Соотношение его с классом А-языков определим позднее.
Пусть VTконечный алфавит. Регулярные множества в алфавите VTопределяются рекурсивно:
1) - регулярное множество;
2) {} - регулярное множество;
3) {a}регулярное множество для любого aVT;
4) если PиQ- регулярные множества, то таковы также и множества:PQ, PQ, P*;
5) никаких других регулярных множеств нет.
По-другому можно определить регулярное множество как такое, которое можно получить из ,{} , {a} и множеств, полученных на предыдущих шагах, путем конечного числа применений операций "", "" и "*".
Определим теперь специальную нотацию для задания регулярных множеств.
Регулярные выражения в алфавите VTи регулярные множества, которые они обозначают, определяются рекурсивно:
1) 0 - регулярное выражение, обозначающее регулярное множество .
2) 1 -регулярное выражение, обозначающее регулярное множество {},
3) если a VT; тоa -регулярное выражение, обозначающее регулярное множество {a};
4) если pи q - регулярные выражения, обозначающие регулярные множестваPиQто:
a)(p+q)- регулярное выражение, обозначающее регулярное множество PQ ,
б) (pq)- регулярное выражение, обозначающее регулярное множествоPQ,
в) (p*) - регулярное выражение, обозначающее регулярное множествоP*;
5) никаких других регулярных выражений нет.
Как обычно, когда можно опустить лишние скобки без потери однозначности чтения, мы будем это делать. Так, 0+110*обозначает (0+((11)(0)*)). Мы будем придерживаться соглашения, что * обладает наивысшим приоритетом, затем • и, наконец, +.
Очевидно, что для каждого регулярного множества можно найти регулярное выражение, его обозначающее, и наоборот. К сожалению, как мы увидим дальше, одному и тому же регулярному множеству может соответствовать бесконечно много регулярных выражений.
Будем говорить, что регулярные выражения равны (обозначается значком =), если они обозначают одно и то же регулярное множество.
Запишем основные алгебраические тождества для регулярных выражений. Часть из них мы уже знаем, остальные легко доказываются. Если ,, -регулярные выражения, то:
;
+()=(;
11
000
;
*=*;
(*)*=*;
** =*
*=*
0
1*=1
0*=1
()*()*;
(*)**=(+)*=(* +*)*;
(*)*=(+)*+1;
(*)*=(+)* +1;
Если =*, то=*+;
Если и, то*.
Последнее тождество является основным при решении уравнений.
Теорема (Клини). Каждому А-языку над Vсоответствует регулярное выражение надV. Каждому регулярному выражению надVсоответствует А-язык.
Идея доказательства:
L– регулярное множествоL– А-язык.
- регулярное множество (грамматика с пустым множеством правил);
- регулярное множество (S);
аVT- регулярное множество (Sа);
если P,Qрегулярные множества, тоPQ,PQ,P* - так же регулярные множества (легко показать через соединение двухполюсников, порождающих языки, соответствующиеPиQ.
L- А-языкL– регулярное множество.
Пусть есть А-грамматика G=< VT,VN, S, R>,
Ai a1 a2… ak b1Aj1 b2Aj2 … bmAjm
где as, bqVT, AjsVN. Обозначим Xi- язык, порождаемый грамматикой Giв которой в качестве начального символа выбран символАi.Тогда указанные правила эквивалентны следующему уравнению:
Xi = a1 + a2 + …+ ak + b1Xj1 + b2 Xj2 + … + bm Xjm.
Действительно, если Xiобозначает язык, порождаемый грамматикой Gi,когда Ai- начальный символ, то, так как возможны выводы Ai a1, Ai a2, Ai ak,можем написать, чтоa1, a2,…, akXiи, следовательно, Xi = a1 + a2 +…+ ak +… С другой стороны, пустьAjkxjk, т.е.xjkXjk, тогда возможен выводAi + bkAjk + bkxjk.Следовательно,bkxjkXiи это верно для любой цепочкиxjkXjk. Поэтому, дополняя предыдущую записьXi, можем написать:
Xi = a1 + a2 + …+ ak + b1Xj1 + b2 Xj2 + … + bm Xjm.
Полное доказательство проводится индукцией по числу правил грамматики.
Как по регулярному выражению построить А-грамматику?
Конкатенация моделируется последовательным соединением двухполюсников, + - параллельным соединением, * - - замыканием. Т.о., последовательно выполняя операции, получим двухполюсники, соответствующие регулярному выражению. Построенные двухполюсники можно затем упростить.
Например, регулярным выражениям (a+b)c, (a+b)*c, (ab+bc)*(ab+c) будут соответствовать диаграммы, представленные на рис. 21 а, б, в соответственно.
Рис.21
Обратная задача:
есть А-грамматика. Надо найти язык, порождаемый этой грамматикой, записанный в виде регулярного выражения.
Например, имеется А-грамматикаG12с правилами:
A a AbB
B b B c
Обозначим язык, порождаемый грамматикой с начальным символом A-Xa, и язык, порождаемый грамматикой с начальным символомB–Xb.
Тогда соответствующие уравнения примут вид:
Xa = a Xa + b Xb
Xb = b Xb + c
Система уравнений может иметь бесконечно много решений, нас интересует минимальное по мощности решение.
Систему уравнений с регулярными коэффициентами назовем стандартной над множеством неизвестных ={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-ое уравнение не содержит переменнуюXj, то достаточно положить соответствующий коэффициент i j = 0, если i j =1, то его можно не писать.
В общем случае система уравнений имеет вид:
x1= f1(x1, x2,…,xn)
x2= f2(x1, x2,…,xn)
….
xn= fn(x1, x2,…,xn)
Где fi -конечная функция,xj– конечное множество строк над VT, на множествеx1,x2,…,xnопределены операции объединения и конкатенации. Обозначимx1,x2,…,xnкакХ, а системуX=F(X). Решение системыS=(S1,S2,…Sn) – совокупность подмножествVT, такая, чтоS=F(S).
Определим S T = Df S1T1 , S2 T2, …, Sn Tn.
Теорема. Система уравненийX=F(X) имеет решениеS=Fi(). ЕслиS1– другое решение, тоSS1.
Определение: Говорим, что функция F:P(A)P(A)P(A) монотонно возрастает, если изA1B1иA2B2следует, чтоF(A1,A2)F(B1,B2).
Лемма:Операция конкатенации – монотонно возрастающая функция.
Очевидно, что операция объединения так же является монотонно возрастающей функцией.
Доказательство теоремы:
Т.к. = (,, …,), то F(). Легко показать, что еслиAB, тоF(A)F(B). ПоэтомуF()F(F()) и т.д. Получаем возрастающую последовательность: F()F2()F3()…
Пусть S=Fi(). Тогда S=F(S). ЕслиT- некоторое другое решение, тоT =F(T), ноT, значит,F() F(T)=T. Очевидно, что по индукции можно доказать, чтоFi() Tдля всехi, следовательно, Fi()T.
Пример: Рассмотрим систему
Xa = a Xa + b Xb
Xb = b Xb + c
Для удобства работы обозначим Xa–x,Xb–y.
f1(x,y)= ax + y;
f2(x,y)=by+c;
f1(,)=; f2(,)=c; |
f1(,c)=bc; f2(,c)=bc+c; |
f1(bc,bc+c)= abc+b(b+)c f2(bc,bc+c)=(b2+b+)c |
f1(abc+b(b+)c, (b2+b+)c) =(a+)ab(bc+c)+b(b+)2c
f2(abc+b(b+)c, (b2+b+)c) = (b3+b2+b+)c
f1((a+)ab(bc+c)+b(b+)2c, (b3+b2+b+)c)= (a+)3ab(bc+c)+b(b3+b2+b+)c
Откуда получаем
y=b*c
x=a*bb*c
Тем не менее основным способом решения стандартной системы уравнений - метод последовательного исключения неизвестных, подобным методу Гаусса. Покажем это на этом же примере.
Xa = a Xa + b Xb
Xb = b Xb + c
Из тождества 21 получаем
Xb=b*c
Xa = a Xa + b b*c= a*bb*c
Таким образом, существуют следующие основные способы задания А-языков:
А-грамматика.
Конечные лингвистические автоматы.
Стандартная система уравнений.
Регулярное выражение.