Диплом, курсовая, контрольная работа
Помощь в написании студенческих работ

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

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

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

Конвертор из языка Pascal в C++ (реферат, курсовая, диплом, контрольная)

Донбасский государственный технический университет Специализированные компьютерные системы КУРСОВАЯ РАБОТА на тему: Конвертор из языка Pascal в C++

Студент III курса СКС-1 группы Богданова Ю.А.

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

г. Алчевск- 2015 год РЕФЕРАТ конвертор синтаксис массив данные Пояснительная записка содержит: 28 с., 4 рисунка, 1 блок-схема, 1 приложение.

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

Программа из одного текстового поля заменяет синтаксис одного языка высокого уровня на синтаксис другого языка и выводит преобразованный код во втором текстовом поле.

NETBEANS, C++, PASCAL, КОНСТАНТА, ПЕРЕМЕННАЯ, ФУНКЦИЯ, ЦИКЛ FOR, УСЛОВНЫЙ ОПЕРАТОР IF

Java — объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Приложения Java обычно транслируются в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине вне зависимости от компьютерной архитектуры. Дата официального выпуска — 23 мая 1995 года.

Изначально язык назывался Oak («Дуб») разрабатывался Джеймсом Гослингом для программирования бытовых электронных устройств. Впоследствии он был переименован в Java и стал использоваться для написания клиентских приложений и серверного программного обеспечения.

Достоинством подобного способа выполнения программ является полная независимость байт-кода от операционной системы и оборудования, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью технологии Java является гибкая система безопасности, в рамках которой исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером), вызывают немедленное прерывание[1].

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

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

Программы на Java транслируются в байт-код, выполняемый виртуальной машиной Java (JVM) — программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор.

Достоинством подобного способа выполнения программ является полная независимость байт-кода от операционной системы и оборудования, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью технологии Java является гибкая система безопасности, в рамках которой исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером), вызывают немедленное прерывание[2].

1.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 — граница раздела, стык, область контакта и взаимодействия) — совокупность средств и методов взаимодействия между элементами системы.

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

командный интерфейс. Он называется так потому, что в этом виде интерфейса человек подает «команды» компьютеру, а компьютер их выполняет и выдает результат человеку. Командный интерфейс реализован в виде пакетной технологии и технологии командной строки;

WIMP — интерфейс (Window — окно, Image — образ, Menu — меню, Pointer — указатель). Хотя и в этом интерфейсе машине подаются команды, но это делается «опосредственно», через графические образы. Этот вид интерфейса реализован на двух уровнях технологий: простой графический интерфейс и «чистый» WIMP интерфейс;

