Построение грамматики и вывод цепочек / Копия lab_3
.docСанкт-Петербургский государственный электротехнический университет
«ЛЭТИ»
Кафедр ВТ
Отчет по
Лабораторной работе № 2
“ Построение магазинного распознавателя ”
Выполнил:
Морозов С. А.
Гр.: 4331
Проверил:
Холод И.И.
Санкт – Петербург 2007 год.
Целью работы является получение практических навыков по составлению функций переходов магазинного преобразователя и анализ его работы в процессе трансляции входной цепочки.
Задание
15.(Р) Последовательность описаний вложенных записей с полями типа (char, boolean) и операторов присваивания, в которых использованы вызовы процедур.
Функции ПЕРЕХОДА
-- Оптимизированные функции для правил, правая часть которых начинается с терминала
-- сдвиг, вытолкнуть, заменить
(S,S,<struct>)=(S,<struct1>,$) -- для правила 4
(S,T,<struct1>)=(S,<struct2>,$) -- для правила 5
(S,R,<struct2>)=(S,<struct3>,$) -- для правила 6
(S,U,<struct3>)=(S,<struct4>,$) -- для правила 7
(S,C,<struct4>)=(S,<struct5>,$) -- для правила 8
(S,T,<struct5>)=(S,;}<set_type>{<name>_,$) -- для правила 9
(S,=,<init_my1>)=(S,;<value>,$) -- для правила 20
(S,",",<next_v>)=(S,<var_name>,$) -- для правила 23
(S,;,<next_v>)=(S,$,$) -- для правила 24
(S,B,<bool>)=(S,<bool1>,$) -- для правила 25
(S,O,<bool1>)=(S,<bool2>,$) -- для правила 26
(S,O,<bool2>)=(S,<bool3>,$) -- для правила 27
(S,L,<bool3>)=(S,<end_bool>,$) -- для правила 28
(S,_,<end_bool>)=(S,<var_name_b>,$) -- для правила 29
(S,",",<next_v_b>)=(S,<var_name_b>,$) -- для правила 31
(S,;,<next_v_b>)=(S,$,$) -- для правила 32
(S,C,<char>)=(S,<char1>,$) -- для правила 33
(S,H,<char1>)=(S,<char2>,$) -- для правила 34
(S,A,<char2>)=(S,<char3>,$) -- для правила 35
(S,R,<char3>)=(S,<var_name_c>_,$) -- для правила 36
(S,",",<next_v_c>)=(S,<var_name_c>,$) -- для правила 38
(S,;,<next_v_c>)=(S,$,$) -- для правила 39
(S,=,<init_b>)=(S,<value_b>,$) -- для правила 40
(S,=,<init_c>)=(S,<value_c>,$) -- для правила 42
(S,=,<init_my>)=(S,<value>,$) -- для правила 44
(S,"#",<value_c>)=(S,"#"<name1>,$) -- для правила 49
(S,"#",<value>)=(S,"#"<name1>,$) -- для правила 53
(S,T,<true>)=(S,EUR,$) -- для правила 55
(S,F,<false>)=(S,ESLA,$) -- для правила 56
(S,;,<next>)=(S,<next><name>,$) -- для правила 59
(S,],<next>)=(S,$,$) -- для правила 60
(S,0,<num>)=(S,$,$) -- для правила 65
(S,1,<num>)=(S,$,$) -- для правила 66
(S,2,<num>)=(S,$,$) -- для правила 67
(S,a,<letter>)=(S,$,$) -- для правила 68
(S,b,<letter>)=(S,$,$) -- для правила 69
(S,c,<letter>)=(S,$,$) -- для правила 70
-- Функции общего вида
-- нет сдвига, заменить
*(S,S,<I>)=(S,<I><struct>,$) -- для правила 1
*(S,a,<I>)=(S,<I><init_var1>,$) -- для правила 2
*(S,b,<I>)=(S,<I><init_var1>,$) -- для правила 2
*(S,c,<I>)=(S,<I><init_var1>,$) -- для правила 2
*(S,B,<set_type>)=(S,<choice_type><bool>,$) -- для правила 10
*(S,C,<set_type>)=(S,<choice_type><char>,$) -- для правила 11
*(S,a,<set_type>)=(S,<choice_type><my_type>,$) -- для правила 12
*(S,b,<set_type>)=(S,<choice_type><my_type>,$) -- для правила 12
*(S,c,<set_type>)=(S,<choice_type><my_type>,$) -- для правила 12
*(S,B,<choice_type>)=(S,<choice_type><bool>,$) -- для правила 14
*(S,C,<choice_type>)=(S,<choice_type><char>,$) -- для правила 15
*(S,a,<choice_type>)=(S,<choice_type><my_type>,$) -- для правила 16
*(S,b,<choice_type>)=(S,<choice_type><my_type>,$) -- для правила 16
*(S,c,<choice_type>)=(S,<choice_type><my_type>,$) -- для правила 16
*(S,a,<init_var1>)=(S,<next_v1><init_my1><name>,$) -- для правила 18
*(S,b,<init_var1>)=(S,<next_v1><init_my1><name>,$) -- для правила 18
*(S,c,<init_var1>)=(S,<next_v1><init_my1><name>,$) -- для правила 18
*(S,a,<next_v1>)=(S,<init_my1><name>,$) -- для правила 19
*(S,b,<next_v1>)=(S,<init_my1><name>,$) -- для правила 19
*(S,c,<next_v1>)=(S,<init_my1><name>,$) -- для правила 19
*(S,a,<my_type>)=(S,<var_name>_<name>,$) -- для правила 21
*(S,b,<my_type>)=(S,<var_name>_<name>,$) -- для правила 21
*(S,c,<my_type>)=(S,<var_name>_<name>,$) -- для правила 21
*(S,a,<var_name>)=(S,<next_v><init_my><name>,$) -- для правила 22
*(S,b,<var_name>)=(S,<next_v><init_my><name>,$) -- для правила 22
*(S,c,<var_name>)=(S,<next_v><init_my><name>,$) -- для правила 22
*(S,a,<var_name_b>)=(S,<next_v_b><init_b><name>,$) -- для правила 30
*(S,b,<var_name_b>)=(S,<next_v_b><init_b><name>,$) -- для правила 30
*(S,c,<var_name_b>)=(S,<next_v_b><init_b><name>,$) -- для правила 30
*(S,a,<var_name_c>)=(S,<next_v_c><init_c><name>,$) -- для правила 37
*(S,b,<var_name_c>)=(S,<next_v_c><init_c><name>,$) -- для правила 37
*(S,c,<var_name_c>)=(S,<next_v_c><init_c><name>,$) -- для правила 37
*(S,T,<value_b>)=(S,<true>,$) -- для правила 46
*(S,F,<value_b>)=(S,<false>,$) -- для правила 47
*(S,a,<value_b>)=(S,<proc>,$) -- для правила 48
*(S,b,<value_b>)=(S,<proc>,$) -- для правила 48
*(S,c,<value_b>)=(S,<proc>,$) -- для правила 48
*(S,a,<value_c>)=(S,<proc>,$) -- для правила 50
*(S,b,<value_c>)=(S,<proc>,$) -- для правила 50
*(S,c,<value_c>)=(S,<proc>,$) -- для правила 50
*(S,T,<value>)=(S,<true>,$) -- для правила 51
*(S,F,<value>)=(S,<false>,$) -- для правила 52
*(S,a,<value>)=(S,<proc>,$) -- для правила 54
*(S,b,<value>)=(S,<proc>,$) -- для правила 54
*(S,c,<value>)=(S,<proc>,$) -- для правила 54
*(S,a,<proc>)=(S,<proc_var>[<name>,$) -- для правила 57
*(S,b,<proc>)=(S,<proc_var>[<name>,$) -- для правила 57
*(S,c,<proc>)=(S,<proc_var>[<name>,$) -- для правила 57
*(S,a,<proc_var>)=(S,<next><name>,$) -- для правила 58
*(S,b,<proc_var>)=(S,<next><name>,$) -- для правила 58
*(S,c,<proc_var>)=(S,<next><name>,$) -- для правила 58
*(S,a,<name>)=(S,<name1><letter>,$) -- для правила 61
*(S,b,<name>)=(S,<name1><letter>,$) -- для правила 61
*(S,c,<name>)=(S,<name1><letter>,$) -- для правила 61
*(S,a,<name1>)=(S,<name1><letter>,$) -- для правила 62
*(S,b,<name1>)=(S,<name1><letter>,$) -- для правила 62
*(S,c,<name1>)=(S,<name1><letter>,$) -- для правила 62
*(S,0,<name1>)=(S,<name1><num>,$) -- для правила 63
*(S,1,<name1>)=(S,<name1><num>,$) -- для правила 63
*(S,2,<name1>)=(S,<name1><num>,$) -- для правила 63
-- Функции для аннулирующих правил
-- нет сдвига, вытолкнуть
*(S,"-|",<I>)=(S,$,$) -- для правила 3
*(S,},<set_type>)=(S,$,$) -- для правила 13
*(S,},<choice_type>)=(S,$,$) -- для правила 17
*(S,;,<init_b>)=(S,$,$) -- для правила 41
*(S,",",<init_b>)=(S,$,$) -- для правила 41
*(S,;,<init_c>)=(S,$,$) -- для правила 43
*(S,",",<init_c>)=(S,$,$) -- для правила 43
*(S,;,<init_my>)=(S,$,$) -- для правила 45
*(S,",",<init_my>)=(S,$,$) -- для правила 45
*(S,_,<name1>)=(S,$,$) -- для правила 64
*(S,{,<name1>)=(S,$,$) -- для правила 64
*(S,;,<name1>)=(S,$,$) -- для правила 64
*(S,=,<name1>)=(S,$,$) -- для правила 64
*(S,",",<name1>)=(S,$,$) -- для правила 64
*(S,"#",<name1>)=(S,$,$) -- для правила 64
*(S,[,<name1>)=(S,$,$) -- для правила 64
*(S,],<name1>)=(S,$,$) -- для правила 64
-- Функции выталкивания терминалов
-- сдвиг, вытолкнуть
(S,S,S)=(S,$,$)
(S,R,R)=(S,$,$)
(S,U,U)=(S,$,$)
(S,_,_)=(S,$,$)
(S,{,{)=(S,$,$)
(S,},})=(S,$,$)
(S,;,;)=(S,$,$)
(S,L,L)=(S,$,$)
(S,A,A)=(S,$,$)
(S,"#","#")=(S,$,$)
(S,E,E)=(S,$,$)
(S,[,[)=(S,$,$)
-- Функция перехода в заключительное состояние
(S,"-|","[]")=(S,$,$)
Примеры последовательности конфигураций для заданных цепочек.
-
STRUCT_b1{ba0ac_a;};
( S, STRUCT_b1{ba0ac_a;};, []<I> )( S, STRUCT_b1{ba0ac_a;};, "[]"<I><struct>)
( S, TRUCT_b1{ba0ac_a;};, "[]"<I><struct1>)
( S, RUCT_b1{ba0ac_a;}; , "[]"<I><struct2>)
( S, UCT_b1{ba0ac_a;}; , "[]"<I><struct3>) ( S, CT_b1{ba0ac_a;}; ,"[]"<I><struct4>)
( S, T_b1{ba0ac_a;}; , "[]"<I><struct5>)
( S, _b1{ba0ac_a;};,"[]"<I>;}<set_type>{<name>_ )
( S, b1{ba0ac_a;}; , "[]"<I>;}<set_type>{<name>)
( S, b1{ba0ac_a;}; , "[]"<I>;}<set_type>{<name1><letter>)
( S, 1{ba0ac_a;}; , "[]"<I>;}<set_type>{<name1>)
( S, 1{ba0ac_a;}; , "[]"<I>;}<set_type>{<name1><num>)
( S, {ba0ac_a;}; , "[]"<I>;}<set_type>{<name1> )
( S, {ba0ac_a;}; ,"[]"<I>;}<set_type>{ )
( S, ba0ac_a;}; , "[]"<I>;}<set_type>)
( S, ba0ac_a;}; , "[]"<I>;} <choice_type> <my_type>)
( S, ba0ac_a;}; , "[]"<I>;} <choice_type><var_name>_<name>)
( S, ba0ac_a;}; , "[]"<I>;} <choice_type><var_name>_<name1><letter>)
( S, a0ac_a;}; , "[]"<I>;} <choice_type><var_name>_<name1>)
( S, a0ac_a;}; , "[]"<I>;} <choice_type><var_name>_<name1><letter>)
( S, 0ac_a;}; , "[]"<I>;} <choice_type><var_name>_<name1>)
( S, 0ac_a;}; , "[]"<I>;} <choice_type><var_name>_<name1><num>)
( S, ac_a;}; , "[]"<I>;} <choice_type><var_name>_<name1>)
( S, ac_a;}; , "[]"<I>;} <choice_type><var_name>_<name1><letter>)
( S, c_a;}; , "[]"<I>;} <choice_type><var_name>_<name1>)
( S, c_a;}; , "[]"<I>;} <choice_type><var_name>_<name1><letter>)
( S, _a;}; , "[]"<I>;} <choice_type><var_name>_<name1>)
( S, _a;}; , "[]"<I>;} <choice_type><var_name>_)
( S, a;}; , "[]"<I>;} <choice_type><var_name>)
( S, a;}; , "[]"<I>;} <choice_type><next_v><init_my><name>)
( S, a;}; , "[]"<I>;} <choice_type><next_v><init_my><name1><letter>)
( S, ;}; , "[]"<I>;} <choice_type><next_v><init_my><name1>)
( S, ;}; , "[]"<I>;} <choice_type><next_v><init_my>)
( S, ;}; , "[]"<I>;} <choice_type><next_v>)
( S, }; , "[]"<I>;} <choice_type>)
( S, }; , "[]"<I>;}) ( S, ; , "[]"<I>;) ( S, --|, "[]"<I>) ( S, --|, "[]")
Входная цепочка полностью прочитана и в магазине остался только маркер дна. Это означает, что данная цепочка принадлежит языку.
-
b=FALSE;b0=TRUE;
( S, b=FALSE;b0=TRUE; , "[]"<I>)
( S, b=FALSE;b0=TRUE; , "[]"<I><init_var1>)
( S, b=FALSE;b0=TRUE; , "[]"<I><next_v1><init_my1><name>)
( S, b=FALSE;b0=TRUE; , "[]"<I><next_v1><init_my1><name1><letter>)
( S, =FALSE;b0=TRUE; , "[]"<I><next_v1><init_my1><name1>)
( S, =FALSE;b0=TRUE; , "[]"<I><next_v1><init_my1>)
( S, FALSE;b0=TRUE; , "[]"<I><next_v1>;<value>)
( S, FALSE;b0=TRUE; , "[]"<I><next_v1>;<false>)
( S, ALSE;b0=TRUE; , "[]"<I><next_v1>;ESLA)
( S, LSE;b0=TRUE; , "[]"<I><next_v1>;ESL)
( S, SE;b0=TRUE; , "[]"<I><next_v1>;ES)
( S, E;b0=TRUE; , "[]"<I><next_v1>;E)
( S, ;b0=TRUE; , "[]"<I><next_v1>;)
( S, b0=TRUE; , "[]"<I><next_v1>)
( S, b0=TRUE; , "[]"<I><init_my1><name>)
( S, b0=TRUE; , "[]"<I><init_my1><name1><letter>)
( S, 0=TRUE; , "[]"<I><init_my1><name1>)
( S, 0=TRUE; , "[]"<I><init_my1><name1><num>)
( S, =TRUE; , "[]"<I><init_my1><name1>)
( S, =TRUE; , "[]"<I><init_my1>)
( S, TRUE; , "[]"<I>;<value>)
( S, TRUE; , "[]"<I>;<true>)
( S, RUE; , "[]"<I>;EUR)
( S, UE; , "[]"<I>;EU)
( S, E; , "[]"<I>;E)
( S, ; , "[]"<I>;)
( S, --| , "[]"<I>)
( S, --|, [] )
Входная цепочка полностью прочитана и в магазине остался только маркер дна. Это означает, что данная цепочка принадлежит языку.
-
a=b[c];a1="#"b"#";
( S, a=b[c];a1="#"b"#"; , []<I>)
( S, a=b[c];a1="#"b"#"; , []<I><init_var1>)
( S, a=b[c];a1="#"b"#"; , []<I><next_v1><init_my1><name>)
( S, a=b[c];a1="#"b"#"; , []<I><next_v1><init_my1><name1><letter>)
( S, =b[c];a1="#"b"#"; , []<I><next_v1><init_my1><name1>)
( S, =b[c];a1="#"b"#"; , []<I><next_v1><init_my1>)
( S, b[c];a1="#"b"#"; , []<I><next_v1>;<value>)
( S, b[c];a1="#"b"#"; , []<I><next_v1>;<proc>)
( S, b[c];a1="#"b"#"; , []<I><next_v1>;<proc_var>[<name>)
( S, b[c];a1="#"b"#"; , []<I><next_v1>;<proc_var>[<name1>< letter>)
( S, [c];a1="#"b"#"; , []<I><next_v1>;<proc_var>[<name1>)
( S, [c];a1="#"b"#"; , []<I><next_v1>;<proc_var>[)
( S, c];a1="#"b"#"; , []<I><next_v1>;<proc_var>)
( S, c];a1="#"b"#"; , []<I><next_v1>;<next><name>)
( S, c];a1="#"b"#"; , []<I><next_v1>;<next><name1><letter>)
( S, ];a1="#"b"#"; , []<I><next_v1>;<next><name1>)
( S, ];a1="#"b"#"; , []<I><next_v1>;<next>)
( S, ;a1="#"b"#"; , []<I><next_v1>;)
( S, a1="#"b"#"; , []<I><next_v1><name>)
( S, a1="#"b"#"; , []<I><next_v1><name1><letter>)
( S, 1="#"b"#"; , []<I><next_v1><name1>)
( S, 1="#"b"#"; , []<I><next_v1><name1><num>)
( S, ="#"b"#"; , []<I><next_v1><name1>)
( S, ="#"b"#"; , []<I><next_v1>)
( S, "#"b"#"; , []<I>;<value>)
( S, b"#"; , []<I>;”#”<name1>)
( S, b"#"; , []<I>;”#”<name1><letter>)
( S, "#"; , []<I>;”#”<name1>)
( S, "#"; , []<I>;”#”)
( S, ; , []<I>;)
( S, --| , []<I>)
( S, --| , [] )
Входная цепочка полностью прочитана и в магазине остался только маркер дна. Это означает, что данная цепочка принадлежит языку.
-
c=1"#";a=FALSE;a="#""#";b="#""#";
(S, c=1"#";a=FALSE;a="#""#";b="#""#"; , []<I>)
(S, c=1"#";a=FALSE;a="#""#";b="#""#"; , []<I><init_var1>)
(S, c=1"#";a=FALSE;a="#""#";b="#""#"; , []<I>< next_v1>< init_my1><name>)
(S, c=1"#";a=FALSE;a="#""#";b="#""#"; , []<I>< next_v1>< init_my1><name1><letter>)
(S, =1"#";a=FALSE;a="#""#";b="#""#"; , []<I>< next_v1>< init_my1><name1>)
(S, =1"#";a=FALSE;a="#""#";b="#""#"; , []<I>< next_v1>< init_my1>)
(S, 1"#";a=FALSE;a="#""#";b="#""#"; , []<I>< next_v1>;<value>)
Для данной цепочки функция перехода не определена, а это означает, что цепочка не принадлежит данной грамматике .
Вывод
Для грамматики, которую мы построили в предыдущей лабораторной работе, привели функции ПЕРЕХОДА. Они были получены в программе ОСА(Учебная САПР Трансляторов).