Построение грамматики и вывод цепочек / Лаб2 / lab_2
.docСанкт-Петербургский государственный электротехнический университет
«ЛЭТИ»
Кафедр ВТ
Отчёт по
лабораторной работе № 2
“Построение функций ВЫБОР”
Выполнил:
Морозов С. А.
Гр.: 4331
Проверил:
Холод И.И.
Санкт – Петербург 2007 год.
Цель
По грамматике, которую нужно получить исходя из своего варианта, построить функцию ВЫБОР.
Задание
15.(Р) Последовательность описаний вложенных записей с полями типа (char, boolean) и операторов присваивания, в которых использованы вызовы процедур.
Текст построенной грамматики:
<I> ::= <struct><I> --
<I> ::= $ --
<struct> ::= s<struct1> --
<struct1> ::= t<struct2> --
<struct2> ::= r<struct3> --
<struct3> ::= u<struct4> --
<struct4> ::= c<struct5> --
<struct5> ::= t<struct6> --
<struct6> ::= _<name_struct>
<name_struct> ::= <name><body> --
<body> ::= {<body1> --
<body1> ::= <set_fields><end_struct>--
<end_struct> ::= }<end_struct1> --
<end_struct1> ::= ;<var> --
<set_fields> ::= <bool> <choice_type> --
<set_fields> ::= <char> <choice_type> --
<set_fields> ::= <my_type><choice_type> --
<set_fields> ::= $ --
<choice_type> ::= <bool> <choice_type> --
<choice_type> ::= <char> <choice_type> --
<choice_type> ::= <my_type><choice_type> --
<choice_type> ::= $ --
<my_type> ::= <name><end_type> --
<bool> ::= b<bool1> --
<bool1> ::= o<bool2> --
<bool2> ::= o<bool3> --
<bool3> ::= l<end_type> --
<char> ::= c<char1> --
<char1> ::= h<char2> --
<char2> ::= a<char3> --
<char3> ::= r<end_type> --
<end_type> ::= _<var_name> --
<var> ::= <name><list> --
<list> ::= =<proc_name> --
<proc_name> ::= <name><end_proc> --
<end_proc> ::= [<list_var> --
<list_var> ::= <var_name><next_var> --
<next_var> ::= <list_var> --
<next_var> ::= ]<end_var> --
<end_var> ::= ; --
<var_name> ::= <name>; --
<name> ::= <letter><name1> --
<name1> ::= <letter><name1> --
<name1> ::= <num><name1> --
<name1> ::= $ --
<num> ::= 0|1|2|3|4|5|6|7|8|9 --
<letter> ::= a|d|e|f|g|h|i|j|k|l|m|n --
<letter> ::= o|p|q|r|s|t|u|v|w|x|y|z –
Построенные функции ВЫБОР
Правило: Функция ВЫБОР:
1: ВЫБОР ( <I> --> <struct><I> ) = ПЕРВ( <struct><I> ) = ПЕРВ( s<struct><I> ) = s
2: ВЫБОР ( <I> --> $) = СЛЕД(<I>)
3: ВЫБОР ( <struct> --> s<struct1>) = ПЕРВ ( s<struct1> ) = s
4: ВЫБОР ( <struct1> --> t<struct2>) = t
5: ВЫБОР ( <struct2> --> r<struct3>) = r
6: ВЫБОР ( <struct3> --> u<struct4>) = u
7: ВЫБОР ( <struct4> --> c<struct5>) = c
8: ВЫБОР ( <struct5> --> t<struct6>) = t
9: ВЫБОР ( <struct6> --> _<name_struct>) = _
10: ВЫБОР ( <name_struct> --> <name><body>) = ПЕРВ (<name><body> ) = ПЕРВ ( <letter><name1><body> ) = a , …, z
11: ВЫБОР ( <body> --> {<body1>) = {
12: ВЫБОР ( <body1> --> <set_fields><end_struct>) = ПЕРВ (<set_fields><end_struct> ) =
ПЕРВ (bool><choice_type> ) U ПЕРВ ( <char><choice_type> ) U ПЕРВ ( <my_type><choice_type> ) U ПЕРВ ( { <end_struct1>) = a, …, z, {,
13: ВЫБОР ( <end_struct> --> }<end_struct1>) = ПЕРВ ( }<end_struct1> ) = }
14: ВЫБОР ( <end_struct1> --> ;<var>) = ;
15: ВЫБОР ( <set_fields> --> <bool><choice_type>) = ПЕРВ( b<bool1>< choice_type > ) = b
16: ВЫБОР ( <set_fields> --> <char><choice_type>) = c
17: ВЫБОР ( <set_fields> --> <my_type><choice_type>) = a, …, z
18: ВЫБОР ( <set_fields> --> $) = СЛЕД( <set_fields> ) = ПЕРВ(<end_struct>) = ПЕРВ( }<end_struct1>) = }
19: ВЫБОР ( <choice_type> --> <bool><choice_type>) = ПЕРВ( b<bool1><choice_type> ) = b
20: ВЫБОР ( <choice_type> --> <char><choice_type>) = c
21: ВЫБОР ( <choice_type> --> <my_type><choice_type>) = a, …, z
22: ВЫБОР ( <choice_type> --> $) = СЛЕД( <choice_type> ) = ПЕРВ( <bool><choice_type><end_struct> ) U
ПЕРВ( <char><choice_type><end_struct> ) U ПЕРВ( <my_type><choice_type><end_struct> ) =
ПЕРВ( <bool><choice_type>}<end_struct1> ) U ПЕРВ( <char><choice_type>}<end_struct1> ) U
ПЕРВ(<my_type><choice_type>}<end_struct1> ) = }
23: ВЫБОР ( <my_type> --> <name><end_type>) = а, …, z
24: ВЫБОР ( <bool> --> b<bool1>) = b
25: ВЫБОР ( <bool1> --> o<bool2>) = o
26: ВЫБОР ( <bool2> --> o<bool3>) = o
27: ВЫБОР ( <bool3> --> l<end_type>) = l
28: ВЫБОР ( <char> --> c<char1>) = c
29: ВЫБОР ( <char1> --> h<char2>) = h
30: ВЫБОР ( <char2> --> a<char3>) = a
31: ВЫБОР ( <char3> --> r<end_type>) = r
32: ВЫБОР ( <end_type> --> _<var_name>) = _
33: ВЫБОР ( <var> --> <name><list>) = ПЕРВ( <name><list> ) = ПЕРВ(<letter><name1><list>) = a, …, z
34: ВЫБОР ( <list> --> =<proc_name>) = =
35: ВЫБОР ( <proc_name> --> <name><end_proc> ) = a, …, z
36: ВЫБОР ( <end_proc> --> [<list_var> ) = [
37: ВЫБОР ( <list_var> --> <var_name><next_var> ) = a, …, z
38: ВЫБОР ( <next_var> --> <list_var> ) = a, …, z
39: ВЫБОР ( <next_var> --> ]<end_var> ) = ]
40: ВЫБОР ( <end_var> --> ; ) = ;
41: ВЫБОР ( <var_name> --> <name>; ) = a, …, z
42: ВЫБОР ( <name> --> <letter><name1> ) = a, ..., z
43: ВЫБОР ( <name1> --> <letter><name1> ) = a, …, z
44: ВЫБОР ( <name1> --> <num><name1> ) = 0, …, 9
45: ВЫБОР ( <name1> --> $ ) = СЛЕД( <name1> ) = ПЕРВ( ; ) U ПЕРВ( <end_proc> ) U ПЕРВ( <body> )
U ПЕРВ( <end_type> ) U ПЕРВ( <list> ) = ;, [, {, _, =
46: ВЫБОР ( <num> --> 0 ) = 0
47: ВЫБОР ( <num> --> 1 ) = 1
48: ВЫБОР ( <num> --> 2 ) = 2
49: ВЫБОР ( <num> --> 3 ) = 3
50: ВЫБОР ( <num> --> 4 ) = 4
51: ВЫБОР ( <num> --> 5 ) = 5
52: ВЫБОР ( <num> --> 6 ) = 6
53: ВЫБОР ( <num> --> 7 ) = 7
54: ВЫБОР ( <num> --> 8 ) = 8
55: ВЫБОР ( <num> --> 9 ) = 9
56: ВЫБОР ( <letter> --> a ) = a
57: ВЫБОР ( <letter> --> d ) = d
58: ВЫБОР ( <letter> --> e ) = e
59: ВЫБОР ( <letter> --> f ) = f
60: ВЫБОР ( <letter> --> g ) = g
61: ВЫБОР ( <letter> --> h ) = h
62: ВЫБОР ( <letter> --> i ) = i
63: ВЫБОР ( <letter> --> j ) = j
64: ВЫБОР ( <letter> --> k ) = k
65: ВЫБОР ( <letter> --> l ) = l
66: ВЫБОР ( <letter> --> m ) = m
67: ВЫБОР ( <letter> --> n ) = n
68: ВЫБОР ( <letter> --> o ) = o
69: ВЫБОР ( <letter> --> p ) = p
70: ВЫБОР ( <letter> --> q ) = q
71: ВЫБОР ( <letter> --> r ) = r
72: ВЫБОР ( <letter> --> s ) = s
73: ВЫБОР ( <letter> --> t ) = t
74: ВЫБОР ( <letter> --> u ) = u
75: ВЫБОР ( <letter> --> v ) = v
76: ВЫБОР ( <letter> --> w ) = w
77: ВЫБОР ( <letter> --> x ) = x
78: ВЫБОР ( <letter> --> y ) = y
79: ВЫБОР( <letter> --> z ) = z
Вывод
В данной работе мы построили LL(1) – грамматику, в соответствии с вариантом задания.
Получили функцию ВЫБОР. Продолжили ознакомление с программой ОСА(Учебная САПР Трансляторов).