47083 (608070)

Файл №608070 47083 (Интерактивный интерпретатор)47083 (608070)2016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ «БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ»

Кафедра информатики

КУРСОВОЙ ПРОЕКТ

по предмету «Объектно-ориентированное программирование»

на тему «Интерпретатор языка программирования».

Выполнил ст. гр.********

************.

Проверил

****************.

МИНСК 2005


Содержание.


Содержание. 2

Введение 3

Постановка задачи. 4

Описание реализованного в интерпретаторе языка программирования. 5

Примеры пользовательских функций 12

1. Сортировка массива. 12

2. Вычисление НОД по алгоритму Евклида 12

3. Рекурсивное вычисление факториала. 13

4. Проверка, является ли строка корректным идентификатором. 13

5. Вычисление угла треугольника по трем сторонам. 14

Проектирование и реализация программы-интерпретатора 15

Внутреннее представление и выполнение программы. 18

Обработка текста программы. 24

Графический интерфейс пользователя. 27

Взаимодействие подсистем интерпретатора. Класс Facade. 31

Заключение 33

Приложение. Исходный текст (сокращенно). 34

1. Класс VarBase. 34

2. Класс ArrayVar. 34

3. Класс InterprEnvironment. 36

4. Класс Namespace. 40

5. Интерфейс IСomputable. 42

6. Класс Call. 42

7. Класс ArgList 42

8. Класс Expression. 43

9. Класс Operation (сокращенно). 49

10. Класс Parser. 50

11. Класс LineCompiler. 56

12. Интерфейс IOperator. 60

13. Класс Command. 60

14. Класс ForOperator. 61

15. Класс NextOperator 62

16. Класс Subroutine. 62

17. Класс Facade. 67

18. Класс SourceBox. 69

19. Класс Form1. 75

Использованная литература и документация. 78



Введение


Стандартный «Калькулятор» Windows является, пожалуй, единственной имеющей широкое распространение программой, предназначенной для мелких вычислений. Его не могут заменить из-за своей громоздкости, ни электронные таблицы, ни профессиональные математические пакеты. Но в то же время эта программа имеет существенные недостатки, причина которых проста – пользовательский интерфейс сделан «по образу и подобию» карманного калькулятора, поэтому заимствованы все неудобства последнего. Например, при работе пользователь видит только одно число и после получения результата не может проверить, правильно ли были введены операнды. Второй проблемой является невозможность добавления пользовательских функций – если приходится производить вычисления по одной и той же формуле сто раз, сто раз приходится нажимать соответствующую кнопку для каждой арифметической операции в выражении. На мое мнение, наиболее удобны для повседневного использования в качестве замены «Калькулятору» интерактивные интерпретаторы, к числу которых относятся MatLab и Python. Но основное назначение этих программных пакетов совсем другое, нет смысла устанавливать их на компьютер лишь для того, чтобы выполнять несколько сложений и умножений пару раз в день. Поэтому я решил написать несложный интерактивный интерпретатор, не громоздкий и удобный для мелких вычислений.

Постановка задачи.

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


Описание реализованного в интерпретаторе языка программирования.

Интерпретатор работает в режиме консоли и выполняет команды, вводимые с клавиатуры. Эти команды могут содержать вызовы пользовательских функций. Код пользовательских функций создается с помощью окна редактора кода интерпретатора. Интерпретатор предоставляет возможность создания, редактирования и удаления пользовательских функций. Функции сохраняются в файлах, имя которых не имеет расширения и совпадает с именем функции. Файлы используемых функций должны находиться в подкаталоге subroutines рабочего каталога интерпретатора. Сохраненные пользовательские функции загружаются автоматически при запуске интерпретатора. Все операторы управления течением программы могут использоваться только в тексте пользовательской функции. Все остальные операторы (команды) могут быть вызваны непосредственно из консоли. Кроме того, в консоли можно ввести выражение без дополнительных ключевых слов, и оно будет вычислено, его значение будет выведено на экран. Для вывода же данных из функции необходимо использовать операторы вывода (см. ниже).

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

  • call

  • clear

  • else

  • elseif

  • endif

  • error

  • for

  • if

  • loop

  • next

  • print

  • println

  • result

  • return

  • while

Предварительного объявления переменных не требуется. Переменная присутствует в памяти с момента присвоения ей значения, при этом тип переменной определяется по типу присваиваемого ей значения. Массив также создается при присваивании значения какому-либо его элементу. Попытка получить значение еще не инициализированной переменной или попытка рассмотреть как массив переменную, не являющуюся таковой, приводит к ошибке. Каждая функция и среда консоли имеют собственные, не зависящие друг от друга наборы переменных. Обратиться из функции или среды консоли к “чужой” переменной невозможно.

Имеются следующие типы данных: целый, вещественный, строковый, массив. Целый, вещественный и строковый типы называются простыми в противоположность массиву; вещественный и целый типы называются числовыми. Тип переменной не описывается, но может быть определен с помощью функций issingle, isarray, isstring, isnum, isint, isreal. Кроме того, выполнение операции над аргументами недопустимых типов может привести к ошибке. Массив может хранить элементы любых простых типов, причем типы разных элементов одного и того же массива могут не совпадать. По мере заполнения массива возможно появление в нем «пустых мест», например, после команд a{0}:=1; a{2}:=4; a{4}:=5 (пропущены элементы с индексами 1 и 3). Попытка получить значение еще не инициализированного элемента массива приводит к ошибке. Проверить, инициализирован ли элемент массива с заданным индексом, можно с помощью функции defined.

