Скачиваний:
8
Добавлен:
01.05.2014
Размер:
183.3 Кб
Скачать

Санкт-Петербургский Государственный Электротехнический Университет

(ЛЭТИ)

кафедра ВТ

Отчет по лабораторной работе №3

по дисциплине «Языки, грамматики и автоматы»

Вариант 18.

Выполнила: Пожидаева Е.А.

Гр. 4331

Проверил: Холод И. И.

Санкт-Петербург

2007

Цель работы.

Получение практических навыков по составлению функций переходов магазинного распознавателя и анализ его работы в процессе трансляции входной цепочки.

.

Задание.

Требуется реализовать последовательность описания переменных (int, char), операторов цикла (repeat), и операторов присваивания с логическими выражениями ( операции: &, V, /) . Построить функции перехода.

Построение грамматики.

;

- множество терминальных символов;

- множество нетерминальных символов;

- начальный нетерминальный символ;

- множество правил вывода.

Грамматика, построенная с помощью программы OSA.

<i>::=<tip>|<op>|<cikl>

<literal>::=<bukva><c>

<c>::=<bukva><c>|<cifra><c>

<c>::=$

<bukva>::=a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z

<cifra>::=0|1|2|3|4|5|6|7|8|9

<tip>::=<type1><s>

<s>::=;<type1><s>

<s>::=$

<type1>::=<type><e>

<type>::="int "|"char "

<e>::=<literal><d>

<d>::=","<literal><d>

<d>::=$

<op>::=<literal><r>

<r>::= = <t>

<t>::=<k>|<h>

<h>::=<cifra><z>

<z>::=<cifra><z>|$

<k>::=<p>" ( "<literal>","<literal>" ) "

<p>::=&|V|/

<cikl>::="repeat"<w>"until"<u>

<w>::=<op><q>

<q>::=;<op><q>|$

<u>::=<literal><f>

<f>::= "<" <h>

Построим автомат:

- множество входных символов;

- множество состояний;

- начальное состояние автомата;

- множество магазинных символов;

- маркер дна;

- функция перехода;

- конечное множество состояний автомата.

Построение функций перехода.

New Functions

-- Оптимизированные функции для правил, правая часть которых начинается с терминала

-- сдвиг, вытолкнуть, заменить

(S,a,<bukva>)=(S,$,$) -- для правила 8!

(S,b,<bukva>)=(S,$,$) -- для правила 9

(S,c,<bukva>)=(S,$,$) -- для правила 10!

(S,d,<bukva>)=(S,$,$) -- для правила 11

(S,e,<bukva>)=(S,$,$) -- для правила 12!

(S,f,<bukva>)=(S,$,$) -- для правила 13!

(S,g,<bukva>)=(S,$,$) -- для правила 14!

(S,h,<bukva>)=(S,$,$) -- для правила 15

(S,i,<bukva>)=(S,$,$) -- для правила 16!

(S,j,<bukva>)=(S,$,$) -- для правила 17!

(S,k,<bukva>)=(S,$,$) -- для правила 18!

(S,l,<bukva>)=(S,$,$) -- для правила 19!

(S,m,<bukva>)=(S,$,$) -- для правила 20

(S,n,<bukva>)=(S,$,$) -- для правила 21

(S,o,<bukva>)=(S,$,$) -- для правила 22

(S,p,<bukva>)=(S,$,$) -- для правила 23

(S,q,<bukva>)=(S,$,$) -- для правила 24

(S,r,<bukva>)=(S,$,$) -- для правила 25

(S,s,<bukva>)=(S,$,$) -- для правила 26

(S,t,<bukva>)=(S,$,$) -- для правила 27

(S,u,<bukva>)=(S,$,$) -- для правила 28!

(S,v,<bukva>)=(S,$,$) -- для правила 29

(S,w,<bukva>)=(S,$,$) -- для правила 30!

(S,x,<bukva>)=(S,$,$) -- для правила 31!

(S,y,<bukva>)=(S,$,$) -- для правила 32

(S,z,<bukva>)=(S,$,$) -- для правила 33

(S,0,<cifra>)=(S,$,$) -- для правила 34

(S,1,<cifra>)=(S,$,$) -- для правила 35!

(S,2,<cifra>)=(S,$,$) -- для правила 36

