- •Отчет по курсовой работе
- •Раздел 2.
- •2.1. Общие сведения
- •2.2. Задания
- •2.2.1. Исключение бесполезных символов
- •2.2.3. Исключение цепных правил
- •2) Новое множество правил вывода:
- •2.2.4. Исключение левой рекурсии
- •Раздел 4.
- •4.2. Задания
- •4.2.1. Построение детерминированного автомата с магазинной памятью
- •4.2.2. Построение детерминированного преобразователя с магазинной памятью.
- •4.2.3. Построение недетерминированного мп-автомата по кс-грамматике
- •4.2.4. Построение недетерминированного расширенного мп-автомата по кс-грамматике
- •Раздел 6.
- •Раздел 7
- •Раздел 1.
- •Раздел 5.
Раздел 1.
«ОПИСАНИЕ СИНТАКСИСА ЯЗЫКА»
Формулировка задания:
Описать синтаксис описания перечислимого типа и переменных перечислимого типа в языке С++.
Описание синтаксиса входного языка:
<Описание>::= enum <Имя> { <Список значений> };
<Имя> ::= <символ> | <Имя><Имя>
<Список значений>::= <Значение> | <Список значений>,<Список значений>
<Значение> ::= <символ> | <Значение><Значение>
<символ> ::= a | b |…| z | A |...| Z | 1 |...| 9 | 0 | _
Неформальное описание семантики заданной конструкции:
enum имя_перечислимого { список_значений };
КС-грамматика заданной конструкции:
G= <T,N,S,R>
S - < Описание >
T={enum, {, }, символ, ; , ,}
N={S, A, B,C}
R = {
S → enum A { B };
A → символA
A → символ
В → A , B
В → A }
Левый вывод (трех) цепочек, принадлежащих языку.
S => enum A { B };
=> enum bA { B };
=> enum boA { B };
=> enum booA { B };
=> enum bool { B };
=> enum bool { A , B };
=> enum bool { 0 , B };
=> enum bool { 0 , A };
=> enum bool { 0 , 1 };
S => enum A { B };
=> enum mA { B };
=> enum moA { B };
=> enum monA { B };
=> enum montA { B };
=> enum month { B };
=> enum month { A , B };
=> enum month { jA , B };
=> enum month { jaA , B };
=> enum month { jan , B };
=> enum month { jan , A , B };
=> enum month { jan , fA , B };
=> enum month { jan , feA , B };
=> enum month { jan , feb , B };
=> enum month { jan , feb , A };
=> enum month { jan , feb , mA };
=> enum month { jan , feb , maA };
=> enum month { jan , feb , mar };
S => enum A { B };
=> enum nA { B };
=> enum naA { B };
=> enum namA { B };
=> enum name { B };
=> enum name { A , B };
=> enum name { vA , B };
=> enum name { v_A , B };
=> enum name { v_1 , B };
=> enum name { v_1 , A };
=> enum name { v_1 , vA };
=> enum name { v_1 , v_A };
=> enum name { v_1 , v_2 };
Правый вывод (трех) цепочек, принадлежащих языку.
S => enum A { B };
=> enum A { A , B };
=> enum A { A , A };
=> enum A { A , 1 };
=> enum A { 0 , 1 };
=> enum bA { 0 , 1 };
=> enum boA { 0 , 1 };
=> enum booA { 0 , 1 };
=> enum bool { 0 , 1 };
S => enum A { B };
=> enum A { A , B };
=> enum A { A , A , B };
=> enum A { A , A , A };
=> enum A { A , A , mA };
=> enum A { A , A , maA };
=> enum A { A , A , mar };
=> enum A { A , fA , mar };
=> enum A { A , feA , mar };
=> enum A { A , feb , mar };
=> enum A { jA , feb , mar };
=> enum A { jaA , feb , mar };
=> enum A { jan , feb , mar };
=> enum mA { jan , feb , mar };
=> enum moA { jan , feb , mar };
=> enum monA { jan , feb , mar };
=> enum montA { jan , feb , mar };
=> enum month { jan , feb , mar };
S => enum A { B };
=> enum A { A , B };
=> enum A { A , A };
=> enum A { A , nA };
=> enum A { A , n_A };
=> enum A { A , n_2 };
=> enum A { nA , n_2 };
=> enum A { n_A , n_2 };
=> enum A { n_1 , n_2 };
=> enum nA { n_1 , n_2 };
=> enum naA { n_1 , n_2 };
=> enum namA { n_1 , n_2 };
=> enum name { v_1 , v_2 };
Синтаксические деревья порожденных цепочек
1.
2.
3.