Материал: Конвертор из языка Pascal в C++

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Конвертор из языка Pascal в C++

Донбасский государственный технический университет

Специализированные компьютерные системы









КУРСОВАЯ РАБОТА

на тему: Конвертор из языка Pascal в C++


Студент III курса СКС-1 группы

Богданова Ю.А.

Руководитель кандидат экономических наук, доцент Бизянов Е.Е.







г. Алчевск- 2015 год

РЕФЕРАТ

конвертор синтаксис массив данные

Пояснительная записка содержит: 28 с., 4 рисунка, 1 блок-схема, 1 приложение.

Цель курсовой работы - создать программу, которая выполняет преобразование кода объявления переменных, констант, условного оператора if и цикла for с языка Pascal на язык C++.

Программа из одного текстового поля заменяет синтаксис одного языка высокого уровня на синтаксис другого языка и выводит преобразованный код во втором текстовом поле., C++, PASCAL, КОНСТАНТА, ПЕРЕМЕННАЯ, ФУНКЦИЯ, ЦИКЛ FOR, УСЛОВНЫЙ ОПЕРАТОР IF

ВВЕДЕНИЕ

Java - объектно-ориентированный язык программирования <https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F>, разработанный компанией Sun Microsystems <https://ru.wikipedia.org/wiki/Sun_Microsystems> (в последующем приобретённой компанией Oracle <https://ru.wikipedia.org/wiki/Oracle>). Приложения Java обычно транслируются <https://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B0%D0%BD%D1%81%D0%BB%D1%8F%D1%82%D0%BE%D1%80> в специальный байт-код <https://ru.wikipedia.org/wiki/%D0%91%D0%B0%D0%B9%D1%82-%D0%BA%D0%BE%D0%B4>, поэтому они могут работать на любой виртуальной Java-машине <https://ru.wikipedia.org/wiki/Java_Virtual_Machine> вне зависимости от компьютерной архитектуры <https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0>. Дата официального выпуска - 23 мая 1995 года.

Изначально язык назывался Oak («Дуб») разрабатывался Джеймсом Гослингом <https://ru.wikipedia.org/wiki/%D0%93%D0%BE%D1%81%D0%BB%D0%B8%D0%BD%D0%B3,_%D0%94%D0%B6%D0%B5%D0%B9%D0%BC%D1%81> для программирования бытовых электронных устройств. Впоследствии он был переименован в Java и стал использоваться для написания клиентских приложений и серверного <https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%80%D0%B2%D0%B5%D1%80_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5)> программного обеспечения.

Достоинством подобного способа выполнения программ является полная независимость байт-кода от операционной системы <https://ru.wikipedia.org/wiki/%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0> и оборудования <https://ru.wikipedia.org/wiki/%D0%90%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D0%B0>, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью технологии Java является гибкая система безопасности, в рамках которой исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером), вызывают немедленное прерывание[1].

1. АНАЛИЗ ЗАДАНИЯ

1.1 Теоретические сведения, необходимые для выполнения работы

Чтобы выполнить курсовой проект, нам необходимо ознакомиться с основами Java.

Программы на Java транслируются <https://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B0%D0%BD%D1%81%D0%BB%D1%8F%D1%82%D0%BE%D1%80> в байт-код <https://ru.wikipedia.org/wiki/%D0%91%D0%B0%D0%B9%D1%82-%D0%BA%D0%BE%D0%B4>, выполняемый виртуальной машиной Java <https://ru.wikipedia.org/wiki/Java_Virtual_Machine>(JVM) - программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор <https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B0%D1%82%D0%BE%D1%80>.

Достоинством подобного способа выполнения программ является полная независимость байт-кода от операционной системы <https://ru.wikipedia.org/wiki/%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0> и оборудования <https://ru.wikipedia.org/wiki/%D0%90%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D0%B0>, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью технологии Java является гибкая система безопасности, в рамках которой исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером), вызывают немедленное прерывание[2].

.2 Концепция решения задания

Основное задание в курсовом проекте - это возможность преобразования данных из одного языка в другой.

Самый лучший путь замены синтаксиса является использование регулярных выражений. Примером элементарных замен синтаксиса может служить объявления типов данных констант и переменных Integer - int ,bool-Boolean и т.д.

Далее, необходимо понять работу циклов For и If в Pascal, их отличие от тех же циклов, но уже в языке C++.

Далее необходимо предусмотреть удобный в использовании и лёгкий в создании интерфейс пользователя. Таким интерфейсом может служить форма на которой расположены 2 текстовых поля, 1е поле для ввода команд на языке Pascal, 2е выводит данные на языке С++.

Всё вышеперечисленное является необходимым, но не недостаточным условием завершения работы над курсовым проектом. Как и любая завершенная программа, она должна содержать меню инструментов и панель инструментов, справку, содержащую информацию о создателе программы. Что касается интерфейса, необходимо предусмотреть возможность выполнения стандартных для Windows операций, а именно копирование, вставка и операция «вырезать». Так же в наш проект необходимо дополнить очистку полей ввода/вывода информации, чтобы повторно использовать программу.