(S,3,<cifra>)=(S,$,$) -- для правила 37

(S,4,<cifra>)=(S,$,$) -- для правила 38

(S,5,<cifra>)=(S,$,$) -- для правила 39

(S,6,<cifra>)=(S,$,$) -- для правила 40!

(S,7,<cifra>)=(S,$,$) -- для правила 41!

(S,8,<cifra>)=(S,$,$) -- для правила 42!

(S,9,<cifra>)=(S,$,$) -- для правила 43

(S,";",<s>)=(S,<s><type1>,$) -- для правила 45!

(S,"int ",<type>)=(S,$,$) -- для правила 48

(S,"char ",<type>)=(S,$,$) -- для правила 49!

(S,",",<d>)=(S,<d><literal>,$) -- для правила 51!

(S,=,<r>)=(S,<t>,$) -- для правила 54

(S,&,<p>)=(S,$,$) -- для правила 61

(S,V,<p>)=(S,$,$) -- для правила 62!

(S,/,<p>)=(S,$,$) -- для правила 63!

(S,"repeat",<cikl>)=(S,<u>"until"<w>,$) -- для правила 64!

(S,;,<q>)=(S,<q><op>,$) -- для правила 66

(S,"<",<f>)=(S,<h>,$) -- для правила 69!

-- Функции общего вида

-- нет сдвига, заменить

*(S,"int ",<i>)=(S,<tip>,$) -- для правила 1

*(S,"char ",<i>)=(S,<tip>,$) -- для правила 1

*(S,a,<i>)=(S,<op>,$) -- для правила 2

*(S,b,<i>)=(S,<op>,$) -- для правила 2

*(S,c,<i>)=(S,<op>,$) -- для правила 2

*(S,d,<i>)=(S,<op>,$) -- для правила 2

*(S,e,<i>)=(S,<op>,$) -- для правила 2

*(S,f,<i>)=(S,<op>,$) -- для правила 2

*(S,g,<i>)=(S,<op>,$) -- для правила 2

*(S,h,<i>)=(S,<op>,$) -- для правила 2

*(S,i,<i>)=(S,<op>,$) -- для правила 2

*(S,j,<i>)=(S,<op>,$) -- для правила 2

*(S,k,<i>)=(S,<op>,$) -- для правила 2!

*(S,l,<i>)=(S,<op>,$) -- для правила 2

*(S,m,<i>)=(S,<op>,$) -- для правила 2!

*(S,n,<i>)=(S,<op>,$) -- для правила 2

*(S,o,<i>)=(S,<op>,$) -- для правила 2!

*(S,p,<i>)=(S,<op>,$) -- для правила 2

*(S,q,<i>)=(S,<op>,$) -- для правила 2

*(S,r,<i>)=(S,<op>,$) -- для правила 2

*(S,s,<i>)=(S,<op>,$) -- для правила 2

*(S,t,<i>)=(S,<op>,$) -- для правила 2

*(S,u,<i>)=(S,<op>,$) -- для правила 2

*(S,v,<i>)=(S,<op>,$) -- для правила 2

*(S,w,<i>)=(S,<op>,$) -- для правила 2!

*(S,x,<i>)=(S,<op>,$) -- для правила 2

*(S,y,<i>)=(S,<op>,$) -- для правила 2

*(S,z,<i>)=(S,<op>,$) -- для правила 2

*(S,"repeat",<i>)=(S,<cikl>,$) -- для правила 3

*(S,a,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,b,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,c,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,d,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,e,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,f,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,g,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,h,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,i,<literal>)=(S,<c><bukva>,$) -- для правила 4!

*(S,j,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,k,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,l,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,m,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,n,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,o,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,p,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,q,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,r,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,s,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,t,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,u,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,v,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,w,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,x,<literal>)=(S,<c><bukva>,$) -- для правила 4!

*(S,y,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,z,<literal>)=(S,<c><bukva>,$) -- для правила 4

*(S,a,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,b,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,c,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,d,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,e,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,f,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,g,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,h,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,i,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,j,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,k,<c>)=(S,<c><bukva>,$) -- для правила 5!

*(S,l,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,m,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,n,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,o,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,p,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,q,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,r,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,s,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,t,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,u,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,v,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,w,<c>)=(S,<c><bukva>,$) -- для правила 5!

