ЛР4 ( ИШАКОВА)
.pdfМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ОБРАЗОВАНИЯ
Государственное образовательное учреждение высшего профессионального образования “Оренбургский государственный университет”
Кафедра программного обеспечения вычислительной техники и автоматизированных систем
Е.Н. ИШАКОВА
ТЕОРИЯ ФОРМАЛЬНЫХ ЯЗЫКОВ, ГРАММАТИК И АВТОМАТОВ
МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ЛАБОРАТОРНОМУ ПРАКТИКУМУ
Рекомендовано к изданию Редакционно-издательским советом государственного образовательного учреждения
высшего профессионального образования “Оренбургский государственный университет”
Оренбург 2005
1
УДК 004.4′4(075.8) ББК 32.973.26-018.1я73
И 97
Рецензент кандидат технических наук, доцент Бахарева Н.Ф.
Ишакова Е.Н.
И97 Теория формальных языков, грамматик и автоматов: Методи-
ческие указания к лабораторному практикуму. - Оренбург:
ГОУ ОГУ, 2005. – 54 с.
Вметодических указаниях содержатся материалы, необходимые для самостоятельной подготовки студентов к выполнению лабораторных работ по разделу «Теория формальных языков, грамматик и автоматов».
Вописание лабораторных работ включены цель работы, порядок ее выполнения, рассмотрены теоретические вопросы, связанные с реализацией поставленных задач, приведена необходимая литература. В приложениях представлены правила оформления результатов лабораторной работы.
Методические указания предназначены для выполнения лабораторного практикума по дисциплине «Теория языков программирования и методов трансляции» для студентов специальности 220400 – «Программное обеспечение вычислительной техники и автоматизированных систем».
И |
1404000000 |
ББК 32.973.26-018.1я73 |
6Л9-04 |
|
© Ишакова Е.Н., 2005 © ГОУ ОГУ, 2005
2
Введение
Предлагаемый материал посвящен основам классической теории формальных языков, грамматик и автоматов – одной из важнейших составных частей инженерного образования по информатике и вычислительной технике.
Теория формальных языков, грамматик и автоматов составляет фундамент синтаксических методов. Основы этой теории были заложены Н. Хомским
в40–50-е годы XX столетия в связи с его лингвистическими работами, посвященными изучению естественных языков. Но уже в следующем десятилетии синтаксические методы нашли широкое практическое применение в области разработки и реализации языков программирования.
Внастоящее время искусственные языки, использующие для описания предметной области текстовое представление, широко применяются не только
впрограммировании, но и в других областях. С их помощью описывается структура всевозможных документов, трехмерных виртуальных миров, графических интерфейсов пользователя и многих других объектов, используемых в моделях и в реальном мире. Для того чтобы эти текстовые описания были корректно составлены, а затем правильно распознаны и интерпретированы, применяются специальные методы их анализа и преобразования. В основе данных методов лежит теория формальных языков, грамматик и автоматов.
Теория формальных языков, грамматик и автоматов дала новый стимул развитию математической лингвистики и методам искусственного интеллекта, связанных с естественными и искусственными языками. Кроме того, ее элементы успешно применяются, например, при описании структур данных, файлов, изображений, представленных не в текстовом, а двоичном формате. Эти методы полезны при разработке своих трансляторов даже там, где уже имеются соответствующие аналоги.
Вметодических указаниях содержатся материалы, необходимые для самостоятельной подготовки студентов к выполнению лабораторных работ по разделу «Теория формальных языков, грамматик и автоматов». В описание лабораторных работ включены цель работы, порядок ее выполнения, рассмотрены теоретические вопросы, связанные с реализацией поставленных задач, приведена необходимая литература. В приложениях представлены правила оформления результатов лабораторной работы.
3
1 Лабораторная работа № 1. Распознавание типов формальных языков и грамматик
Цель: - закрепить понятия «алфавит», «цепочка», «формальная грамматика» и «формальный язык», «выводимость цепочек», «эквивалентная грамматика»;
- сформировать умения и навыки распознавания типов формальных языков и грамматик по классификации Хомского, построения эквивалентных грамматик.
Основы теории
Определение 1.1. Алфавитом V называется конечное множество симво-
лов.
Определение 1.2. Цепочкой α в алфавите V называется любая конечная последовательность символов этого алфавита.
Определение 1.3. Цепочка, которая не содержит ни одного символа, называется пустой цепочкой и обозначается ε.
Определение 1.4. Формальное определение цепочки символов в алфавите
V:
1)ε - цепочка в алфавите V;
2)если α - цепочка в алфавите V и а – символ этого алфавита, то αа – цепочка в алфавите V;
3)β - цепочка в алфавите V тогда и только тогда, когда она является таковой в силу утверждений 1) и 2).
Определение 1.5. Длиной цепочки α называется число составляющих ее символов (обозначается | α |).
Обозначим через V* множество, содержащее все цепочки в алфавите V, включая пустую цепочку ε, а через V+ - множество, содержащее все цепочки в алфавите V, исключая пустую цепочку ε.
Пример 1.1. Пусть V ={1, 0}, тогда V * ={ε, 0,1, 00, 01,10,11, 000, K}, а
V + ={0,1, 00, 01,10,11, 000, K}.
Определение 1.6. Формальной грамматикой называется четверка вида:
G =(VT ,VN , P, S), |
(1.1) |
где VN - конечное множество нетерминальных символов грамматики (обычно прописные латинские буквы);
VT - множество терминальных символов грамматики (обычно строчные латинские буквы, цифры, и т.п.), VT ∩VN = ;
Р – множество правил вывода грамматики, являющееся конечным подмножеством множества (VT VN)+ × (VT VN)*; элемент (α, β) множества Р называется правилом вывода и записывает-
4
ся в виде α→β (читается: «из цепочки α выводится цепочка
β»);
S - начальный символ грамматики, S VN.
Для записи правил |
вывода с одинаковыми левыми частями вида |
α → β1, α → β2,K,α → βn |
используется сокращенная форма записи |
α → β1 | β2 |K| βn .
Пример 1.2. Грамматика G1=({0, 1}, {A, S}, P1, S), где множество Р1 состоит из правил вида: 1) S→ 0A1; 2) 0A→ 00A1; 3) A→ε.
Определение 1.7. Цепочка β (VT VN)* непосредственно выводима из
цепочки α (VT VN )+в грамматике G =(VT ,VN , P, S) (обозначается: α β),
если α =ξ1γξ2 и β =ξ1δξ2 , где ξ1, ξ2, δ (VT VN )*, γ (VT VN )+ и правило вывода γ →δ содержится во множестве Р.
Определение 1.8. Цепочка β (VT VN)* выводима из цепочки α (VT VN )+в грамматике G =(VT ,VN , P, S) (обозначается α *β), если существует последо-
вательность цепочек γ0 , γ1 , K,γn (n≥0) такая, что α =γ0 γ1 K γn = β .
Пример 1.3. В грамматике G1 S *000111, т.к. существует вывод
S 0A1 00A11 000A111 000111.
Определение 1.9. Языком, порожденным грамматикой G =(VT ,VN , P, S),
называется множество всех цепочек в алфавите VT, которые выводимы из начального символа грамматики S c помощью правил множества Р, т.е. множест-
во L(G) ={α VT* | S *α}.
Пример 1.4. Для грамматики G1 L(G1)={0n1n | n>0}.
Определение 1.10. Цепочка α (VT VN )* , для которой существует вывод S *α, называется сентенциальной формой в грамматике G =(VT ,VN , P, S).
Определение 1.11. Грамматики G1 и G2 называются эквивалентными, ес-
ли L(G1) = L(G2 ) .
Пример 1.5. Для грамматики G1 эквивалентной будет грамматика G2 = ({0, 1}, {S}, P2, S), где множество правил вывода P2 содержит правила вида
S → 0S1 | 01.
Классификация грамматик по Хомскому
Тип 0. Грамматика G =(VT ,VN , P, S) называется грамматикой типа 0, если на
ее правила вывода не наложено никаких ограничений, кроме тех, которые указаны в определении грамматики.
Тип 1. Грамматика G =(VT ,VN , P, S) называется контекстно-зависимой
грамматикой (КЗ-грамматикой), если каждое правило вывода из множества Р имеет вид α→β, где α (VT VN)+, β (VT VN)* и |α| ≤ |β|.
5
Тип 2. Грамматика G =(VT ,VN , P, S) называется контекстно-свободной грамматикой (КС-грамматикой), если ее правила вывода имеют вид: A → β ,
где A VN и β V *.
Тип 3. Грамматика G =(VT ,VN , P, S) называется регулярной грамматикой (Р-грамматикой) выровненной вправо, если ее правила вывода имеют вид
A →aB | a , где a VT ; A, B VN . |
|
Грамматика G = (VT ,VN , P, S) |
называется регулярной грамматикой (Р- |
грамматикой) выровненной влево, |
если ее правила вывода имеют вид |
A → Ba | a , где a VT ; A, B VN . |
|
Определение 1.12. Язык L(G) называется языком типа k, если его можно описать грамматикой типа k, где k – максимально возможный номер типа грамматики.
Соотношение типов грамматик и языков представлено на рисунке 1.1.
Тип 0
КЗ
КС
Р
Р – регулярная грамматика; КС – контекстно-свободная грамматика;
КЗ – контекстно-зависимая грамматика; Тип 0 – грамматика типа 0.
Рисунок 1.1 – Соотношение типов формальных языков и грамматик
Пример 1.6. Примеры различных типов формальных языков и грамматик по классификации Хомского. Терминалы будем обозначать строчными символами, нетерминалы – прописными буквами, начальный символ грамматики – S.
а) Язык типа 0 L(G)={ a2bn2 −1 | n ≥1} определяется грамматикой с прави-
лами вывода: |
|
|
|
1) |
S → aaCFD; |
2) |
AD → D; |
3) |
F → AFB | AB; |
4) |
Cb → bC; |
5) |
AB → bBA; |
6) |
CB → C; |
7) |
Ab → bA; |
8) bCD → ε. |
|
б) Контекстно-зависимый язык L(G)={anbncn | n≥1} определяется грамма- |
|||
тикой с правилами вывода: |
|
|
|
1) |
S → aSBC | abc; |
2) bC → bc; |
6
3) CB → BC; |
4) cC → cc; |
5) BB → bb.
в) Контекстно-свободный язык L(G)={(ab)n(cb)n | n>0 } определяется грамматикой с правилами вывода:
1)S → aQb | accb;
2)Q → cSc.
г) Регулярный язык L(G)={ω | ω {a, b}+, где нет двух рядом стоящих а} определяется грамматикой с правилами вывода:
1)S → A | B ;
2)A → a | Ba;
3)B → b | Bb | Ab.
Постановка задачи к лабораторной работе № 1
При выполнении лабораторной работы следует реализовать следующие действия:
1)составить грамматику, порождающую формальный язык, заданный в соответствии с вариантом;
2)определить тип формальной грамматики и языка по классификации Хомского;
3)разработать программное средство, распознающее тип введенной пользователем грамматики по классификации Хомского.
Варианты индивидуальных заданий представлены в таблице 1.1.
Таблица 1.1 – Варианты индивидуальных заданий к лабораторной работе № 1
Вариант |
|
|
|
|
|
|
|
|
|
|
Формальный язык |
||
|
|
|
|
||||||||||
1 |
L(G)={anbmck | n, m, k>0} |
|
|
||||||||||
2 |
|
|
|
n |
(cb) |
m |
≥ |
|
|
||||
|
L(G)={(ab) |
|
|
| n, m 0} |
|||||||||
3 |
L(G)={0 |
n |
(10) |
m |
|
|
|
≥ |
|
|
|||
|
|
|
|
| n, m 0} |
|
|
|||||||
4 |
L(G)={wcwcw | w |
|
+ |
} |
|||||||||
|
{a, b} |
|
|||||||||||
5 |
L(G)={c2ndn | n>0} |
|
|
||||||||||
6 |
L(G)={l+l-l | l |
|
|
|
+ |
|
|
||||||
|
|
|
{a, b} } |
|
|
||||||||
7 |
L(G)={(10)n-1(01)n+1 | n>0} |
||||||||||||
8 |
L(G)={(ac) |
n |
|
|
|
|
|
|
|
|
|
||
|
|
| n>0, a {b, d}, c {+, -}} |
|||||||||||
9 |
|
|
|
|
|
n |
| n>0} |
|
|
||||
|
L(G)={ (010) |
|
|
|
|
|
|||||||
10 |
L(G)={a1a2…anan…a2a1 | ai {0, 1}} |
||||||||||||
11 |
L(G)={a1a2…ana1a2…an | ai {c, d}} |
||||||||||||
12 |
L(G)={ab.b | ai {+, -}, b {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}+} |
7
2 Лабораторная работа № 2. Тема: «Построение конечного автомата по регулярной грамматике»
Цель: - закрепить понятия «регулярная грамматика», «недетерминированный и детерминированный конечный автомат»;
- сформировать умения и навыки построения конечного автомата по регулярной грамматике и преобразования недетерминированного конечного автомата к детерминированному конечному автомату.
Основы теории
Распознавателем для регулярной грамматики является конечный автомат
(КА).
Определение 2.1. Детерминированным конечным автоматом (ДКА) называется пятерка объектов:
M =(Q, T, F, H , Z ) , |
(2.1) |
где Q - конечное множество состояний автомата;
T - конечное множество допустимых входных символов;
F - функция переходов, отображающая множество Q × T во множество Q;
H - конечное множество начальных состояний автомата;
Z - множество заключительных состояний автомата, Z Q. Определение 2.2. Недетерминированным конечным автоматом (НКА)
называется конечный автомат, в котором в качестве функции переходов используется отображение Q ×T во множество всех подмножеств множества со-
стояний автомата P(Q) , т.е. функция переходов неоднозначна, так как текущей паре (q, t) соответствует множество очередных состояний автомата q′ P(Q) .
Способы представления функции переходов
Командный способ. Каждую команду КА записывают в форме F(q, t) = p , где q, p Q, t T .
Табличный способ. Строки таблицы переходов соответствуют входным символам автомата t T, а столбцы – состояниям Q. Ячейки таблицы заполняются новыми состояниями, соответствующими значению функции F(q, t) .
Неопределенным значениям функции переходов соответствуют пустые ячейки таблицы.
Графический способ. Строится диаграмма состояний автомата – неупорядоченный ориентированный помеченный граф. Вершины графа помечены именами состояний автомата. Дуга ведет из состояния q в состояниe p и по-
мечается списком всех символов t T, для которых F(q, t) = p . Вершина, соответствующая входному состоянию автомата, снабжается стрелкой. Заключи-
8
тельное состояние на графе обозначается двумя концентрическими окружностями.
Алгоритм 2.1. Построение КА по регулярной грамматике
Вход: регулярная грамматика G =(VT ,VN , P, S).
Выход: КА M =(Q, T, F, H , Z ) .
Шаг 1. Пополнить грамматику правилом A →aN , где A VN ,a VT и N
- новый нетерминал, для каждого правила вида A →a , если в грамматике нет соответствующего ему правила A →aB , где B VN .
Шаг 2. Начальный символ грамматики S принять за начальное состояние
КА H . Из |
нетерминалов |
образовать множество состояний |
автомата |
Q =VN {N}, |
а из терминалов – множество символов входного |
алфавита |
|
T =VT . |
|
A →aB преобразовать в функцию переходов |
|
Шаг 3. Каждое правило |
F(A, a) = B , где A, B VN ,a VT .
Шаг 4. Во множество заключительных состояний включить все вершины, помеченные символами B VN из правил вида A →aB , для которых имеются
соответствующие правила A →a , где A, B VN ,a VT .
Шаг 5. Если в грамматике имеется правило S →ε , где S - начальный символ грамматики, то поместить S во множество заключительных состояний.
Шаг 6. Если получен НКА, то преобразовать его в ДКА.
Алгоритм 2.2. Преобразование НКА в ДКА
Вход: НКА M =(Q, T, F, H , Z ) .
Выход: ДКА M ′=(Q′, T , F′, H , Z′) .
Шаг 1. Пометить первый столбец таблицы переходов M ′ ДКА начальным состоянием (множеством начальных состояний) НКА M .
Шаг 2. Заполняем очередной столбец таблицы переходов M ′, помеченный символами D , для этого определяем те состояния M , которые могут быть достигнуты из каждого символа строки D при каждом входном символе x . Поместить каждое найденное множество R (в том числе ) в соответствующие позиции столбца D таблицы M ′, т.е.:
F′(D, x) ={s | s F(t, x) для некоторого t D }.
Шаг 3. Для каждого нового множества R (кроме ), полученного в столбце D таблицы переходов M ′, добавить новый столбец в таблицу, помеченный R .
Шаг 4. Если в таблице переходов КА M ′ есть столбец с незаполненными позициями, то перейти к шагу 2.
9
Шаг 5. Во множество Z ′ ДКА M ′ включить каждое множество, помечающее столбец таблицы переходов M ′ и содержащее q Z НКА M .
Шаг 6. Составить таблицу новых обозначений множеств состояний и определить ДКА M ′ в этих обозначениях.
Пример 2.1. Дана регулярная грамматика G =({a, b}, {S, A, B}, P, S) с правилами P : 1) S → aB | aA; 2) B →bB | a; 3) A → aA | b . Построить по ре-
гулярной грамматике КА и преобразовать полученный автомат к детерминированному виду.
Решение задачи включает следующую последовательность действий. 1 Построим по регулярной грамматике КА.
1.1Пополним грамматику правилами A →bN и B → aN , где N - новый нетерминал.
1.2Начальное состояние конечного автомата H = S . Множество состоя-
ний автомата Q =VN ={S, A, B, N}, множество символов входного алфавита
T=VT ={a, b}.
1.3Значения сформированной функции переходов даны в таблице 2.1.
Таблица 2.1 – Функция переходов автомата M
F |
S |
A |
B |
N |
a |
A, B |
A |
N |
|
b |
|
N |
B |
|
1.4Множество заключительных состояний Z ={N}.
1.5Для начального символа грамматики ε-правила отсутствуют. Конечный автомат М - недетерминированный, граф НКА представлен на
рисунке 2.1 слева.
|
a |
b |
b |
|
S |
|
|
a |
S |
B |
|
|
|
|
|||
|
|
|
a |
|
|
|
||
|
|
|
|
|
|
|
|
|
a |
|
a |
B |
b |
C |
|
|
A |
|
|
|
a |
b |
|
a |
|
|
A |
b |
N |
|
|
a |
|||
|
|
|
|
|
||||
|
a |
|
N |
a |
E |
|
|
D |
|
|
|
|
|
|
|
||
|
|
|
|
|
b |
|
|
|
|
|
|
|
|
|
|
b |
|
|
|
|
|
|
|
|
|
Рисунок 2.1 - Граф НКА (слева) и ДКА (справа) для Р- грамматики
2 Построим по НКА M ДКА M ′.
2.1 Строим таблицу переходов для ДКА M ′ (таблица 2.2).
10