Главная » Просмотр файлов » Лекции по дискретке

Лекции по дискретке (1021001), страница 21

Файл №1021001 Лекции по дискретке (Лекции по дискретке) 21 страницаЛекции по дискретке (1021001) страница 212017-07-09СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 21)

В связи с тем, что нули не влияют на состояние автомата, каждая единица изменяет его состояние с А на В и с В на А, и начальное состояние является тем же, что и последнее состояние. Язык, принимаемый автоматом, состоит из тех строк, которые содержат четное число единиц.

Переходы можно представить также с помощью таблицы и схематически:

Определение.

Автомат называется детерминированным, если в каждом элементе таблицы переходов содержится одно состояние. В недетерминированном ко­нечном автомате это положение не выдерживается.

Следовательно, автомат — детерминированный.

65.Последовательность выполнения.

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

Таким образом, последовательность выполнения лабораторной работы следующая:

  1. Ознакомится с теорией регулярных грамматик.

  2. В соответствии с заданным регулярным выражением написать регулярную грамматику.

  3. Записать соответствующий детерминированный конечный автомат с указанием таблицы переходов.

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

  5. Привести контрольную распечатку.

  6. Оформить отчет.

Работа считается выполненной только после оформления отчета, защиты и подписи преподавателя.

66.Методический пример.

Программа "grammatika", представляющая синтаксический анализатор, соответствующий детерминированному конечному автомату М, имеет следующий вид:

program grammatika;

uses crt;

type perehod = record

old, term, new: char;

end;

var sost:array [1 .. 13] of perehod;

stroka: string [255];

sim, neterm: string [1];

dlina, n, i: integer;

ok: boolean;

begin { блок определения таблицы переходов }

sost[1].old :='S'; sost[1].term :='2'; sost[1].new := 'A';

sost[2].old :='A'; sost[2].term :='2'; sost[2].new := 'B';

sost[3].old :='B'; sost[3].term :='1’; sost[3].new := 'C';

sost[4].old := 'C'; sost[4].term := 'b'; sost[4].new := 'S';

sost[5].old := 'S'; sost[5].term := 'b'; sost[5].new := 'D';

sost[6].old :='D'; sost[6].term :='2'; sost[6].new :='E';

sost[7].old :='E'; sost[7] .term := '1'; sost[7].new :='F';

sost[8].old := 'F'; sost[8].term := 'b'; sost[8].new := 'D';

sost[9].old := 'F'; sost[9].term := '2'; sost[9].new := 'K';

sost[10].old:='B'; sost[10].term :='2'; sost[10].new := 'K';

sost[11].old := 'K'; sost[11].term := '2'; sost[11].new := 'L';

sost[12].old := 'L'; sost[12].term := '2'; sost[12].new := 'M';

sost[13].old := 'M'; sost[13].term := '2'; sost[13].new := 'L';

clrscr;

{ блок основной программы }

while TRUE do begin

writeln ('Введите строку символов);

readln (stroka);

dlina := length (stroka);

n:=0;

ok :=' TRUE;

neterm := 'S';

while ok and (n < dlina) do

begin i := 0;

n:=n+ 1

sim := copy (stroka, n, 1);

ok := FALSE;

repeat i:=i+l;

if ((sost [i].old = neterm) and

(sost [i].term = sim)) then

begin

ok := TRUE;

neterm := sost[i].new;

end;

until ( ok or (i = 13));

end;

if ((neterm = 'S') or (neterm = 'B') or (neterm = 'F') or (neterm = 'L') and ok then writeln ('Данная строка принадлежит языку')

else writeln ('Данная строка не принадлежит языку'); readkey; end; end.

67.Контрольная распечатка.

Введите строку символов 221b2

Данная строка не принадлежит языку

Введите строку символов 221b221b221b

Данная строка принадлежит языку

Введите строку символов b21

Данная строка принадлежит языку

Введите строку символов b21b21

Данная строка принадлежит языку

Введите строку символов 22222222

Данная строка принадлежит языку

Ведите строку символов 221b221bb21b21b212222

Данная строка принадлежит языку

Введите строку символов 211b

Данная строка не принадлежит языку

Введите строку символов

Данная строка принадлежит языку

68.Замечания.

1. Синтаксический анализатор "grammatika" реализован исходя из ви­да детерминированного конечного автомата. Этот же самый анализатор может иметь множество других программных реализаций, как-то:

a) в качестве основы может быть взята грамматика;

b) могут использоваться различные программные конструкции языков программирования и другие причины.

2. Синтаксический анализатор может быть реализован на любом, доступном студенту, алгоритмическом языке: PL, Си, TURBO Pascal, ассемблер, BASIC и других. Нельзя на PHP, PERL.

В качестве иллюстрации приведем синтаксический анализатор, реализованный на языке ассемблера.

Пусть задано регулярное выражение (cc) (ba10)* (0а)*, т. е. имеется язык:

L75 = {(cc)m (balO)n (Oa)p : m, n, p > 0}.