*(S,x,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,y,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,z,<c>)=(S,<c><bukva>,$) -- для правила 5

*(S,0,<c>)=(S,<c><cifra>,$) -- для правила 6

*(S,1,<c>)=(S,<c><cifra>,$) -- для правила 6

*(S,2,<c>)=(S,<c><cifra>,$) -- для правила 6

*(S,3,<c>)=(S,<c><cifra>,$) -- для правила 6

*(S,4,<c>)=(S,<c><cifra>,$) -- для правила 6

*(S,5,<c>)=(S,<c><cifra>,$) -- для правила 6

*(S,6,<c>)=(S,<c><cifra>,$) -- для правила 6!

*(S,7,<c>)=(S,<c><cifra>,$) -- для правила 6

*(S,8,<c>)=(S,<c><cifra>,$) -- для правила 6

*(S,9,<c>)=(S,<c><cifra>,$) -- для правила 6

*(S,"int ",<tip>)=(S,<s><type1>,$) -- для правила 44

*(S,"char ",<tip>)=(S,<s><type1>,$) -- для правила 44

*(S,"int ",<type1>)=(S,<e><type>,$) -- для правила 47

*(S,"char ",<type1>)=(S,<e><type>,$) -- для правила 47

*(S,a,<e>)=(S,<d><literal>,$) -- для правила 50!

*(S,b,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,c,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,d,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,e,<e>)=(S,<d><literal>,$) -- для правила 50!

*(S,f,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,g,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,h,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,i,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,j,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,k,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,l,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,m,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,n,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,o,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,p,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,q,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,r,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,s,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,t,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,u,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,v,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,w,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,x,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,y,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,z,<e>)=(S,<d><literal>,$) -- для правила 50

*(S,a,<op>)=(S,<r><literal>,$) -- для правила 53!

*(S,b,<op>)=(S,<r><literal>,$) -- для правила 53!

*(S,c,<op>)=(S,<r><literal>,$) -- для правила 53

*(S,d,<op>)=(S,<r><literal>,$) -- для правила 53

*(S,e,<op>)=(S,<r><literal>,$) -- для правила 53

*(S,f,<op>)=(S,<r><literal>,$) -- для правила 53

*(S,g,<op>)=(S,<r><literal>,$) -- для правила 53

*(S,h,<op>)=(S,<r><literal>,$) -- для правила 53

*(S,i,<op>)=(S,<r><literal>,$) -- для правила 53!

*(S,j,<op>)=(S,<r><literal>,$) -- для правила 53

*(S,k,<op>)=(S,<r><literal>,$) -- для правила 53

*(S,l,<op>)=(S,<r><literal>,$) -- для правила 53

*(S,m,<op>)=(S,<r><literal>,$) -- для правила 53

*(S,n,<op>)=(S,<r><literal>,$) -- для правила 53

*(S,o,<op>)=(S,<r><literal>,$) -- для правила 53

*(S,p,<op>)=(S,<r><literal>,$) -- для правила 53

*(S,q,<op>)=(S,<r><literal>,$) -- для правила 53

*(S,r,<op>)=(S,<r><literal>,$) -- для правила 53

*(S,s,<op>)=(S,<r><literal>,$) -- для правила 53

*(S,t,<op>)=(S,<r><literal>,$) -- для правила 53

*(S,u,<op>)=(S,<r><literal>,$) -- для правила 53!

*(S,v,<op>)=(S,<r><literal>,$) -- для правила 53!

*(S,w,<op>)=(S,<r><literal>,$) -- для правила 53

*(S,x,<op>)=(S,<r><literal>,$) -- для правила 53

*(S,y,<op>)=(S,<r><literal>,$) -- для правила 53

*(S,z,<op>)=(S,<r><literal>,$) -- для правила 53

*(S,&,<t>)=(S,<k>,$) -- для правила 55

*(S,V,<t>)=(S,<k>,$) -- для правила 55

*(S,/,<t>)=(S,<k>,$) -- для правила 55

*(S,0,<t>)=(S,<h>,$) -- для правила 56

*(S,1,<t>)=(S,<h>,$) -- для правила 56

*(S,2,<t>)=(S,<h>,$) -- для правила 56

