Построение грамматики и вывод цепочек / Лаб2 / моя лаб2
.docФедеральное агентство по образованию РФ
Санкт-Петербургский Государственный Электротехнический Университет
«ЛЭТИ»
Кафедра ВТ
Отчет
по лабораторной работе №2:
«Анализ грамматики».
Выполнил:
Фадеев С.
Преподаватель:
Холод И. И..
Санкт-Петербург
2007 г.
-
Цель: Получение практических навыков построения функции выбора для правил грамматики и освоение приёмов приведения грамматик к классу LL(1).
-
Грамматика:
<I> ::= <begin><I>
<I> ::= $
<begin> ::= b<begin1>
<begin1> ::= e<begin2>
<begin2> ::= g<begin3>
<begin3> ::= i<begin4>
<begin4> ::= n<begin5>
<begin5> ::= {<Описание>}<end>
<end> ::= e<end1>
<end1> ::= n<end2>
<end2> ::= d<end0>
<Описание> ::= <var><if><end0>
<var> ::= real_<value>;<var1>|int_<value1>;<var1>|$
<var1> ::= <var>
<value1> ::= <int>
<value> ::= <int><frac>
<frac> ::= .<int>
<int> ::= 1|2|3|4|5|6|7|8|9
<if> ::= <if1><char3>
<if1> ::= _if_"("<char1>")"<char2>
<char2> ::= _then"("<S>")"
<char3> ::= _else_"("<S>")"
<char1> ::= <char><Znak>
<Znak> ::= "<" <char>|"=" <char>
<char> ::= 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
<S> ::= <char><B2>|<if1>
<B2> ::= ":=" <H>
<H> ::= <char><znak><char>
<znak> ::= +|-
<end0> ::= $
-
Построение функции выбор:
1: Выбор(<I> --> <begin><I>) = Перв(<begin><I>) = Перв(b<begin><I>) = {b}
2: Выбор(<I> --> $) = След(<I>)
3: Выбор(<begin> --> b<begin1>) = Перв(b<begin1>) = {b}
4: Выбор(<begin1> --> e<begin2>) = {e}
5: Выбор(<begin2> --> g<begin3>) = {g}
6: Выбор(<begin3> --> i<begin4>) = {i}
7: Выбор(<begin4> --> n<begin5>) = {n}
8: Выбор(<begin5> --> {<Описание>}<end>) = { { }
9: Выбор( <end> --> e<end1>) = {e}
10: Выбор(<end1> --> n<end2>) = {n}
11: Выбор( <end2> --> d<end0>) = {d}
12:Выбор(<Описание> --> <var><var1><if><end0>) = Перв(<var><var1><if><end0>) = Прев(real_<value>;) UПрев(int_<value1>)UПерв(<var1><if><end0>) = {r, i}
13: Выбор(<var1> --> <var><var1>) = Перв(<var><var1>) = Перв(real_<value>;) U Перв(int_<value1>;) U Перв(<var1>) = {r, i}
14: Выбор( <var1> --> $) = След(<var1>) = Перв(<if><end0>) = Перв(_if_"("<char1>")"<char2>) U Перв(<end0>) = { _ }
15: Выбор(<var> --> real_<value>;) = Перв(real_<value>;) = {r}
16: Выбор( <var> --> int_<value1>;) = Перв(int_<value1>;) = {i}
17: Выбор(<value1> --> <int>) = Перв(<int>) = Перв(1) U Перв(2) U ... U Перв(9) = {1,2,3,4,5,6,7,8,9}
18: Выбор(<value> --> <int><frac>) = {1,2,3,4,5,6,7,8,9}
19: Выбор(<frac> --> .<int>) = { . }
20: Выбор(<int> --> 1) = {1}
21: Выбор(<int> --> 2) = {2}
22: Выбор( <int> --> 3) = {3}
23: Выбор(<int> --> 4) = {4}
24: Выбор(<int> --> 5) = {5}
25: Выбор(<int> --> 6) = {6}
26: Выбор(<int> --> 7) = {7}
27: Выбор(<int> --> 8) = {8}
28: Выбор( <int> --> 9) = {9}
29: Выбор(<if> --> _if_"("<char1>")"<char2>) = { _ }
30: Выбор(<char2> --> _then"("<S>")"<char3>) = { _ }
31: Выбор(<char3> --> _else_"("<S>")") = { _ }
32: Выбор(<char1> --> <char><Znak>) = {a,b,c,...,z}
33: Выбор(<Znak> --> "<"<char>) = { "<" }
34: Выбор(<Znak> --> "="<char>) = { "=" }
35: Выбор(<char> --> a) = {a}
36: Выбор(<char> --> b) = {b}
37: Выбор(<char> --> c) = {c}
38: Выбор(<char> --> d) = {d}
39: Выбор(<char> --> e) = {e}
40: Выбор(<char> --> f) = {f}
41: Выбор(<char> --> g) = {g}
42: Выбор(<char> --> h) = {h}
43: Выбор(<char> --> i) = {i}
44: Выбор(<char> --> j) = {j}
45: Выбор(<char> --> k) = {k}
46: Выбор(<char> --> l) = {l}
47: Выбор(<char> --> m) = {m}
48: Выбор(<char> --> n) = {n}
49: Выбор(<char> --> o) = {o}
50: Выбор(<char> --> p) = {p}
51: Выбор(<char> --> q) = {q}
52: Выбор(<char> --> r) = {r}
53: Выбор( <char> --> s) = {s}
54: Выбор(<char> --> t) = {t}
55: Выбор(<char> --> u) = {u}
56: Выбор(<char> --> v) = {v}
57: Выбор(<char> --> w) = {w}
58: Выбор(<char> --> x) = {x}
59: Выбор(<char> --> y) = {y}
60: Выбор(<char> --> z) = {z}
61: Выбор(<S> --> <char><B2>) = {a,b,c,…,z}
62: Выбор(<B2> --> ":="<H>) = { “:=” }
63: Выбор(<H> --> <char><znak><char>) = {a,b,c,…,z}
64: Выбор(<znak> --> +) = {+}
65: Выбор(<znak> --> -) = {-}
66: Выбор(<end0> --> $) = { b, } }
Выводы: В данной работе мы научились строить функции выбора для каждого правила грамматики, а так же преобразовывать грамматику к классу - LL(1).