Разработка программы-интерпретатора

Характеристика преимуществ современных языков программирования для создания программного обеспечения. Изучение методики создания простой программы-интерпретатора для обработки исходных текстов программ, выполняющих действия над комплексными числами.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.