*(S,3,<t>)=(S,<h>,$) -- для правила 56

*(S,4,<t>)=(S,<h>,$) -- для правила 56

*(S,5,<t>)=(S,<h>,$) -- для правила 56

*(S,6,<t>)=(S,<h>,$) -- для правила 56

*(S,7,<t>)=(S,<h>,$) -- для правила 56

*(S,8,<t>)=(S,<h>,$) -- для правила 56

*(S,9,<t>)=(S,<h>,$) -- для правила 56

*(S,0,<h>)=(S,<z><cifra>,$) -- для правила 57

*(S,1,<h>)=(S,<z><cifra>,$) -- для правила 57

*(S,2,<h>)=(S,<z><cifra>,$) -- для правила 57

*(S,3,<h>)=(S,<z><cifra>,$) -- для правила 57

*(S,4,<h>)=(S,<z><cifra>,$) -- для правила 57

*(S,5,<h>)=(S,<z><cifra>,$) -- для правила 57

*(S,6,<h>)=(S,<z><cifra>,$) -- для правила 57

*(S,7,<h>)=(S,<z><cifra>,$) -- для правила 57

*(S,8,<h>)=(S,<z><cifra>,$) -- для правила 57

*(S,9,<h>)=(S,<z><cifra>,$) -- для правила 57

*(S,0,<z>)=(S,<z><cifra>,$) -- для правила 58

*(S,1,<z>)=(S,<z><cifra>,$) -- для правила 58

*(S,2,<z>)=(S,<z><cifra>,$) -- для правила 58

*(S,3,<z>)=(S,<z><cifra>,$) -- для правила 58

*(S,4,<z>)=(S,<z><cifra>,$) -- для правила 58!

*(S,5,<z>)=(S,<z><cifra>,$) -- для правила 58

*(S,6,<z>)=(S,<z><cifra>,$) -- для правила 58

*(S,7,<z>)=(S,<z><cifra>,$) -- для правила 58

*(S,8,<z>)=(S,<z><cifra>,$) -- для правила 58

*(S,9,<z>)=(S,<z><cifra>,$) -- для правила 58

*(S,&,<k>)=(S," ) "<literal>","<literal>" ( "<p>,$) -- для правила 60

*(S,V,<k>)=(S," ) "<literal>","<literal>" ( "<p>,$) -- для правила 60

*(S,/,<k>)=(S," ) "<literal>","<literal>" ( "<p>,$) -- для правила 60

*(S,a,<w>)=(S,<q><op>,$) -- для правила 65

*(S,b,<w>)=(S,<q><op>,$) -- для правила 65

*(S,c,<w>)=(S,<q><op>,$) -- для правила 65

*(S,d,<w>)=(S,<q><op>,$) -- для правила 65

*(S,e,<w>)=(S,<q><op>,$) -- для правила 65

*(S,f,<w>)=(S,<q><op>,$) -- для правила 65

*(S,g,<w>)=(S,<q><op>,$) -- для правила 65!

*(S,h,<w>)=(S,<q><op>,$) -- для правила 65

*(S,i,<w>)=(S,<q><op>,$) -- для правила 65

*(S,j,<w>)=(S,<q><op>,$) -- для правила 65

*(S,k,<w>)=(S,<q><op>,$) -- для правила 65

*(S,l,<w>)=(S,<q><op>,$) -- для правила 65

*(S,m,<w>)=(S,<q><op>,$) -- для правила 65!

*(S,n,<w>)=(S,<q><op>,$) -- для правила 65

*(S,o,<w>)=(S,<q><op>,$) -- для правила 65

*(S,p,<w>)=(S,<q><op>,$) -- для правила 65

*(S,q,<w>)=(S,<q><op>,$) -- для правила 65

*(S,r,<w>)=(S,<q><op>,$) -- для правила 65

*(S,s,<w>)=(S,<q><op>,$) -- для правила 65

*(S,t,<w>)=(S,<q><op>,$) -- для правила 65

*(S,u,<w>)=(S,<q><op>,$) -- для правила 65

*(S,v,<w>)=(S,<q><op>,$) -- для правила 65

*(S,w,<w>)=(S,<q><op>,$) -- для правила 65

*(S,x,<w>)=(S,<q><op>,$) -- для правила 65

