Разработка программы-интерпретатора
Характеристика преимуществ современных языков программирования для создания программного обеспечения. Изучение методики создания простой программы-интерпретатора для обработки исходных текстов программ, выполняющих действия над комплексными числами.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 13.01.2016 |
Размер файла | 20,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
6
Размещено на http://www.allbest.ru/
Введение
В настоящее время языки высокого уровня стали основным средством разработки программ. Поэтому компиляторы составляют существенную часть системного программного обеспечения ЭВМ. Сегодня только очень малая часть программного обеспечения, требующая особой эффективности, разрабатывается с помощью ассемблеров. В настоящее время имеет применение довольно большое количество языков программирования. Наряду с традиционными языками, такими, например, как Фортран, широкое распространение получили так называемые «универсальные» языки (Паскаль, Си, Модула-2, Ада) и др., а также некоторые специализированные (например, язык обработки списочных структур Лисп). Кроме того, большое распространение получили языки, связанные с узкими предметными областями, такие, как входные языки пакетов прикладных программ.
Для ряда названных языков имеется довольно много реализаций для различных операционных систем и архитектур ЭВМ.
В рамках традиционных последовательных машин развивается большое число различных направлений архитектур. Примерами могут служить архитектуры CISC, RISC. Такие ведущие фирмы, как Intel, Motorola, Sun, начинают переходить на выпуск машин с RISC-архитектурами. Естественно, для каждой новой системы команд требуется полный набор новых компиляторов с распространенных языков.
Поэтому важную роль компиляторов в современном системном ПО для ЭВМ невозможно переоценить.
В данной контрольной работе делается попытка создания простого компилятора-интерпретатора с целью изучения принципов строения и работы этого вида системного ПО.
Техническое задание
В данной контрольной работе требуется: создать программу-интерпретатор, способную принимать на вход текстовый файл в ASCII-кодировке с текстом программы, разработать синтаксис для записи текста входной программы. Результатом работы программы является вывод на экран значения комплексного числа, являющегося результатом вычислений.
Интерпретатор должен воспринимать и обрабатывать следующие инструкции:
а) Присвоение значений переменным:
<ИмяПеременной> = <Значение> (например, X=1,5 - j0.8),
или <ИмяПеременной> = <Выражение> (например, F = X + j17);
б) Вывод результатов на экран:
OUT(<ИмяПеременной>) (например, OUT(X)),
или OUT(<Выражение>) (например, OUT(X + F));
в) В выражении допускаются следующие операции и встроенные функции:
+ - сумма;
- - разность;
|…| или ABS(…) - модуль комплексного числа;
* - произведение;
Re(…) - действительная часть числа;
Im(…) - мнимая часть числа;
~ - унарный минус;
j - умножение на мнимую единицу
г) Приоритет операций регулируется скобками.
Разработка грамматики
Список допустимых лексем (слов языка).
Допустимыми являются:
имя переменной <имя переменной> = L<L|C>; (L - буква, C - цифра)
числовые константы <числовая константа> = С<|C|.|C|>
зарезервированные слова <зарезервированные слова> = <'OUT', 'ABS', 'RE', 'IM', 'j'>
используемые символы <символы> = <'+', '-', '*', '|', '(', ')', '~',>
Все буквы - заглавные латинские, исключение только для j - обозначения мнимой единицы
В лексической свертке каждая лексема заменяется дескриптором. Дескриптор имеет единый формат для всех типов лексем, и содержит два поля: (<тип лексемы>, <указатель>)
<тип лексемы> - это, как правило, числовой код класса лексемы. Выделим 6 классов:
Идентификаторы (имена переменных) - PEREM;
Числовые константы (вещественные). Лексическая свертка вещественного числа включает дескриптор целой части числа и дескриптор дробной части числа, разделенные '.' - CONST;
Обозначение арифметических операций ('+', '-', '*', 'j', '~') - OPERAC;
Арифметические функции ('ABS', 'RE', 'IM', '|') - FUNC;
Разделители ('.', ')', '(', '=') - SPECSIMV;
Служебное слово ('OUT');
Лексемы собираются в таблицы - для каждого класса своя таблица. В поле дескриптора <указатель> содержится ссылка на строку соответствующей таблицы. Коды ключевых слов и разделителей всегда одни и те же в лексической свертке обрабатываемых текстов программ. Таблицы лексем для классов идентификаторов и числовых констант формируются на этапе лексического анализа. Поскольку тексты программ отличаются числом и именами переменных, количеством встречающихся числовых констант, коды идентификаторов и чисел различаются в лексической свертке различных программ (организованы в виде динамических списков).
В качестве кодов классов лексем будем использовать числа: 1 - имя переменной, 2 - числовая константа, 3 - арифметическая операция, 4 - арифметическая функция, 5 - разделители, 6 - служебное слово.
Внутренние таблицы лексического анализатора:
1. Таблица имен переменных
№ п/п |
Идентификатор имени |
Значение |
||
Re |
Im |
|||
1 2 3 4 5 6 |
X V R … |
0 3.6 6.89 … |
2 3.6 0.3 … |
2. Таблица числовых констант
№ п/п |
Значение |
||
Re |
Im |
||
1 2 3 4 5 6 |
8 7.6 2.1 … |
3.9 0 0.3 … |
3. Таблица арифметических операций
№ п/п |
Разделитель |
Приоритет |
|
1 2 3 4 5 |
+ - * j ~ |
1 1 2 3 3 |
4. Таблица арифметических функций
№ п/п |
Имя |
|
1 2 3 4 |
ABS RE IM | |
5. Таблица разделителей
№ п/п |
Имя |
|
1 2 3 4 |
. ) ( = |
6. Таблица служебного слова
№ п/п |
Имя |
|
1 |
OUT |
Описание программы-интерпретатора
Программа-интерпретатор выполнена с использованием среды разработки Borland Delphi 6.0 и представляет собой интерактивную оболочку, позволяющую загружать исходный ASCII-текст, содержащий программу, написанную в соответствии с синтаксисом входного языка.
Результатом обработки текста программы является вывод в окне интерпретатора значения комплексного числа, либо сообщения об ошибке.
Рисование круга с центром в точке (х0,у0) и радиусом R
CIRCLE( x0,y0,R )
Листинг программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
procedure TForm1.Button1Click(Sender: TObject); var xc,yc,x,y,r,x1,y1,x2,y2:integer; begin xc:=strtoint(edit1.Text); yc:=strtoint(edit2.Text); x:=strtoint(edit3.Text); y:=strtoint(edit4.Text); Canvas.Ellipse(xc-2,yc-2,xc+2,yc+2); Canvas.Ellipse(x-2,y-2,x+2,y+2); r:=round(sqrt(sqr(x-xc)+sqr(y-yc))); x1:=xc-r;y1:=yc-r; x2:=xc+r;y2:=yc+r; with Canvas do begin Brush.Style:=bsClear; Ellipse(xc-2,yc-2,xc+2,yc+2); Ellipse(x-2,y-2,x+2,y+2); Ellipse(x1,y1,x2,y2); end; end; |
Рисование прямоугольника:
RECT( x1,y1,x2,y2 )
(х1,у1) - координаты левого верхнего угла, (х2,у2) - правого нижнего угла.
Листинг программы
procedure TForm1.Button1Click(Sender: TObject);
var
r1, r2: TRect; // координаты углов прямоугольников
begin
// заполнение полей структуры
// зададим координаты углов прямоугольников
r1: = Rect(20.20.60.40);
r2: = Rect(10.10.40.50);
with fоrm1.Canvas do begin
Brush.Color: = clRed;
FillRect(r1); // закрашенный прямоугольник
Brush.Color: = clGreen;
FrameRect(r2}; // только граница прямоугольника
end;
end;
Рисование линии из точки с координатами (х1,у1) в точку (х2,у2)
LINE( x1,y1,x2,y2 )
Листинг
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
procedure Pline(x0,y0,x1,y1,sleeptime:integer; PaintBox1: TpaintBox); var x,y:integer; k:real; begin Form1.PaintBox1.Canvas.Moveto(x0,y0); Form1.PaintBox1.Canvas.Pen.Width:=3; if x1=x0 then begin y:=y0; k:=0; while (y<>y1) do begin if y0<y1 then y:=y+1 else y:=y-1; x:=x0; Form1.PaintBox1.Canvas.LineTo(x,y); sleep(sleeptime); end; end else k:=(y1-y0)/(x1-x0); x:=x0; y:=y0; while (x<>x1) do begin if x0<x1 then x:=x+1 else x:=x-1; y:=round(k*(x-x0))+y0; Form1.PaintBox1.Canvas.LineTo(x,y); sleep(sleeptime); end; end; |
Описание тестового примера
Текст программы:
X=0.5+j2
Y=0.1-j8.5
X=RE(X)+RE(Y)*2
OUT(X)
OUT(Y)
Лексическая свертка исходного текста:
(1,1) (5,4) (2,1) (3,1) (3,4) (2,2)
(1,2) (5,4) (2,3) (3,2) (3,4) (2,4)
(1,1) (5,4) (4,2) (5,3) (1,1) (5,2) (3,1) (4,2) (5,3) (1,2) (5,2) (3,3) (2,5)
(6,1) (5,3) (1,1) (5,2)
(6,1) (5,3) (1,2) (5,2)
Заключение
В данной курсовой работе была выполнена задача создания простой программы-интерпретатора для обработки исходных текстов программ, выполняющих действия над комплексными числами.
Библиографический список
программирование интерпретатор число комплексный
Серебряков В.А., Галочкин М.П., Гончар Д.Р., Фуругян М.Г. Теория и реализация языков программирования. М.: “МЗ-Пресс”, 2012.- 296 с.
Атакищев О.И., Волков А.П., Титов В.С., Старков Ф.А. Формальные грамматики и их применение в распознавании образов. - Курск, 2010. -115с.
Бек Л. Введение в системное программирование. - М.: Мир, 1988. - 448 с.
Молчанов А.Ю. Системное программное обеспечение - СПб.: 2003 г.
Размещено на Allbest.ru
...Подобные документы
Разработка программы-интерпретатора, способной получать на входе текстовый файл (в формате ASCII или ANSI) с текстом программы и на выходе выводить на экран результаты вычислений, определяемых программистом. Выбор лексем, интерфейс и листинг программы.
курсовая работа [132,0 K], добавлен 12.03.2013Понятие и функции комплексных чисел. Правила выполнения арифметических операций с комплексными числами. Действия с комплексными числами: сложение, вычитание, произведение, деление. Программная реализация решения задачи. Пример выполнения программы.
курсовая работа [398,8 K], добавлен 01.02.2010Функции и основные компоненты систем программирования. Средства создания программ. Трансляторы языков программирования. Принципы и фазы работы компилятора, трансформация языка программирования в машинный код. Механизм преобразования интерпретатора.
презентация [3,3 M], добавлен 07.02.2012Проектирование лексического и синтаксического анализаторов учебного языка. Правила преобразования логических выражений в ПОЛИЗ. Формирование триад, оптимизация их списка. Логическая структура программы. Тестирование модулей транслятора-интерпретатора.
курсовая работа [1,3 M], добавлен 28.05.2013Аналитический обзор существующих программ-редакторов схем (Microsoft Office Visio 2007, FCEditor, редактор блок-схем). Математическое описание программы и её интерпретатора. Описание системы и руководство пользователя, XML и текст редактора схем.
дипломная работа [2,1 M], добавлен 07.07.2012Характеристика возможностей редактора DreamWeaver и Front Page. Особенности языков программирования PHP и JavaScript. Основные требования, предъявляемые к Web-странице. Специфика программного обеспечения для ее создания и эффективности использования.
курсовая работа [44,6 K], добавлен 03.02.2011Аналоги текстовых редакторов с русскоязычным интерфейсом. Разработка и тестирование программного продукта, позволяющего работать с текстом и файлами в редакторе на языке программирования, основанным на русском языке. Алгоритм функционала программы.
дипломная работа [2,8 M], добавлен 21.07.2013Изучение методов и этапов создания класса Complex, позволяющего работать с комплексными числами и производить с ними следующие операции: сложение, вычитание, умножение, деление двух комплексных чисел. Написание кода для ввода и вывода исходных данных.
курсовая работа [628,4 K], добавлен 11.09.2010Анализ различных командных интерпретаторов. Разработка структуры программы на языке программирования С и ее алгоритма. Требования для работы с ней. Действия, необходимые для её запуска и функционирования. Описание функций translate, sozd, info и f.
курсовая работа [238,2 K], добавлен 06.12.2014Разработка программы для выполнения арифметических операций с комплексными числами. Разработка эскизного проекта. Диаграмма последовательностей и классов. Разработка и описание программы. Разработка программного кода и руководства пользователя.
курсовая работа [1,2 M], добавлен 25.11.2011Создание программы, работающей с набором данных на внешнем устройстве. Описание программного комплекса. Обзор структуры главной программы. Процедура добавления новых элементов, поиска и создания на экране вертикального меню. Проверка работы программы.
курсовая работа [265,6 K], добавлен 28.08.2017Особенности разработки программ для ЭВМ. Этапы планирования программы. Понятие и особенности алгоритмов. Средства, используемые для создания программ. Виды и классификация языков программирования. Структурное и объектно-ориентированное программирование.
реферат [59,7 K], добавлен 19.08.2010Теоретическая и практическая реализация комплексной арифметики на языке программирования Си. Разработка программы, производящей арифметические действия с комплексными числами. Автоматизации решения комплексных чисел. Матричная и стандартная модель.
курсовая работа [495,4 K], добавлен 21.01.2012Проектирование программы, реализующей синтаксический анализ простой программы на языке С: этапы создания, алгоритм ее функционирования, структура, технология обработки информации. Описание программных модулей, интерфейс; выбор инструментальных средств.
курсовая работа [1,6 M], добавлен 12.12.2011Язык программирования как формальная знаковая система, предназначенная для записи программ, его отличие от естественных языков. Прописные и строчные буквы латинского алфавита. Ключевые слова языка программирования. Классическая схема создания программы.
презентация [1,2 M], добавлен 19.02.2014Разработка программы, осуществляющей контроль за своевременностью обновления программного обеспечения с помощью рассылки электронных писем. Анализ требований к системе; выбор метода решения, алгоритма, выбор языка программирования, описание программы.
дипломная работа [5,6 M], добавлен 29.06.2011Исследование теоретических аспектов разработки программы посредством использования Visual Basic. Анализ достоинств и недостатков данного языка программирования. Изучение особенностей создания интерфейса приложения. Основные этапы реализации программы.
практическая работа [460,6 K], добавлен 22.01.2013Разработка прикладной программы для операций создания и уничтожения объектов в системе визуального объектно-ориентированного программирования C++Builder. Алгоритм работы программы, набор функций и операторов, компонент и модулей, кнопки событий.
дипломная работа [672,5 K], добавлен 16.08.2012Сравнительный анализ языков программирования высокого уровня Си и Паскаль. Реализация алгоритма обработки данных. Тестирование и отладка программы или пакета программ. Структура программы на языке Турбо Паскаль. Указатели и векторные типы данных.
курсовая работа [233,5 K], добавлен 14.12.2012Этапы создания программы. Транслятор как средство для преобразования текстов из одного языка в другой. Понятие языков программирования, основные моменты их истории. Некоторые операторы языка QBasic. Понятие переменной, ее наглядное представление.
презентация [22,9 K], добавлен 16.06.2011