Один из вариантов синтаксического анализатора на языке ассемблера имеет следующий вид.

TITLE (cc)* (bа10)*(0а)* code segment

assume cs:code, ds:code

org l00h begin: JMP MAIN

;------------------------------------------------------

clf egu OAh, ODh

OKMSG db clf, 'O-K TESTED ! $'

ERMSG db clf, 07h, 'Invalid simvol !', '$'

WMSG db clf, 'Press the ENTER for exit!', '$'

;————————————————

MAIN proc

S: call GCHR

cmp al, Odh

jeOK

cmp al,'c'

jeT

cmp al, 'b'

jeV

cmp al, '0'

jeY

jmpNO T:

T: call GCHR

cmp al, 'c'

jeS jmpNO

V: call GCHR cmp al, 'a' jeW jmpNO

W:call GCHR cmp al, ' 1' jeX jmpNO

X: call GCHR

cmp al, '0'

je U

jmp NO

U: call GCHR

cmp al, 'b'

je V

cmp al, '0'

je Y

cmp al, Odh

je OK

jmp NO

Y: call GCHR

cmp al, 'a'

je Z

jmp NO

Z: call GCHR

cmp al,'0'

je Y

cmp al, Odh

je OK

NO: lea dx, ERMSG

mov ah, 09h

Int 21h

call WAI

ret

OK: lea dx, OKMSG

mov ah, 09h

Int 21h

call WAI

ret

MAIN endp

;------------------------------------------------------

GCHR proc

mov ah, Olh

Int21h

Ret

GCHR endp

;--------------------------------------------------------------------

WAI proc

lea dx, WMSG

mov ah, 09h

Int 21h

call GCHR

cmp al, Odh

jne WT

ret WAI endp

;------------------------------------------------------

code ends

end begin ; IT WORKS !