*(S,y,<w>)=(S,<q><op>,$) -- для правила 65

*(S,z,<w>)=(S,<q><op>,$) -- для правила 65

*(S,a,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,b,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,c,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,d,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,e,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,f,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,g,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,h,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,i,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,j,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,k,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,l,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,m,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,n,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,o,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,p,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,q,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,r,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,s,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,t,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,u,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,v,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,w,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,x,<u>)=(S,<f><literal>,$) -- для правила 68!

*(S,y,<u>)=(S,<f><literal>,$) -- для правила 68

*(S,z,<u>)=(S,<f><literal>,$) -- для правила 68

-- Функции для аннулирующих правил

-- нет сдвига, вытолкнуть

*(S,";",<c>)=(S,$,$) -- для правила 7!

*(S,",",<c>)=(S,$,$) -- для правила 7!

*(S,"=",<c>)=(S,$,$) -- для правила 7!

*(S,")",<c>)=(S,$,$) -- для правила 7!

*(S,"<",<c>)=(S,$,$) -- для правила 7!

*(S,"-|",<c>)=(S,$,$) -- для правила 7!

*(S,"-|",<s>)=(S,$,$) -- для правила 46!

*(S,";",<d>)=(S,$,$) -- для правила 52!

*(S,"-|",<d>)=(S,$,$) -- для правила 52!

*(S,";",<z>)=(S,$,$) -- для правила 59!

*(S,"until",<z>)=(S,$,$) -- для правила 59!

*(S,"-|",<z>)=(S,$,$) -- для правила 59!

*(S,"until",<q>)=(S,$,$) -- для правила 67!

-- Функции выталкивания терминалов

-- сдвиг, вытолкнуть

(S,"(","(")=(S,$,$) -- для правила 60!

(S,",",",")=(S,$,$) -- для правила 60!

(S,")",")")=(S,$,$) -- для правила 60!

(S,"until","until")=(S,$,$) -- для правила 64!

-- Функция перехода в заключительное состояние

(S,"-|","[]")=(S,$,$)

Пример построения последовательности конфигураций для заданных цепочек.

Начальная конфигурация имеет вид:

, где -входная цепочка, []- маркер дна.

  1. "char "d";""int "a

(s, "char "d";""int "a, []<i>)-->(s, "char "d";""int "a, []<tip>)-->(s, "char "d";""int "a, []<s><type1>)-->(s, "char "d";""int "a, []<s><e><type>)-->(s, d";""int "a, []<s><e>)-->(s, d";""int "a, []<s><d><literal>)-->(s, d";""int "a,[]<s><d><c><bukva>)-->(s, ";""int "a, []<s><d><c>)-->(s, ";""int "a, []<s><d>)-->(s, ";""int "a, []<s>)-->(s, "int "a,[]<s><type1>)-->(s, "int "a, []<s><e><type>)-->(s, a, []<s><e>)-->(s, a, []<s><d><literal>)-->(s, a,[]<s><d><c><bukva>)-->(s, "-|",[]<s><d><c> )-->(s, "-|", <s><d>)-->(s, "-|", []<s>)-->(s, "-|", []).

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

  1. s"="&"("j","w")"

(s, s"="&"("j","w")", []<i>)-->(s, s"="&"("j","w")", []<op>)-->(s, s"="&"("j","w")", []<r><literal>)-->(s,

s"="&"("j","w")", []<r><c><bukva>)-->(s, "="&"("j","w")", []<r><c>)-->(s, "="&"("j","w")", []<r>)-->(s, &"("j","w")",

[]<t>)-->(s, &"("j","w")", []<k>)-->(s, &"("j","w")", []")"<literal>","<literal>"("<p>)-->(s, "("j","w")",

[]")"<literal>","<literal>"(")-->(s, j","w")", []")"<literal>","<literal>)-->(s, j","w")", []")"<literal>","<c><bukva>)-->(s,

","w")", []")"<literal>","<c>)-->(s, ","w")", []")"<literal>",")-->(s, w")", []")"<literal>)-->(s, w")", []")"<c><bukva>)-->(s,

")", []")"<c>)-->(s, ")", []")")-->(s, "-|", []).

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

  1. "repeat"r"="/"("h1","w")""until"k"<"1(s, "repeat"r"="/"("h1","w")""until"k"<"1, []<i>) -->(s, "repeat"r"="/"("h1","w")""until"k"<"1, []<cikl>)-->

