Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовик без 3го задания.doc
Скачиваний:
3
Добавлен:
21.04.2019
Размер:
544.77 Кб
Скачать

Раздел 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 = {

  1. S → enum A { B };

  2. A → символA

  3. A → символ

  4. В → A , B

  5. В → A }

Левый вывод (трех) цепочек, принадлежащих языку.

  1. 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 };

  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 };

  1. 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 };

Правый вывод (трех) цепочек, принадлежащих языку.

  1. 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 };

  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 };

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