2. ВЫБОР И ОБЗОР СРЕДЫ РАЗРАБОТКИ

Для выполнения данной работы необходимо определить язык программирования и платформу, на которой будет реализован этот язык. При определении этого, необходимо учитывать на какой операционной системе проект будет распространяться, его системные требования, необходимость интернета для работы с ним и другие особенности.

Учитывая особенность данной работы, а именно применение классов, функции и регулярных выражений рационально было бы использовать объектно-ориентированный язык программирования. Наиболее подходящие варианты - языки С++ и Java.

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

Преимущества языка Java:

отсутствие необходимости освобождать память в явном виде;

независимость от платформы, на которой выполняется программа;

введение истинных массивов и запрещение указателей;

исключено множественное наследование.

Преимущества языка С++:

наличие шаблонов классов и функций;

выполнение программы в 2-3 быстрее, чем на языке Java;

полный контроль над выделением памяти.

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

Осталось определиться с платформой, которая будет использована для реализации нашего проекта. Для Java существует множество платформ программирования, самыми популярными являются Eclipse и NetBeans. Из-за качества и больших возможностей был выбран NetBeans.

3. РАЗРАБОТКА ИНТЕРФЕЙСА ПОЛЬЗОВАТЕЛЯ

Интерфейс (от англ. Interface - граница раздела, стык, область контакта и взаимодействия) - совокупность средств и методов взаимодействия между элементами системы.

Есть ряд различных интерфейсов:

командный интерфейс. Он называется так потому, что в этом виде интерфейса человек подает "команды" компьютеру, а компьютер их выполняет и выдает результат человеку. Командный интерфейс реализован в виде пакетной технологии и технологии командной строки;- интерфейс (Window - окно, Image - образ, Menu - меню, Pointer - указатель). Хотя и в этом интерфейсе машине подаются команды, но это делается "опосредственно", через графические образы. Этот вид интерфейса реализован на двух уровнях технологий: простой графический интерфейс и "чистый" WIMP интерфейс;- интерфейс (Speech - речь, Image - образ, Language - язык, Knowlege - знание). Компьютер находит для себя команды, анализируя человеческое поведение[3].

В данной курсовой работе в качестве интерфейса были использованы формы.Так как он прост в обращении из-за наглядности интерфейса, легок для понимания, а также отлично подходит как для небольших задач - как например этот проект, так и для больших проектов.

Интерфейс программы представлен на рисунке 3.1

Интерфейс состоит из формы, которая содержит поле для ввода данных (слева на рисунке), поле вывода преобразованных данных (справа на рисунке), а также поле для вывода возможных ошибок (внизу формы).

Вверху формы расположены меню инструментов и панель инструментов.

Кнопка «Конвертировать» выполняет основную функцию нашей программы - конвертирование из одного языка в другой.

Рисунок 3.1 - Интерфейс программы

4. БЛОК-СХЕМА ОСНОВНОГО АЛГОРИТМА

Блок-схема основного алгоритма представлена на рисунке 4.1.







Рисунок 4.1 - Алгоритм работы основной функции программы

5. ОПИСАНИЕ АЛГОРИТМА ПРОГРАММЫ

При запуске программы появляются 2 текстовых поля(2): для ввода и вывода. Далее начинается ввод пользователем данных в поле с названием Pascal, так же можно загрузить уже готовую информацию (с расширением .txt) и вставить его в поле слева с помощью команды Файл- Открыть(3).

При нажатии на кнопку «Конвертировать», выполняется конвертация программы с одного языка на другой(4).

Далее происходит проверка текста на ошибки, если такие были допущены, то программа указывает пользователю на строки, где совершены ошибки. Можно их убрать и программа будет работать дальше(5-7)

Над программой можно выполнить и другие действия: очистить поля, вырезать, вставить, сохранить. Так же можно просмотреть данные об авторе программы.

6. ТЕСТИРОВАНИЕ ПРОГРАММЫ

При тестировании программы была проверена работоспособность программы при вводе некорректных данных, выходе и входе в меню выполнения программы, а также при проверке всех функций. Ошибок не было обнаружено.

При запуске программы пользователь может видеть главное меню программы, которое приведено на рисунке 6.1.

Рисунок 6.1 - Интерфейс программы

Если необходимо открыть или сохранить файл, можно воспользоваться меню файл или кнопкой на панели инструментов, форма изображенная на рис. 6.2.

Рисунок 6.2 - Выбор файла


Рисунок 6.3 - Введенный и конвертированный текст

ВЫВОДЫ

В современном мире, где информационные технологии развиваются как никогда быстро, а вместе с ними и языки программирования, вопрос о переходе с одного языка высокого уровня на другой стоит на первых позициях. Невозможно найти универсальный язык, какие-то языки лучше для новичков, какие-то более быстрые. Бывает и такое, что человек не знает как реализовать программу на том или ином языке, конвертор как никто лучше может нам предоставить такую возможность.

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

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