(s,r"="/"("h1","w")""until"k"<"1, []<u>"until"<w>)-->(s, r"="/"("h1","w")""until"k"<"1, []<u>"until", <q><op>)-->(s, r"="/"("h1","w")""until"k"<"1, []<u>"until"<q><r><literal>)-->(s, r"="/"("h1","w")""until"k"<"1, []<u>"until"<q><r><c><bukva>)-->(s, "="/"("h1","w")""until"k"<"1, []<u>"until"<q><r><c>)-->(s, "="/"("h1","w")""until"k"<"1, []<u>"until"<q><r>)-->(s, "="/"("h1","w")""until"k"<"1, []<u>"until", <q><r>)-->(s,/"("h1","w")""until"k"<"1, []<u>"until"<q><t>)-->(s,/"("h1","w")""until"k"<"1,[]<u>"until"<q><k>)--> (s,/"(" h1","w")""until"k"<"1,[]<u> "until"<q>")"<literal>","<literal>"("<p>)-->(s, "("h1","w")""until"k"<"1 , []<u>"until"<q> ")" <literal>","<literal>"(")-->(s, h1","w")""until"k"<"1, []<u>"until"<q>")"<literal>","<literal>)-->(s, h1","w")""until"k"<"1, []<u>"until"<q>")"<literal>","<c><bukva>)-->(s, 1","w")""until"k"<"1, []<u>"until"<q>")"<literal>","<c>)-->(s, 1","w")""until"k"<"1,

[]<u>"until"<q>")"<literal>","<c><cifra>)-->(s, ","w")""until"k"<"1, []<u>"until"<q>")"<literal>","<c>)-->(s,","w")""until"k"<"1, []<u>"until"<q>")"<literal>",")-->(s, w")""until"k"<"1, []<u>"until"<q>")"<literal>)-->(s,w")""until"k"<"1, []<u>"until"<q>")"<c><bukva>)-->(s, ")""until"k"<"1, []<u>"until"<q>")"<c>)-->(s, ")""until"k"<"1, []<u>"until"<q>")"<c>)-->(s, ")""until"k"<"1, []<u>"until"<q>")")-->(s, "until"k"<"1, []<u>"until"<q>)-->(s, k"<"1,[]<u>"until")-->(s, k"<"1, []<u>)-->(s, k"<"1, []<f><literal>)-->(s, k"<"1, []<f><c><bukva>)-->(s, "<"1, []<f><c>)-->(s, "<"1, []<f>)-->(s, 1, []<h>)-->(s, 1, []<z><cifra>)-->(s, "-|", []<z>)-->(s, "-|", []).

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

  1. Приведем пример цепочки, не принадлежащей языку грамматики.

j0f"="V"("4y","n")"

(s, j0f"="V"("4y","n")", []<i>)-->(s, j0f"="V"("4y","n")", []<op>)-->(s, j0f"="V"("4y","n")", []<r><literal>)-->(s, j0f"="V"("4y","n")", []<r><c><bukva>)-->(s, 0f"="V"("4y","n")", []<r><c>)-->(s, 0f"="V"("4y","n")",[]<r><c><cifra>)-->(s, f"="V"("4y","n")", []<r><c>)-->(s, f"="V"("4y","n")", []<r><c><bukva>)-->(s, "="V"("4y","n")", []<r><c>)-->(s, "="V"("4y","n")", []<r>)-->(s, V"("4y","n")", []<t>)-->(s, V"("4y","n")", []<k>)-->(s, V"("4y","n")",[]")"<literal>","<literal>"("<p>)-->(s, "("4y","n")", []")"<literal>","<literal>"(")-->(s, 4y","n")", []")"<literal>","<literal>)

Далее функция перехода не определена, следовательно, данная цепочка не принадлежит языку.

Вывод.

В лабораторной работе было описано множество конструкций языка программирования с помощью формальной грамматики. Были построены функции перехода. Также была продемонстрирована работа магазинного распознавателя на примере входных цепочек.

Соседние файлы в папке Построение грамматики и вывод цепочек