- •1. Рекурсивные алгоритмы
- •1.1. Основные определения
- •1.2. Накопления суммы или произведения.
- •Упражнение
- •Варианты задач
- •1.3. Быстрая сортировка
- •1.5.1.Основные определения
- •1.5.2. Пример задания некоторого языка l1 в бнф
- •1.5.3. Пример разработки программы "Синтаксический анализатор "
- •Ошибок нет Нет символа "[" Ошибка в выраженииВыходная форма:
- •2 Этап. Разбор второго правила. Раскрытие процедуры SimpExpr.
- •1.5.4. Лабораторная работа " Синтаксический анализатор "
- •Итак, метод для рассматриваемой задачи будет описан в виде синтаксических
- •На этом этапе можно продолжить проектирование в одном из двух направле-
- •2. Рекурсивный тип данных
- •Основные определения
- •2.2. Динамическое распределение памяти
- •Упражнение
- •Лабораторная работа “Генеалогическое дерево”
- •Варианты заданий
- •Литература
- •Содержание
Упражнение
Привести схему распределения памяти для заданного выражения.
Варианты выражений.
15.
x/(a-p)+(c*x)
16.
(c/d)-((a+b)*r)
17.
a*(b*(a-b)/z)
18.
((c-d)/q)*(r+a)
19.
(x+u/q)*(a-b*c)
20.
((a+r)*k)-f/w
21.
(a-b)/(c*d+p)
22.
(f*r)-(c+a/b)
23.
(x*(a+b))-(y/(c-d))
24.
e/(a*(b+c))*p
25. (x+y)/(p+q)-m
(f/e)+(a+b)*k
m/n/(h-d)*(k-v)
(z+d)*s+c*(r-p)
(x-y)/z*(w+c)
a*(b-c)*(d+c)
(p-x/y)*(k+z*a
(r-c)/(a-b*p)
(k/e-c)*g/a
a/(c+d)+(c-k)
m*(a-(b+k))-l
(q-a)/(c+d)+m
(k/p)-((f-a)*l)
((l-p)/r)*(k+f)
x*((y+z)*(w-z))
(a+b/c)*(d-e*f)
r*c-p*b/(a-j)
x-a*(p-r)+k
Лабораторная работа “Генеалогическое дерево”
Задание. Разработать программу поиска в генеалогическом дереве с целью ответа на поставленный вопрос.
Варианты заданий
Какая фамилия матери Светланы?
Кто дольше всех прожил?
Кто были родителями Евдокии, жившей в 17 веке,
Сколько раз повторяется имя Серафим?
Каким временем заканчивается генеалогическое дерево?
Кто был мужем Анны?
Имена предков, родившихся в середине 18 века?
Являюсь ли я потомком Долгоруких?
Участвовал отец Бориса в войне 1812 года?
Какая фамилия матери Екатерины?
Чья жизнь была самой короткой?
В каком году родился потомок Владимира и Ольги?
Как звали дедушку Петра?
Имена самых древних предков?
Кто был женой Дмитрия, жившего во времена Пушкина?
Был ли в роду Филимон, родившийся в Киеве?
Кто был внуком Юсуповых?
Сколько поколений в генеалогическом дереве?
В каком коду родилась София, внучка Петра?
Чьей бабушкой была Екатерина Мишина?
Сколько было супружеских пар Иван да Марья?
Был в роду кто-либо, родившийся в Англии?
Сколько в роду долгожителей?
Кто был мужем Елизаветы, родившейся в начале 16 века?
У кого имя обоих дедушек было Сергей?
Кто был в роду писателем?
Приложение.
Синтаксические правила языка Паскаль в виде БНФ
<буква> ::= ABCDEGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
<цифра> ::= 0123456789
<символ> ::= <любой символ таблицы кодов ASCII>
<последовательность цифр> ::= <цифра> <последовательность цифр>
<цифра>
<последовательность символов> ::= <символ><последовательность
символов> <символ>
<имя> ::= <буква><имя><буква><имя><цифра>
<список имен> ::= <имя><список имен > ,<имя>
<переменная> ::= <простая переменная> <переменная с индексами>
<составная переменная> <динамическая переменная>
<простая переменная> ::= <имя переменной>
<имя переменной> ::= <имя>
<переменная с индексами> ::= <имя> [<список индексных выражений>]
<список индексных выражений> ::= <индексное выражение>
<список индексных выражений>,<индексное выражение>
<индексное выражение> ::= <выражение>
<составная переменная> ::= <имя> <составная переменная> . <имя>
<динамическая переменная> ::= <имя>^
<список переменных > ::= <переменная> <список переменных > ,
<переменная>
<целое> ::= <целое без знака> <целое со знаком>
<знак> ::= + -
<целое без знака> ::= <последовательность цифр>
<целое со знаком> ::= <знак><целое без знака>
<строка символов> ::= '<последовательность элементов строки >'
<последовательность элементов строки > ::= <элемент строки >
<последовательность элементов строки > <элемент строки >
<элемент строки > ::= <представление апострофа> < символ >
<представление апострофа> ::= ''
<вещественное без знака> ::= <вещественное с фиксированной точкой>
<вещественное с порядком>
<вещественное с фиксированной точкой> ::=
<последовательность цифр>.<последовательность цифр>
<вещественное с порядком> ::= <мантисса>Е<порядок>
<порядок> ::= <целое со знаком>
<мантисса> ::= <целое без знака><вещественное без знака>
<число без знака> ::= <целое без знака><вещественное без знака>
<число со знаком> ::= <знак><число без знака>
<выражение> ::= <операнд><выражение><операция><операнд>
<операнд> ::= <константа><переменная><указатель функции>
(<выражение>) <конструктор множества> <терм>
<множитель> ::= <операнд>
<терм> ::= <множитель> <терм><операция типа умножения><множитель>
<указатель функции> ::= <имя функции>(<список фактических параметров>)
<операция> ::= <операция отношения> <oперация типа сложения>
<операция типа умножения>
<операция отношения> ::= = <> < > <= >= IN
<oперация типа сложения> ::= + - OR
<операция типа умножения> ::= * / DIV MOD AND
<константа> ::= <константа без знака> <константа со знаком>
<константа без знака> ::= <имя константы><число без знака>
<строка символов>truefalsenil
<константа со знаком> ::= <знак><имя константы><знак><число без знака>
<строка символов>truefalse
<логическое-выражение> ::= <выражение>
<оператор> ::= <элементарный оператор> <сложный оператор>
<элементарный оператор> ::= <пустой оператор><оператор присваивания>
<оператор процедуры>
<пустой оператор> ::=
<оператор присваивания> ::= <переменная> := <выражение>
<оператор процедуры> ::= <имя процедуры>(<список фактических
параметров>)
<сложный оператор> ::= <составной оператор> <условный оператор>
<оператор цикла> <оператор над записями>
<составной оператор> ::= BEGIN <последовательность операторов> END
<последовательность операторов> ::= <оператор>
<последовательность операторов>;<оператор>
<условный оператор> ::= <оператор ЕСЛИ> <оператор выбора>
<оператор ЕСЛИ> ::= IF <логическое выражение> THEN <оператор>
ELSE <оператор>
<оператор выбора> ::= CASE <индекс выбора> OF < список выбора> END
<список выбора> ::= <элемент списка выбора> <список выбора>;
<элемент списка выбора>
<элемент списка выбора> ::= <список констант выбора> : <оператор>
<список констант выбора> ::= <константа выбора>
<список констант выбора> ,<константа выбора>
<константа выбора> ::= <константа>
<индекс выбора> ::= <выражение>
<оператор над записями> ::= WITH <список переменных> DO <оператор>
<оператор цикла>::=<оператор ПОКА><оператор ДО><оператор ДЛЯ>
<оператор ПОКА> ::= WHILE <логическое выражение> DO <оператор>
<оператор ДО> ::= REPEAT <последовательность операторов> UNTIL
<логическое выражение>
<оператор ДЛЯ> ::= FOR <параметр цикла> := <начальное значение>
(TO DOWNTO) <конечное значение> DO <оператор>
<параметр цикла> =:: <простая переменная>
<начальное значение> ::= <выражение>
<конечное значение> ::= <выражение>
<список описаний констант, типа, переменной, процедуры, функции> ::=
<описание констант, типа, переменной, процедуры, функции>
<список описаний констант, типа, переменной, процедуры, функции>;
<описание констант, типа, переменной, процедуры, функции>
<раздел описания констант> ::= CONST <список описаний константы>
<описание константы> ::= <список имен> = <константа>
<раздел описания типов> ::= TYPE <список описаний типа>
<описание типа> ::= <список имен> = <определение типа>
<определение типа> ::= <имя типа> <определение простого типа>
<определение сложного типа> <определение типа указатель>
<определение типа указатель> ::= ^<имя>
<определение простого типа> ::= <определение порядкового типа>
<имя вещественного типа>
<имя типа> ::= <имя>
<имя вещественного типа> ::= <имя типа>
<определение порядкового типа> ::=
<перечисляемый тип> <тип диапазон>
<перечисляемый тип> ::= (<список имен>)
<тип диапазон> ::= <константа>..<константа>
<определение сложного типа> ::= <тип массив> <тип запись>
<тип множество> <тип файл>
<определение типа указатель> ::= ^ <тип области>
<тип массив> ::= ARRAY [<список типов индекса>] OF <тип компонент>
<список типов индекса> ::= <тип индекса>
<список типов индекса>;<тип индекса>
<тип индекса> ::= <имя> <порядковый тип>
<тип компонент> ::= <определение типа>
<тип запись> ::= RECORD <список полей> END
<список полей> ::= <поле> <список полей>;< поле>
<поле> ::= <список имен> : <определение типа>
<тип-множество> ::= SET OF <порядковый тип>
<конструктор множества> ::= [<список элементов>]
<список элементов> ::= <элемент> <список элементов> , <элемент>
<элемент> ::= <выражение><выражение> .. <выражение>
<тип-файл> ::= FILE OF <тип компонентов файла>
<тип компонентов файла> ::= <определение типа>
<раздел описания переменных> ::= VAR <список описаний переменных>
<описание переменной> ::= <список имен> : <определение типа>
<раздел описания процедур> ::= <список описаний процедуры>
<раздел описания функций> ::= <список описаний функции>
<описание процедуры> ::= <заголовок процедуры> ; <блок>
<описание функции> ::= <заголовок функции> ; <блок>
<заголовок процедуры> ::= PROCEDURE <имя>
PROCEDURE <имя>(<список формальных параметров>)
<заголовок функции> ::= FUNCTION <идентификатор> : <тип результата>
FUNCTION <идентификатор> (<список формальных параметров>) :
<тип результата>
<список формальных параметров> ::= <секция формальных параметров> <список формальных параметров>;<секция формальных параметров>
<секция формальных параметров> ::=
<спецификация параметров значения>
<спецификация параметров переменных>
<спецификация параметра процедуры>
<cпецификация параметров функции>
<спецификация параметров значений> ::= <список имен> : <имя типа>
<спецификация параметров переменных>::=VAR <список имен> : <имя типа>
<спецификация параметра процедуры> ::= <имя процедурного типа >
<спецификация параметра функции> ::= <имя процедурного типа >
<список фактических параметров> ::= <фактический параметр>
<список фактических параметров>,<фактический параметр>
<фактический параметр> ::= <выражение> <переменная>
<программа> ::= <заголовок программы> ; <блок>
<заголовок программы>::=PROGRAM<имя>
PROGRAM<имя>(<список имен>)
<блок> ::= <раздел описания констант><раздел описания типов>
<раздел описания переменных>
<раздел описания процедур и функций>
<составной оператор>