Овладели навыками анализа программно-технической литературы, использование справочников технической литературы, а также использования стандартов. К вышеперечисленному, овладели навыками создания удобного и простого в освоении пользовательского интерфейса.

СПИСОК ЛИТЕРАТУРЫ

Введение в Java [Электронный ресурс] // Metanit.com Cайт о программировании, про создание сайтов и IT-технологии, 2012-2015. URL: http://metanit.com/java/tutorial/1.1.php. (Дата обращения: 14.11.2015).

Монахов В. И. Язык программирования Java и среда NetBeans / В.И. Монахов. - Петербург : БХВ-Петербург, 2012. - 704с.

Классификация интерфейсов [Электронный ресурс] // Интерфейсы, 2012. URL: http://www.yudenisov.narod.ru/EIS/Vol11/a000.htm. (Дата обращения: 14.11.2015).

Кен А.В. Язык программирования JAVA [Учебное пособие] / А.В. Кен. - Санкт-Петербург : Питер, 1997. - 304.

ПРИЛОЖЕНИЕ А

Листинг программы

//--------------------------------------

// Конвертор из языка Pascal в язык C++

//--------------------------------------

// Курсовой проект

// вариант 3

// группа - СКС-13

// автор - Богданова Ю.А.

// среда разработки - NetBeans

//---------------------------------------

// Программа реализует замену синтаксиса

// языка Pascal на язык C++ при объявлении

// переменных и констант, вводе операторов

// условия if и циклов for.

// --------------------------------------

//------- БИБЛИОТЕКИ -------java.awt.*;java.awt.datatransfer.DataFlavor;java.awt.datatransfer.StringSelection;java.awt.datatransfer.Transferable;java.awt.event.MouseAdapter;java.awt.event.MouseEvent;java.io.*;java.util.regex.Matcher;java.util.regex.Pattern;javax.swing.GroupLayout.Alignment;javax.swing.*;javax.swing.LayoutStyle.ComponentPlacement;javax.swing.filechooser.FileFilter;

//--------------------------

//------- ВЫПОЛНЯЮЩАЯФУНКЦИЯ -------class Konverter extends JFrame {

//------- ГЛОБАЛЬНЫЕПЕРЕМЕННЫЕ -------static final long serialVersionUID = 1L; // Default IDfinal JSplitPane splitPane = new JSplitPane(); // "раздвоенный" контейнер[] pascal_types = {"integer", "longint", "string", "byte", "boolean", "double", "real"}; // элементы для замещения[] cpp_types = {"int", "long", "string", "byte", "bool", "double", "float"}; // "заместители"

boolean check_if = false; // нужно для различия конструкции if ... от for ...JFileChooser choose; // выбор файла для сохранения

private String fileName; // название этого файлаBufferedWriter bw; // осуществление записиKonverter frame = new Konverter(); // объект нашего классаmainFlag = false;

//-------------------------------------

//------- ЗАПУСК ОСНОВНОГО ПОТОКА -------static void main(String[] args) {.invokeLater(new Runnable() {void run() {{frame = new Konverter();.setVisible(true);

} catch (Exception e) {.printStackTrace();

}

}

});

}

//---------------------------------------

//------- КОНСТРУКТОРКЛАССА -------Konverter() {

//------- ОБЪЯВЛЕНИЕПЕРЕМЕННЫХЭЛЕМЕНТОВ -------scrollPane = new JScrollPane(); // контейнеры со скролломscrollPane_1 = new JScrollPane();panel = new JPanel(); // просто контейнерJTextPane pascal_pane = new JTextPane();JTextPane cpp_pane = new JTextPane(); // текстовые поляJTextPane number_pane = new JTextPane();menuBar = new JMenuBar(); // контейнер для менюtoolBar = new JToolBar(); // панель инструментовopen_button = new JButton("");save_button = new JButton(""); clear_button = new JButton(""); // кнопки панели инструментовcopy_button = new JButton("");run_button = new JButton("Конвертировать");file_menu = new JMenu("Файл"); // менюedit_menu = new JMenu("Правка");help_menu = new JMenu("Справка");open_menuitem = new JMenuItem("Открыть"); // айтемыменюшекsave_menuitem = new JMenuItem("Сохранить");exit_menuitem = new JMenuItem("Выход");cut_menuitem = new JMenuItem("Вырезать");copy_menuitem = new JMenuItem("Копировать");past_menuitem = new JMenuItem("Вставить");delete_menuitem = new JMenuItem("Очистить поля");about_menuitem = new JMenuItem("О программе");Pascal_label = new JLabel("Pascal"); // надписиCpp_label = new JLabel("C++");file_separator = new JSeparator(); // сепараторedit_separator = new JSeparator(); // сепаратор

//----------------------------------------------------------------------------------

//------- СВОЙСТВАФОРМЫИКОНТЕЙНЕРА -------().setBackground(Color.WHITE);(Color.WHITE);groupLayout = new GroupLayout(getContentPane());.setHorizontalGroup(.createParallelGroup(Alignment.TRAILING)