синтаксического анализатора (на любом из реализованных на компьютерной технике.

69.Отчет по практической работе.

Отчет оформляется в соответствии с требованиями, предъявляемыми к оформлению лабораторных работ в вузе, и должен содержать:

  1. Титульный лист.

  2. Наименование и цель работы.

  3. Исходные данные варианта задания.

  4. Алгоритм решения задачи (граф, таблица переходов).

  5. Листинг программы с исходными и выходными данными (листинг программы).

  6. Анализ результатов (контрольная распечатка).

  7. Выводы.

Замечание: листы отчета должны быть скреплены.

70.Контрольные вопросы

  1. Какие грамматики называются регулярными?

  2. Чем отличается детерминированный конечный автомат от недетерминированного?

  3. Связь регулярных грамматик и конечных автоматов.

  4. Что такое регулярное выражение?

  5. Алгоритм получения детерминированного конечного автомата из недетерминированного.

  6. Какие программные особенности отмечены при написании синтаксического анализатора.

  7. Что такое состояние отказа в автомате, соответствующем анализатору?

  8. Что такое грамматика?

71.Варианты заданий.

Вариант задания определяется по последним двум цифрам зачётной книжки.

  1. (0110)* (1101)* (0111)*

  2. (abaa)* (baba)* (abbb)*

  3. (a120)* (a001)* (baa0)*

  4. (a1b1)* (11a1)* (b1aa)*

  5. (21b)* (112b)* (b122)*

  6. (baba)* (abab)* (aaba)*

  7. (1011)* (1100)* (0001)*

  8. (a1b1)* (b12a)* (bb1)*

  9. (bba1)* (11aa)* (1ba1)*

  10. (b211)* (1abb)* (b11a)*

  11. (ab11)* (a11b)* (1aa1)*

  12. (bb12)* (2bb1)* (1b21)*

  13. (1000)* (1001)* (0001)*

  14. (1ab1)* (2b22)* (ab1b)*

  15. (ba21)* (1bba)* (2a11)*

  16. (ba22)* (11bb)* (2baa)*

  17. (0001)* (1011)* (1000)*

  18. (bb2a)* (a2bb)* (12ba)*

  19. (1b0a)* (1ab2)* (120a)*

  20. (1ab0)* (11ab)* (11a0)*

  21. (bba2)* (bb01)* (bb0a)*

  22. (bb00)* (a12b)* (baab)*

  23. (1100)* (1000)* (1011)*

  24. (1abb)* (1aa0)* (1bbb)*

  25. (2110)* (1210)* (1101)*

  26. (baba)* (cbab)* (abbb)*

  27. (1010)* (c010)* (1110)*

  28. (01ab)* (ba10)* (a10a)*

  29. (a010)* (0010)* (0110)*

  30. (ab11)* (11ab)* (a1a1)*

  31. (ccaa)* (0caa)* (a0ca)*

  32. (a010)* (0011)* (1001)*

  33. (1001)* (1aa0)* (0a11)*

  34. (10a1)* (0011)* (1100)*

  35. (a100)* (01a0)* (11aa)*

  36. (a010)* (01a0)* (aa11)*

  37. (01a0)* (a011)* (010a)*

  38. (10a0)* (1a01)* (110a)*

  39. (1b01)* (01b1)* (b1b1)*

  40. (1101)* (c010)* (00cc)*

  41. (0c10)* (0101)* (1101)*

  42. (abca)* (caca)* (baba)*

  43. (0001)* (0101)* (0a10)*

  44. (00a1)* (a110)* (a10a)*

  45. (11a0)* (a01a)* (01a0)*

  46. (10a1)* (0a10)* (01a0)*

  47. (ca0a)* (caca)* (c0c0)*

  48. (01cc)* (cc10)* (c01c)*

  49. (01aa)* (1010)* (a00a)*

  50. (a00a)* (01a0)* (0a01)*

  51. (0aa1)* (a001)* (a0a1)*

  52. (0a01)* (10a1)* (0a10)*

  53. (10a1)* (0a10)* (a1a1)*

  54. (a0a0)* (a001)* (0a1a)*

  55. (aa01)* (01aa)* (000a)*

  56. (a01a)* (a001)* (00a0)*

  57. (0a10)* (a101)* (a001)*

  58. (0a10)* (00a1)* (a100)*

  59. (1a01)* (a101)* (001a)*

  60. (1a01)* (0a10)* (a01a)*

  61. (1021)* (2021)* (2010)*

  62. (2010)* (2100)* (2220)*

  63. (2102)* (2201)* (2202)*

  64. (2010)* (0012)* (2001)*

  65. (1010)* (2001)* (2220)*

  66. (1210)* (0201)* (2202)*

  67. (01a0)* (01a1)* (1a01)*

  68. (a101)* (a110)* (a10a)*

  69. (1202)* (2102)* (2001)*

  70. (0012)* (2011)* (1021)*

  71. (abab)* (baba)* (bbaa)*

  72. (baab)* (abab)* (bbaa)*

  73. (a101)* (1a01)* (0a11)*

  74. (1a01)* (a10a)* (a101)*

  75. (0a10)* (a111)* (aa10)*

  76. (a10a)* (a101)* (a1aa)*

  77. (aaa0)* (a010)* (011a)*

  78. (a010)* (a1a0)* (a100)*

  79. (aa11)* (100a)* (0a10)*

  80. (10aa)* (a0a1)* (1a10)*

  81. (a10a)* (a1a0)* (01a1)*

  82. (a10a)* (a1a0)* (00a1)*

  83. (a1a0)* (0a01)* (a101)*

  84. (1a01)* (a1a0)* (a0a1)*

  85. (abac)* (caba)* (baca)*

  86. (1010)* (1c01)* (cc10)*

  87. (01c0)* (0110)* (c0c0)*

  88. (0c01)* (c01c)* (c110)*

  89. (1012)* (2100)* (0120)*

  90. (1021)* (1210)* (2210)*

  91. (1101)* (2010)* (2012)*

  92. (2010)* (1021)* (2121)*

  93. (caba)* (cabb)* (abac)*

  94. (abab)* (abcc)* (ccab)*

  95. (caca)* (baba)* (bacc)*

  96. (abca)* (abca)* (cbaa)*

  97. (0120)* (0012)* (2100)*

  98. (abab)* (cbcc)* (baca)*

  99. (baca)* (babc)* (cbba)*

  100. (babb)* (aacb)* (ccab)*

  1. Практическое занятие №2. Работа с регулярными выражениями на основе PERL .

72.Общие указания к выполнению практической работы.

Практические работы выполняются с использованием персональных компьютеров. Указания по технике безопасности совпадают с требованиями, предъявляемыми к пользователю ЭВМ. Другие опасные факторы отсутствуют.

73.Цель работы

Ознакомиться и научиться составлять регулярные выражения в синтаксисе языка PERL. Научиться применить полученные знания к задаче поиска текста по шаблону в файлах.

74.Теоретические сведения.

8.03.1. Регулярные выражения (шаблоны).

Определение.

Регулярные выражения (англ. regular expressions, сокр. RegExp, RegEx) — это формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов (терминалов). По сути это строка-образец (англ. pattern, по-русски её часто называют «шаблоном», «маской»), состоящая из символов (не терминалов), метасимволов (терминалов) и задающего правило поиска (продукций).

Регулярные выражения или шаблоны (pattern) то же самое, что и regexp процедуры в Unix. Выражения и синтаксис заимствованы из свободно распространяемых процедур V8 Генри Спенсера (Henry Spencer).

В шаблонах используются следующие метасимволы (символы обозначающие группы других символов) часто называемые egrep‑стандартом:

¦ \ — считать следующий метасимвол как обычный символ.

¦ ^ — начало строки

¦ . — один произвольный символ. Кроме “\ n” — конец строки.

¦ $ — конец строки

¦ | — альтернатива (или)

Характеристики

Тип файла
Документ
Размер
11,4 Mb
Тип материала
Высшее учебное заведение

Список файлов лекций

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6310
Авторов
на СтудИзбе
313
Средний доход
с одного платного файла
Обучение Подробнее