Построение грамматики и вывод цепочек / моя ЯГА3
.docСанкт-Петербургский Государственный Электротехнический Университет
(ЛЭТИ)
кафедра ВТ
Отчет по лабораторной работе №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,$,$)
Пример построения последовательности конфигураций для заданных цепочек.
Начальная конфигурация имеет вид:
, где -входная цепочка, []- маркер дна.
-
"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, "-|", []).
Данная цепочка принадлежит языку.
-
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, "-|", []).
Данная цепочка принадлежит языку.
-
"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, "-|", []).
Данная цепочка принадлежит языку.
-
Приведем пример цепочки, не принадлежащей языку грамматики.
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>)
Далее функция перехода не определена, следовательно, данная цепочка не принадлежит языку.
Вывод.
В лабораторной работе было описано множество конструкций языка программирования с помощью формальной грамматики. Были построены функции перехода. Также была продемонстрирована работа магазинного распознавателя на примере входных цепочек.