SILK — интерфейс (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.

Рисунок 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.

// ———————————————————

//———- БИБЛИОТЕКИ ———;

import java.awt.*;

import java.awt.datatransfer.DataFlavor;

import java.awt.datatransfer.StringSelection;

import java.awt.datatransfer.Transferable;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.io.*;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import javax.swing.GroupLayout.Alignment;

import javax.swing.*;

import javax.swing.LayoutStyle.ComponentPlacement;

import javax.swing.filechooser.FileFilter;

//—————————————

//———- ВЫПОЛНЯЮЩАЯФУНКЦИЯ ———;

public class Konverter extends JFrame {

//———- ГЛОБАЛЬНЫЕПЕРЕМЕННЫЕ ———;

private static final long serialVersionUID = 1L; // Default ID

private final JSplitPane splitPane = new JSplitPane (); // «раздвоенный» контейнер

String[] pascal_types = {" integer", «longint», «string», «byte», «boolean», «double», «real» }; // элементы для замещения

String[] cpp_types = {" int", «long», «string», «byte», «bool», «double», «float» }; // «заместители»

boolean check_if = false; // нужно для различия конструкции if … от for …

private JFileChooser choose; // выбор файла для сохранения

private String fileName; // название этого файла

private BufferedWriter bw; // осуществление записи

static Konverter frame = new Konverter (); // объект нашего класса

boolean mainFlag = false;

//——————————————————;

//———- ЗАПУСК ОСНОВНОГО ПОТОКА ———;

public static void main (String[] args) {

EventQueue.invokeLater (new Runnable () {

public void run () {

try {

Konverter frame = new Konverter ();

frame.setVisible (true);

} catch (Exception e) {

e.printStackTrace ();

}

}

});

}

//———————————————————;

//———- КОНСТРУКТОРКЛАССА ———;

public Konverter () {

//———- ОБЪЯВЛЕНИЕПЕРЕМЕННЫХЭЛЕМЕНТОВ ———;

JScrollPane scrollPane = new JScrollPane (); // контейнеры со скроллом

JScrollPane scrollPane1 = new JScrollPane ();

JPanel panel = new JPanel (); // просто контейнер

final JTextPane pascal_pane = new JTextPane ();

final JTextPane cpp_pane = new JTextPane (); // текстовые поля

final JTextPane number_pane = new JTextPane ();

JMenuBar menuBar = new JMenuBar (); // контейнер для меню

JToolBar toolBar = new JToolBar (); // панель инструментов

JButton open_button = new JButton (««);

JButton save_button = new JButton (««);

JButton clear_button = new JButton (««); // кнопки панели инструментов

JButton copy_button = new JButton (««);

JButton run_button = new JButton («Конвертировать»);

JMenu file_menu = new JMenu («Файл»); // меню

JMenu edit_menu = new JMenu («Правка»);

JMenu help_menu = new JMenu («Справка»);

JMenuItem open_menuitem = new JMenuItem («Открыть»); // айтемыменюшек

JMenuItem save_menuitem = new JMenuItem («Сохранить»);

JMenuItem exit_menuitem = new JMenuItem («Выход»);

JMenuItem cut_menuitem = new JMenuItem («Вырезать»);

JMenuItem copy_menuitem = new JMenuItem («Копировать»);

JMenuItem past_menuitem = new JMenuItem («Вставить»);

JMenuItem delete_menuitem = new JMenuItem («Очистить поля»);

JMenuItem about_menuitem = new JMenuItem («О программе»);

JLabel Pascal_label = new JLabel («Pascal»); // надписи

JLabel Cpp_label = new JLabel («C++»);

JSeparator file_separator = new JSeparator (); // сепаратор

JSeparator edit_separator = new JSeparator (); // сепаратор

//—————————————————————————————————————————

//———- СВОЙСТВАФОРМЫИКОНТЕЙНЕРА ———;

getContentPane ().setBackground (Color.WHITE);

setBackground (Color.WHITE);

GroupLayout groupLayout = new GroupLayout (getContentPane ());

groupLayout.setHorizontalGroup (

groupLayout.createParallelGroup (Alignment.TRAILING)

.addGroup (groupLayout.createSequentialGroup ()

.addContainerGap ()

.addGroup (groupLayout.createParallelGroup (Alignment.TRAILING)

.addComponent (splitPane, Alignment. LEADING, GroupLayout. PREFERRED_SIZE, 0, Short. MAX_VALUE))

.addContainerGap ())

.addComponent (panel, Alignment. LEADING, GroupLayout. DEFAULT_SIZE, 584, Short. MAX_VALUE)

);

groupLayout.setVerticalGroup (

groupLayout.createParallelGroup (Alignment.LEADING)

.addGroup (groupLayout.createSequentialGroup ()

.addComponent (panel, GroupLayout. PREFERRED_SIZE, 36, GroupLayout. PREFERRED_SIZE)

.addPreferredGap (ComponentPlacement.RELATED)

.addComponent (splitPane, GroupLayout. DEFAULT_SIZE, 235, Short. MAX_VALUE)

.addPreferredGap (ComponentPlacement.RELATED)

.addGap (7))

);

panel.setLayout (new BorderLayout (0, 0));

//—————————————————————;

//———- ОСТАЛЬНЫЕ СВОЙСТВА ———;

splitPane.setLeftComponent (scrollPane); // в основном это добавления в свой контейнер и цвет

scrollPane.setViewportView (pascal_pane);

Pascal_label.setBackground (new Color (255, 255, 224));

scrollPane.setColumnHeaderView (Pascal_label);

number_pane.setEditable (false);

scrollPane.setRowHeaderView (number_pane);

splitPane.setRightComponent (scrollPane1);

scrollPane1.setViewportView (cpp_pane);

Cpp_label.setBackground (new Color (255, 255, 255));

scrollPane1.setColumnHeaderView (Cpp_label);

setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

setBounds (370, 150, 600, 450);

getContentPane ().setLayout (groupLayout);

menuBar.setBackground (new Color (255, 255, 255));

setJMenuBar (menuBar);

file_menu.setFont (new Font («Arial», Font. PLAIN, 12));

file_menu.setBackground (new Color (255, 255, 255));

menuBar.add (file_menu);

open_menuitem.setBackground (new Color (255, 255, 255));

file_menu.add (open_menuitem);

save_menuitem.setBackground (new Color (255, 255, 255));

file_menu.add (save_menuitem);

file_menu.add (file_separator);

exit_menuitem.setBackground (new Color (255, 255, 255));

file_menu.add (exit_menuitem);

edit_menu.setFont (new Font («Arial», Font. PLAIN, 12));

menuBar.add (edit_menu);

cut_menuitem.setBackground (new Color (255, 255, 255));

edit_menu.add (cut_menuitem);

copy_menuitem.setBackground (new Color (255, 255, 255));

edit_menu.add (copy_menuitem);

past_menuitem.setBackground (new Color (255, 255, 255));

edit_menu.add (past_menuitem);

edit_menu.add (edit_separator);

delete_menuitem.setBackground (new Color (255, 255, 255));

edit_menu.add (delete_menuitem);

help_menu.setFont (new Font («Arial», Font. PLAIN, 12));

menuBar.add (help_menu);

about_menuitem.setBackground (new Color (255, 255, 255));

help_menu.add (about_menuitem);

toolBar.setBackground (new Color (159, 224, 254));

toolBar.setFloatable (false);

panel.add (toolBar, BorderLayout. CENTER);

pascal_pane.setFont (new Font («Tahoma», Font. PLAIN, 12));

cpp_pane.setFont (new Font («Tahoma», Font. PLAIN, 12));

number_pane.setFont (new Font («Tahoma», Font. PLAIN, 12));

open_button.setIcon (new ImageIcon (Konverter.class.getResource («img/open.png»)));

toolBar.add (open_button);

save_button.setIcon (new ImageIcon (Konverter.class.getResource («img/save.png»)));

toolBar.add (save_button);

clear_button.setIcon (new ImageIcon (Konverter.class.getResource («img/clean.png»)));

toolBar.add (clear_button);

copy_button.setIcon (new ImageIcon (Konverter.class.getResource («img/copy.png»)));

copy_button.setSelectedIcon (new ImageIcon (Konverter.class.getResource («img/open.png»)));

toolBar.add (copy_button);

run_button.setIcon (new ImageIcon (Konverter.class.getResource («img/run24.png»)));

toolBar.add (run_button);

splitPane.setBackground (new Color (255, 255, 255));

splitPane.setResizeWeight (0.5);

//—————————————————————;

//———- СОБЫТИЯ МЕНЮ ———;

open_button.addMouseListener (new MouseAdapter () { // открытиефайла

@Override

public void mouseClicked (MouseEvent arg0){

choose = new JFileChooser ();

choose.setDialogTitle («Выберитефайл»);

choose.setFileSelectionMode (JFileChooser.FILES_ONLY);

int res = choose. showOpenDialog (Konverter.this);

if (res == JFileChooser. APPROVE_OPTION)

{

String fileName = choose. getSelectedFile ().toString ();

try

{

BufferedReader fr = new BufferedReader (new FileReader (fileName));

pascal_pane.read (fr, false);

fr.close ();

}

catch (FileNotFoundException ex) {}

catch (IOException ea) {}

}

}

});

save_button.addMouseListener (new MouseAdapter () { // записьфайла

@Override

public void mouseClicked (MouseEvent e) {

choose = new JFileChooser ();

choose.addChoosableFileFilter (new TextFileFilter ());

choose.setDialogTitle («Выберитефайл»);

choose.setFileSelectionMode (JFileChooser.FILES_ONLY);

int res = choose. showSaveDialog (Konverter.this);

if (res == JFileChooser. APPROVE_OPTION)

{

fileName = choose. getSelectedFile ().toString ();

if (!fileName.endsWith («.cpp»))

fileName += «.cpp» ;

try

{

bw = new BufferedWriter (new FileWriter (fileName));

cpp_pane.write (bw);

bw.close ();

}

catch (FileNotFoundException ex) {}

catch (IOException ea) {}

}

}

});

clear_button.addMouseListener (new MouseAdapter () { // очисткаполей

@Override

public void mouseClicked (MouseEvent e) {

number_pane.setText (null);

pascal_pane.setText (null);

cpp_pane.setText (null);

}

});

copy_button.addMouseListener (new MouseAdapter () { // копировать

@Override

public void mouse Clicked (MouseEvent e) {

StringSelection stringSelection = new StringSelection (pascal_pane.getSelectedText ());

Toolkit.getDefaultToolkit ().getSystemClipboard ().setContents (stringSelection, null);

}

});

open_menuitem.addMouseListener (new MouseAdapter () // открытие файла

{

@Override

public void mousePressed (MouseEvent arg0) {

choose = new JFileChooser ();

choose.setDialogTitle («Выберитефайл»);

choose.setFileSelectionMode (JFileChooser.FILES_ONLY);

int res = choose. showOpenDialog (Konverter.this);

if (res == JFileChooser. APPROVE_OPTION) {

String fileName = choose. getSelectedFile ().toString ();

try {

BufferedReader fr = new BufferedReader (new FileReader (fileName));

pascal_pane.read (fr, false);

fr.close ();

} catch (FileNotFoundException ex) {

} catch (IOException ea) {

}

}

}

});

save_menuitem.add Mouse Listener (new MouseAdapter () // сохранить документ

{

@Override

public void mousePressed (MouseEvent e) {

choose = new JFileChooser ();

choose.addChoosableFileFilter (new TextFileFilter ());

choose.setDialogTitle («Выберитефайл»);

choose.setFileSelectionMode (JFileChooser.FILES_ONLY);

int res = choose. showSaveDialog (Konverter.this);

if (res == JFileChooser. APPROVE_OPTION) {

fileName = choose. getSelectedFile ().toString ();

if (!fileName.endsWith («.cpp»))

fileName += «.cpp» ;

try {

bw = new BufferedWriter (new FileWriter (fileName));

cpp_pane.write (bw);

bw.close ();

} catch (FileNotFoundException ex) {

} catch (IOException ea) {

}

}

}

});

delete_menuitem.addMouseListener (new MouseAdapter () // очистить поля

{

@Override

public void mousePressed (MouseEvent e) {

number_pane.setText (null);

pascal_pane.setText (null);

cpp_pane.setText (null);

}

});

exit_menuitem.addMouseListener (new MouseAdapter () // выход

{

@Override

public void mousePressed (MouseEvent e) {

System.exit (0);

}

});

copy_menuitem.addMouseListener (new MouseAdapter () // копировать

{

@Override

public void mousePressed (MouseEvent e) {

StringSelection stringSelection = new StringSelection (pascal_pane.getSelectedText ());

Toolkit.getDefaultToolkit ().getSystemClipboard ().setContents (stringSelection, null);

}

});

past_menuitem.addMouseListener (new MouseAdapter () // вставить

{

@Override

public void mouse Pressed (MouseEvent e) {

String clip = «» ;

Transferable trans = Toolkit. getDefaultToolkit ().getSystemClipboard ().getContents (null);

try {

clip = (String) trans. getTransferData (DataFlavor.stringFlavor);

} catch (Exception exc) {

}

pascal_pane.replaceSelection (clip);

}

});

cut_menuitem.addMouseListener (new MouseAdapter () // вырезать

{

@Override

public void mousePressed (MouseEvent e) {

StringSelection stringSelection = new StringSelection (pascal_pane.getSelectedText ());

pascal_pane.replaceSelection (««);

Toolkit.getDefaultToolkit ().getSystemClipboard ().setContents (stringSelection, null);

}

});

about_menuitem.addMouseListener (new MouseAdapter () // О программе

{

@Override

public void mousePressed (MouseEvent e) {

JOptionPane.showMessageDialog (frame, «Программа реализует замену синтаксисаn» +

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

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

" условия if и циклов for. nn" +

" Курсовой проектn" +

" вариант 3n" +

" группа — СКС-13n" +

" автор — Богданова Ю.А.n");

}

});

//——————————————

//———- СОБЫТИЕ КНОПКИ ———;

run_button.addMouseListener (new MouseAdapter () {

@Override

public void mousePressed (MouseEvent e) {

String[] errors_of_string = pascal_pane.getText ().split («n»); // нужен для нахождения ошибо кв тексте

char bukva = 0; // проверяет последний символ строки на наличие ошибки

String errors = «»; // записывает номера строк с ошибками

number_pane.setText (null); // панель с количеством введенных строк

int cntBegin = 0;

int cntEnd = 0;

for (int i = 0; i < errors_of_string.length; i++) // определение строк с ошибками

{

try {

bukva = errors_of_string[i]. toCharArray ()[errors_of_string[i].length () — 2]; // -2 потомучтовконце

if (bukva ≠ 'n' && bukva ≠ 'd' && bukva ≠ 'o' && bukva ≠ ';' && bukva ≠ ' ') // каждой строки есть «n»

{

errors += i + 1 + «, «; // запись номеров строк

}

} catch (Exception e1) {

}

if (errors_of_string[i]. toLowerCase ().indexOf («begin») ≠ -1)

cntBegin += 1;

if (errors_of_string[i]. toLowerCase ().indexOf («end») ≠ -1)

cntEnd += 1;

}

if (cntBegin ≠ cntEnd)

JOptionPane.showMessageDialog (frame, «Количество Begin не соответстует количеству End!»);

if (errors ≠ «») { // если допустили ошибку, то выводит сообщение

JOptionPane.showMessageDialog (frame, «Вы допустили ошибку в строках с номерами: «+ errors. substring (0, errors. length () — 2));

cpp_pane.setText (null); // и очищаем правое поле

} else {

cpp_pane.setText (null); // и очищаем правое поле

String[] pascal_text = pascal_pane.getText ().split («;»); // разделяем текст на блоки разделенные «;»

mainFlag = true;

for (int i = 0; i < pascal_text.length; i++) // каждый блок отправляем на «обработку» в спец. функцию

{

pascal_text[i] = containsWords (pascal_text[i]); // присваиваем обработанные данные

cpp_pane.setText (cpp_pane.getText () + pascal_text[i]); // и выводим на правую панель

}

}

number_pane.setText (null); // очищаем панель нумерации строк, чтобы всегда начиналась с 1

for (int i = 1; i <= errors_of_string.length; i++) // в зависимости от количества строк в левом поле

{

number_pane.setText (number_pane.getText () + i + «:n»); // на считвываем нумерацию

}

}

String containsWords (String text) // функция обработки (перевода) данных

{

text = text. toLowerCase ();

Pattern if_searth = Pattern. compile («if»); // ищем слово «if»

Matcher if_find = if_searth.matcher (text); // в остправленном блоке

Pattern for_searth = Pattern. compile («for»); // ищем слово «for»

Matcher for_find = for_searth.matcher (text); // всё там же

if (mainFlag){

if (text.startsWith («begin»)){

text = text. replaceAll («beginrn», «»);

text = text. replaceAll («beginn», «»);

text = text. replaceAll («begin», «»);

}

else

mainFlag = false;

}

if (if_find.find () == true) // если нашли «if»

{

check_if = true; // см. строки 446−457

} else // если не нашли

{

String[] pascal_set_type = text. split («:»); // разделяем, если возможно, блок на части по этому знаку

for (int i = 0; i < pascal_types.length; i++) // см. 50 строку

{

Pattern pattern = Pattern. compile (pascal_types[i]); // ищемкаждыйизэтихэлементов

Matcher matcher;

if (pascal_set_type.length > 1)

matcher = pattern. matcher (pascal_set_type[1]); // в правой части объекта (т.е. справа от знака «:»)

else

matcher = pattern. matcher (pascal_set_type[0]); // в левой части объекта (т.е. слева от знака «:»)

Pattern const_searth = Pattern. compile («const»); // ищемслово «const»

Matcher const_find = const_searth.matcher (pascal_set_type[0]); // тамже

if (matcher.find () == true) // если нашли «integer», «longint», «string» … или «real»

{

if (const_find.find () == true) // если нашли слово «const»

{

if (pascal_set_type.length >= 2) // если у нас строка типа «const x: Integer = 5;»

{

pascal_set_type[1] = pascal_set_type[1]. replaceAll (pascal_types[i], «»); // то убераем «Integer», «Longint» … ит.д.

pascal_set_type[0] = pascal_set_type[0]. replaceAll («const», «const «+ cpp_types[i] + ««);

text = pascal_set_type[0] + pascal_set_type[1] + «;»; // и выводим: const int x = 5;

} // знак равно и часть, что была справа, например «6»

else // если у нас строка типа «x: Integer;»

{

pascal_set_type[1] = pascal_set_type[1]. replaceAll (pascal_types[i], «»); // тоубераем «integer», «longint» … ит.д.

pascal_set_type[0] = pascal_set_type[0]. replaceAll («const», «const «+ cpp_types[i] + ««);

text = pascal_set_type[0] + «;»; // выводим: const int x;

}

} else if (for_find.find () == true) // если нашли слово «for»

{

check_if = false;// см. строки 460−466

}

else // если не нашли слова «for», «const» и «if», значит остаются обычные объявления переменных

{

if (pascal_set_type.length >= 2) // если у нас строка типа «x: Integer = 6;»

{

pascal_set_type[1] = pascal_set_type[1]. replaceAll (pascal_types[i], «»); // заменяемтипыданныхна «»

text = cpp_types[i] + «» + pascal_set_type[0] + pascal_set_type[1] + «;»; // выводим результат как выше

}

}

}

}

}

if (check_if == true) // этодля «if»

{

// if a = 5 then… -> if (a == 5)…

String[] if_parts = text. split («then»);

if_parts[0] = if_parts[0]. replaceAll («if», «if («);

if_parts[0] = if_parts[0]. replaceAll («=», «==»);

if_parts[0] = if_parts[0]. replaceAll («<>», «≠»);

if_parts[0] = if_parts[0]. replaceAll («and», «&&»);

if_parts[0] = if_parts[0]. replaceAll («or», «||»);

if_parts[0] = if_parts[0]. replaceAll («not», «!»);

text = if_parts[0] + «) «;

if (if_parts.length >= 2){

String[] else_parts = if_parts[1]. split («else»); // обрабатываем else

if (else_parts.length >= 2){

if_parts[1] = else_parts[0]. trim () + «; else» + else_parts[1];

}

text = text + if_parts[1] + «;» ;

}

check_if = false;

} else // этодля «for»

{

// for i := 1 to N do… -> for (i = 1; i < n; i++)…

String[] assign = text. split («:=»);

assign[0] = assign[0]. replaceAll («for «, «»).trim (); // получаем переменную цикла i

text = text. replaceAll («to», «; «+ assign[0] + «<»);// получаем; i < n

text = text. replaceAll («do», «; «+ assign[0] + «++)»); // получаем; i++)

text = text. replaceAll («for «, «for («);

if (text.endsWith («;») == false && text. trim ().equals (««) == false)

text = text + «;» ;

}

text = text. replaceAll («:=», «=»); // а это заменяем всегда и везде

text = text. replaceAll («begin», «\{»);

text = text. replaceAll («end;», «\}»);

text = text. replaceAll («end.», «\}»);

text = text. replaceAll («end», «\}»);

text = text. replaceAll («div», «\/»);

text = text. replaceAll («mod», «\%»);

text = text. replaceAll («};», «\}»);

text = text. replaceAll («var», «»);

String[] writeln_parts = text. split («writeln»); // заменяем WriteLn на cout

// WriteLn (xyz) -> cout << xyz << endl

if (writeln_parts.length >= 2){

text = writeln_parts[0];

writeln_parts[1] = writeln_parts[1]. replaceAll («\(», «<< «);

writeln_parts[1] = writeln_parts[1]. replaceAll («\)», «<< endl»);

text = text + «cout» + writeln_parts[1];

}

String[] write_parts = text. split («write»); // заменяем Write на cout

// Write (xyz) -> cout << xyz

if (write_parts.length >= 2){

text = write_parts[0];

write_parts[1] = write_parts[1]. replaceAll («\(», «<< «);

write_parts[1] = write_parts[1]. replaceAll («\)», «»);

text = text + «cout» + write_parts[1];

}

if (mainFlag){

text = «void main ()n{n» + text; // добавляем main () C++

mainFlag = false;

}

returntext;// возвращаем обработанный блок

}

});

}

}

class TextFileFilter extends FileFilter // нужно для сохранения

{

public boolean accept (java.io.File file) {

if (file.isDirectory ()) {

return true;

}

return (file.getName ().endsWith («cpp»));

}

public String getDescription () {

return «C++ files (*.cpp)» ;

}

}

Показать весь текст
Заполнить форму текущей работой