Любая последовательность пробелов и табуляций, идущих подряд, считается за один пробел, если она находится между символами, которые могут входить в идентификаторы (буквы, цифры, подчеркивание), или игнорируется в противном случае. Также игнорируются интерпретатором комментарии, которыми являются строки или окончания строк, начинающиеся с символа ‘#’. Эти правила не распространяются на строковые константы, заключаемые в двойные кавычки. Строковой константой не является последовательность символов в кавычках, если открывающая кавычка находится после символа начала комментария '#’, но этот символ может присутствовать в строковой константе между кавычками. Так например, команда a : = b + ”#”+c#comment эквивалентна команде a:=b+”#” + c, но не равносильна команде a:=b+” #”+c, или a+b+” (последняя команда синтаксически неверна).

Каждая строка, вводимая с консоли, содержит одну команду или ни одной (пустая строка или комментарий) команды. То же касается и строк файла функции, кроме первой, которая должна содержать описание функции в виде: [], где список параметров, заключаемый в квадратные скобки, состоит из имен параметров, разделенных запятой (эта строка также может содержать и комментарий после описания функции). Квадратные скобки пишутся даже при пустом списке параметров. Имена параметров (формальных) подчиняются тем же ограничениям, что и имена переменных, мало того, они рассматриваются как переменные, определенные в данной функции, но в начале выполнения функции они принимают значения соответствующих фактических параметров. Нужно отметить, что попытка передачи в качестве фактического параметра функции переменной с неопределенным значением всегда приводит к ошибке, даже если в функции к этому параметру нет ни одного обращения.. Также приводит к ошибке вызов функции с числом фактических параметров, не соответствующим числу формальных параметров. Кроме того, в каждой функции имеется переменная с предопределенным именем result. Ее значение на момент выхода из функции и является возвращаемым значением функции. В момент начала выполнения функции ее значение равно 0 (целое число). Если переменная result была удалена командой clear и осталась неопределенной на момент выхода из функции, возникает ошибка.

Значения целого, вещественного и строкового типа могут быть представлены в программе в виде констант (литералов). Целый литерал представляет собой последовательность цифр. Он представляет число, обычной записью которого является. Вещественный литерал представляет собой десятичную или экспоненциальную запись вещественного числа, при этом, в случае экспоненциальной записи, буква “е” может быть как строчной, так и прописной. Например:12.0, 1.6e87, 2Е-7, 89.0. В числовых литералах не может содержаться начальный символ «+» или «-», они могут представлять только положительное число. Отрицательные значения можно получить применением операции унарный минус. Целая часть вещественного числа не может быть опущена. Дробная часть (точка и хотя бы одна цифра после нее) должна присутствовать, если не указан порядок, например, 11е-6 – допустимая запись, а 11.е-4 и 61. – нет. Строковый литерал заключается в двойные кавычки, если в него нужно включить двойную кавычку, то она пишется дважды.

Специальный логический тип данных отсутствует, логические значения представляются переменными целого, вещественного либо строкового типа – истине соответствует положительное число либо непустая строка, лжи – неположительное число либо пустая строка. Результат всех стандартных логических операций – целые числа 1 (истина) или -1 (ложь). При попытке рассмотреть массив как логическое значение возникает ошибка.

Выражением является:

  • идентификатор переменной;

  • константа целого, вещественного или строкового типа;

  • обращение к элементу массива с заданным индексом, имеющее синтаксис {} (индекс заключен в фигурные скобки). Индекс должен быть выражением. Перед открывающей фигурной скобкой должно стоять имя переменной, являющейся массивом (но не другое выражение, имеющее тип массива). Значение индекса должно быть неотрицательным целым, иначе возникает ошибка;

  • результат применения унарной операции к выражению;

  • результат применения бинарной операции к двум выражениям;

  • вызов функции (без ключевого слова call). В этом случае функция обязана возвращать значение, иначе возникает ошибка. Фактическими параметрами функции должны быть выражения;

  • выражение, заключенное в круглые скобки.

Операции, используемые в выражениях, и их приоритеты (операнды обозначены как a и b; для суммы чисел, разности и произведения результат – целое число, если оба операнда – целые, иначе – вещественное число) перечислены в таблице.

Уровень приоритета

Синтаксис

Типы операндов

Смысл

Тип результата

1

~a

простой

логическое отрицание

целый (-1 или 1)

-a

число

унарный минус

тот же, что и a

+a

число

унарный плюс

2

a*b

числа

произведение

число

a/b

числа

вещественное деление

вещественное

3

a+b

строки либо a – строка, b - число

конкатенация строк (число преобразуется в строку)

строка

числа

сумма

число

a-b

числа

разность

число

4

a=b

простые (оба – числа либо строки одновременно)

равно

целый (-1 или 1)

a<>b

не равно

a>b

больше

a

меньше

a<=b

меньше либо равно

a>=b

больше либо равно

5

a&b

простые

“И”

6

a^b

простые

исключающее “ИЛИ”

a~=b

логическая эквивалентность

a|b

“ИЛИ”

Выражения интерпретируются в соответствии с приоритетом операций и имеющимися в них круглыми скобками. При этом все унарные операции выполняются справа налево, бинарные операции одинакового приоритета – слева направо. Если в выражении хотя бы один из операндов операции не имеет требуемый тип, или операция не может быть произведена корректно по другой причине, например, в случае деления на ноль, то возникает ошибка.

Характеристики

Тип файла
Документ
Размер
5,11 Mb
Тип материала
Учебное заведение
Неизвестно

Тип файла документ

Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.

Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.

Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.

Список файлов курсовой работы

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7199
Авторов
на СтудИзбе
249
Средний доход
с одного платного файла
Обучение Подробнее