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

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

«ЛЭТИ»

Кафедр ВТ

Отчет по

Лабораторной работе № 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,$,$)

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

  1. 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, --|, "[]")

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

  1. 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, --|, [] )

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

  1. 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, --| , [] )

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

  1. 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>)

Для данной цепочки функция перехода не определена, а это означает, что цепочка не принадлежит данной грамматике .

Вывод

Для грамматики, которую мы построили в предыдущей лабораторной работе, привели функции ПЕРЕХОДА. Они были получены в программе ОСА(Учебная САПР Трансляторов).

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