Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовик2 (Автосохраненный).docx
Скачиваний:
2
Добавлен:
14.09.2019
Размер:
245.69 Кб
Скачать

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

«ОМСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

Кафедра: «Прикладная математика и фундаментальная информатика»

Специальность:

«Математическое обеспечение и администрирование информационных систем»

Пояснительная записка к курсовому проекту

на тему: Синтаксический анализ арифметических выражений

по дисциплине: Структуры и алгоритмы.

Руководитель проекта:

Кандидат технических наук,ассистент

Ракицкий Юрий Сергеевич

___________________________

(Подпись, дата)

Разработал студент

Группы МО-210

Лейс Евгений Александрович

___________________________

(Подпись, дата)

Омск 2012

Цель работы – По имеющейся строке,содержащей арифмитическое выражение и известных значения, входящих в неё переменных,вычислить значение выражения.

В ходе работы создавалось приложение для Windows на языке программирования С++ реализующее синтаксический анализ арифметических выражений.

В результате при помощи созданного приложения была полученна возможность анализировать арифметические выражения и производить расчеты.

Содержание

Введение

  1. Постоновка задачи курсового проектирования

  2. Описание структур данных

  3. Руководство пользователя

  4. Результаты тестирования

  5. Заключение

  6. Список используеммой литературы

Приложение А

Введение

Некоторые фрагменты синтаксического распознавания текста можно выполнить, руководствуясь общими принципами рекурсивного программирования. Так, можно написать распознаватель (и интерпретатор) арифметических выражений со скобками на основании рекурсивной функции со следующими «правилами игры»:

- рекурсивная функция возвращает значение выражения, представленного текстовой строкой;

- функция ищет в строке наименее приоритетную операцию вне скобок, относительно ее она разделяет строку на две части и рекурсивно вызывает саму себя для полученных частей, над результатами вызовов выполняется действие, соответствующее найденной операции;

- если строка содержит только выражение в скобках, то эти скобки уничтожаются, а по отношению к полученной строке функция вызывается рекурсивно;

- если строка содержит только константу, то она переводится во внутреннюю форму и ее значение возвращается в виде результата;

  1. Постановка задачи курсового проектирования

Задача синтаксического анализа заключается в том, чтобы по имеющейся строке, содержащей арифметическое выражение, и известным значениям, входящих в нее переменных, вычислить значение выражения. Процесс вычисления арифметических выражений можно представить в виде бинарного дерева. Действительно, каждый из арифметических операторов (+, –, *, /) требует двух операндов, которые также будут являться арифметическими выражениями и, соответственно могут рассматриваться как поддеревья.

Рис. 1 показывает пример дерева, соответствующего выражению:

x-2*(1/x+x/3) (1)

Рис. 1. Синтаксическое дерево, соответствующее арифметическому выражению (1).

В таком дереве концевыми узлами всегда будут переменные (здесь x) или числовые константы, а все внутренние узлы будут содержать арифметические операторы. Чтобы выполнить оператор, надо сначала вычислить его операнды. Таким образом, дерево на рисунке следует обходить в концевом порядке. Соответствующая последовательность узлов x 2 1 x / x 3 / + * - (2) называется обратной польской записью арифметического выражения.

При построении синтаксического дерева следует обратить внимание на следующую особенность. Если есть, например, выражение a-b+c (3) и операции сложения и вычитания мы будем считывать слева на право, то правильное синтаксическое дерево будет содержать минус вместо плюса (рис. 2а). По сути, это дерево соответствует выражению  a-(b-c). Облегчить составление дерева можно, если анализировать выражение (3) наоборот, справа налево. В этом случае получается дерево с рис. 2б, эквивалентное дереву 2а, но не требующее замены знаков. Аналогично справа налево нужно анализировать выражения, содержащие операторы умножения и деления.

Рис. 2. Синтаксические деревья для выражения a – b + c при чтении слева направо (а) и справа налево (б).