Разработка метода преображения арифметического выражения «Вычисление арифметических выражений, состоящих из констант » и осуществление программно.
Содержание
Введение 2
Метод решения задачи 3
Отображение программы 5
Итоги счета 6
Листинг программы 6
Перечень литературы 15
Выдержка
Введение
Язычок программирования является подмножеством натурального языка и специализирован для помощи процесса общения человека с компом. В общем случае язычок это очень много предложений, какие разрешено сделать запись на нем. Различие языка программирования от натурального в его законченности либо замкнутости. Под сиим понимается, что теоретически разрешено зачислить все предписания, какие разрешено на нем собрать. Для натурального языка это нереально. В контексте нашего изложения под языком программирования станем воспринимать не лишь языки высочайшего уровня, однако и языки командных процессоров и вообщем всевозможные комплекты предложений, с поддержкой которых делается управление работой некой програмки.
Концепция компиляции основывается на том, что хоть какой язычок может существовать описан казенно.
База хоть какого натурального языка его азбука, то имеется очень много знаков букв.
Для формального описания языка нужны сообразно последней мерке 2 вещества азбука и комплект верховодил(синтаксис) для построения предложений языка. Есть ещё некоторое количество частей формального описания, какие еще главны для процесса однозначного построения и определения предложений языка.
Арифметические выражения являются принципиальным составляющей представления учебной инфы. Для построения различных программ отделки математической инфы нужно рализовать эквивалентные преображения арифметических выражений.
В работе осмотрен и реализован метод преображения арифметического выражения синтаксический анализ способом рекурсивного спуска.
Посадка задачи
Создать метод преображения арифметического выражения «Вычисление арифметических выражений, состоящих из констант » и воплотить программно.
Средства разработки програмки: язычок программирования С для операционной системы DOS.
Метод решения задачи
Синтаксический анализ способом рекурсивного спуска. Рекурсивный спуск является самым «естественным» метод нисходящего разбора построения бревна «сверху вниз». При нисходящем разборе этот любой нетерминальный знак нужно сменить на правую дробь 1-го из верховодил из соответственной группы, в котором он находится в левой доли. Единым базой для такового выбора является правило той доли терминальной строчки(предписания), которое «покрывается» сиим нетерминальным эмблемой(синтаксической штукой).
Употребляется заглавие"нисходящий" в следствии метода построения синтаксического бревна. При разборе отправляются от начального знака и нисходят к предписанию(рис. 1).
Рис. 1.
Отседова следует самый-самый обычный неофициальный метод синтаксического разбора. Для всякой группы верховодил с всеобщим нетерминальным эмблемой в левой доли пишется функция определения, которая сообразно начальным символам терминальной цепочки в состоянии найти, правую дробь какого критерии следует использовать. Потом она синхронно просматривает терминальную цепочку и правую дробь критерии. Ежели очередные терминальные знаки в цепочке и в правиле совпадают, то они пара пропускаются, ежели недостает, то это знак синтаксической оплошности. Ежели в правиле сталкивается нетерминальный знак, то нужно начать подобную функцию для отделки группы верховодил, в которой этот нетерминал сталкивается в левой доли. Поглядим, как данная мысль воплотится для определения терма F.
Запишем процедуры для нетерминальных знаков таковой грамматики:
::= :=
| IF THEN
| IF THEN ELSE
::= i | i()
::= |
::= | *
::= |()
Чтоб удобнее было действовать, перепишем грамматику этак:
::= : =
| IF THEN [ELSE ]
::= i [()]
::= { }
::= {*}
::= |()
Считаем, что сможем вести разбор без возвратов. Для такого чтоб возвратов не было, в качестве контекста употребляется единый знак, последующий за уже разобранной долею фразы. Запишем процедуры на нетрадиционном алгоритмическом языке с соблюдением последующих критерий:
1. Глобальная переменная NXTSYMB постоянно охватывает тот знак исходной програмки, который станет возделываться последующим. При вызове процедуры для розыска новейшей цели 1-ый знак, который она обязана изучить, уже располагаться в NXTSYMB.
2. Аналогично этому, перед тем как вылезти из процедуры с известием об успехе, знак, последующий за уже разработанной под цепочкой, вмещается в NXTSYMB.
3. Процедура SCAN приготовляет следующий знак исходной програмки и размещает его в NXTSYMB.
4. Програмка ERROR вызывается в тех вариантах, когда найдена опечатка. Она печатает известие и передает управление назад. Опосля возврата мы продолжим работу этак, как как будто бы ни какой-никакой оплошности не было(см. суждения, последующие за описанием процедур).
5. Для такого чтоб приступить синтаксический анализ аннотации, мы обращаемся к програмке SCAN, которая поместит 1-ый знак в NXTSYMB, а потом вызываем функцию STATE.
Отображение программы
Програмка исполняет последующие функции:
ввод арифметического выражения, состоящего из констант, переменных, символов операций и функций;
разбор арифметического выражения;
вычисление смысла арифметического выражения.
Главные функции програмки:
PrintTablVar() вывод таблицы переменных
void AssignOp( void) разбор и расплата выражения
void ExpressAdd( void) вычисления выражения для склады и вычитания
void ExpressMult( void)- вычисление выражения для умножения и деления
void ExpressFunc( void)- вычисление первичного выражения
double getfloat( char *num, int max)- брать количество во входной строке и изменить к double
int GetName( char *name, int max)- брать фамилия во входной строке
int FindNameVar( char *var, int *num)- отыскать фамилия в таблице символов
int AddNameVar( char *var)- прибавить новое фамилия в таблицу символов
void SkipBlanks()- пропуск служебных символов
int match( char *str)- испытание вхождения строчки во входной строке
Литература
Перечень литературы
1. Абрамов Л. М. , Капустин В. Ф. Математическое программирование. Л. , Изд-Ленингр. ун-та, 1976.
2. Дэвис, Стефан Р. С для"чайников"/ Пер. с англ. Мокринцева А. А. , Стели Л. П. - К. : Диалектика, 1996.
3. Н. Б. Культин. Самоучитель С . М. , 2000.
4. Носов В. А. Базы теории алгоритмов и разбора их трудности. М. , 1992.
5. В. Липский. Комбинаторика для программистов. М. : Мир, 1988.
6. Лебедев В. Н. "Вступление в системы программирования". М. ,"Статистика", 1975.
7. Страуструп Б. Дизайн и эволюция языка C . М. : ДМК-Пресс, 2000.
Введение
Язык программирования является подмножеством естественного языка и предназначен для поддержки процесса общения человека с компьютером. В общем случае я