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

XVYggbpFw2

.pdf
Скачиваний:
2
Добавлен:
15.04.2023
Размер:
2.31 Mб
Скачать

{

Terminal x; Condition T; char y;

int z,PM;

if(EndOfStream()) return false; T = S;

ClearBufer(); do

{

x = GetNextSymbol(y);

if(x==n) return false; //Недопустимый символ switch(T)

{

case S: switch(x)

{

case p: break; case a: T=E;

if(!BufferIsEmpty())

{

z=GetFromBuffer(PM); if(PM) AddToMassivPlus(z); else AddToMassivMinus(z); ClearBuffer();

}

AddToBuffer(y); break;

case l: T=B; if(!BufferIsEmpty())

{

z=GetFromBuffer(PM); if(PM) AddToMassivPlus(z); else AddToMassivMinus(z); ClearBuffer();

}

break; default: return false;

}

break; case B: switch(x)

{

case a: T=C; AddToBuffer(y); break;

default: return false;

}

break; case C: switch(x)

{

case a:

AddToBuffer(y); break;

case r: T=E; break; default: return false;

}

break; case E: switch(x)

{

case a:

if(!BufferIsEmpty())

{

z=GetFromBuffer(PM); if(PM) AddToMassivPlus(z); else AddToMassivMinus(z); ClearBuffer();

}

AddToBuffer(y); break;

case l: T=B; break; case p: T=S;

break; case s: T=S;

AddToBuffer(y); break;

default: return false;

}

break;

}

} while(!EndOfStream()); switch(T)

{

case S:

case E: return true; default: return false;

}

}

Рассмотренные примеры применения конечных автоматов имеют дело только с регулярными языками. В реальной программистской практике можно, конечно, столкнуться с более сложными ситуациями. Например, если в вашей программе требуется, чтобы пользователь вводил какие-то арифметические операции с использованием скобок, то конечными автоматами уже не обойтись. Как мы видели, даже язык Дика, слова которого ничего кроме правильно расставленных скобок не содержит, не является регулярным.

В таких случаях привлекают КС-грамматики и им соответствующие МП-автоматы (автоматы с магазинной памятью). Но это уже выходит за рамки настоящего пособия.

Упражнения

17.1.Слово алфавита a,b,c назовем правильным, если в нем содержится не более двух непересекающихся подслов abca. Написать программу, распознающую правильные слова.

17.2.Слово алфавита a,b,c назовем правильным, если любая буква c в нем может встречаться только между a и b (a – слева, b – справа и не обязательно рядом с этой c). Например, abccbca – неправильное, abccbcb – правильное. Написать программу, распознающую правильные слова.

17.3.Слово алфавита a,b назовем правильным, если в нем подслово abba может встречаться только между двумя подсловами baab (не обязательно стоящими рядом с abba). Например, babbaab

неправильное, baabaabbabaab, baabaababaab, abbba – пра-

вильные. Написать программу, распознающую правильные слова.

17.4.Написать программу разбора строки, в которой через один или несколько пробелов записаны целые числа. Любое число кроме нуля не должно начинаться с нуля.

17.5.Написать программу разбора строки, в которой через разделитель “|” записаны несколько сумм положительных целых чисел.

17.6.Написать программу разбора строки, в которой через разделитель “;” с любым количеством пробелов записаны символы азбуки Морзе.

17.7.Некоторые калькуляторы современных мобильных телефонов позволяют вводить арифметические выражения из чисел с использованием операций +,-,*,/. Скобки не используются. Числа могут быть дробными (с десятичной точкой). Написать программу разбора строки с таким выражением. Для простоты все цифры изображать одним и тем же символом (например, “a”).

Литература

1.Белоусов А.И. Дискретная математика [Текст]: учеб. для вузов / А.И. Белоусов, С.Б. Ткачев. – М.: МГТУ, 2004. – 744 с.

2.Карпов Ю.Г. Теория автоматов [Текст]: учеб. для вузов / Ю.Г. Карпов. – СПб: ПИТЕР, 2003. – 208 с.

3.Кузнецов О.П. Дискретная математика для инженера [Текст]: 2-е изд., перераб. и доп. / О.П. Кузнецов, Г.М. Адельсон-Вельский. – М.: Энергоатомиздат, 1988. – 408 с.

4.Мозговой М.В. Классика программирования: алгоритмы, языки, автоматы, компиляторы. Практический подход [Текст] / М.В. Мозговой. – СПб: Наука и техника, 2006. – 320 с.

5.Пентус А.Е. Теория формальных языков [Текст]: учеб. пособие / А.Е. Пентус, М.Р. Пентус. – М.: МГУ, 2004. – 80 с.

6.Рейуорд-Смит В.Дж. Теория формальных языков. Вводный курс [Текст]: Пер. с англ. / В.Дж. Рейуорд-Смит. – М.: Радио и связь,

1988. – 128 с.

7.Теория и реализация языков программирования [Текст]: учеб. пособие / В.А. Серебряков [и др.]. – М.: МЗ Пресс, 2006. – 352 с.

Беляев Владимир Яковлевич

ДИСКРЕТНАЯ МАТЕМАТИКА. ГРАММАТИКИ И АВТОМАТЫ

Учебное пособие

Подписано в печать 25.09.2019. Формат 60×90/16. Усл. печ. л. 6,5. Тираж 300 экз.

Отпечатано в редакционно-издательском отделе (РИО) МАГУ.

Мурманский арктический государственный университет. 183038, г. Мурманск, ул. Капитана Егорова, 15.

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