.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)
);.setVerticalGroup(.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))
);.setLayout(new BorderLayout(0, 0));
//-------------------------------------------
//------- ОСТАЛЬНЫЕ СВОЙСТВА -------.setLeftComponent(scrollPane); // в основном это добавления в свой контейнер и цвет
scrollPane.setViewportView(pascal_pane);_label.setBackground(new Color(255, 255, 224));.setColumnHeaderView(Pascal_label);_pane.setEditable(false);.setRowHeaderView(number_pane);.setRightComponent(scrollPane_1);_1.setViewportView(cpp_pane);_label.setBackground(new Color(255, 255, 255));_1.setColumnHeaderView(Cpp_label);(JFrame.EXIT_ON_CLOSE);(370, 150, 600, 450);().setLayout(groupLayout);.setBackground(new Color(255, 255, 255));(menuBar);_menu.setFont(new Font("Arial", Font.PLAIN, 12));_menu.setBackground(new Color(255, 255, 255));.add(file_menu);_menuitem.setBackground(new Color(255, 255, 255));_menu.add(open_menuitem);_menuitem.setBackground(new Color(255, 255, 255));_menu.add(save_menuitem);_menu.add(file_separator);_menuitem.setBackground(new Color(255, 255, 255));_menu.add(exit_menuitem);_menu.setFont(new Font("Arial", Font.PLAIN, 12));.add(edit_menu);_menuitem.setBackground(new Color(255, 255, 255));_menu.add(cut_menuitem);_menuitem.setBackground(new Color(255, 255, 255));_menu.add(copy_menuitem);_menuitem.setBackground(new Color(255, 255, 255));_menu.add(past_menuitem);_menu.add(edit_separator);_menuitem.setBackground(new Color(255, 255, 255));_menu.add(delete_menuitem);_menu.setFont(new Font("Arial", Font.PLAIN, 12));.add(help_menu);_menuitem.setBackground(new Color(255, 255, 255));_menu.add(about_menuitem);.setBackground(new Color(159, 224, 254));.setFloatable(false);.add(toolBar, BorderLayout.CENTER);_pane.setFont(new Font("Tahoma", Font.PLAIN, 12));_pane.setFont(new Font("Tahoma", Font.PLAIN, 12));_pane.setFont(new Font("Tahoma", Font.PLAIN, 12));_button.setIcon(new ImageIcon(Konverter.class.getResource("img/open.png")));.add(open_button);_button.setIcon(new ImageIcon(Konverter.class.getResource("img/save.png")));.add(save_button);_button.setIcon(new ImageIcon(Konverter.class.getResource("img/clean.png")));.add(clear_button);_button.setIcon(new ImageIcon(Konverter.class.getResource("img/copy.png")));_button.setSelectedIcon(new ImageIcon(Konverter.class.getResource("img/open.png")));.add(copy_button);_button.setIcon(new ImageIcon(Konverter.class.getResource("img/run24.png")));.add(run_button);.setBackground(new Color(255, 255, 255));.setResizeWeight ( 0.5 );
//-------------------------------------------
//------- СОБЫТИЯ МЕНЮ -------_button.addMouseListener(new MouseAdapter() { // открытиефайла
@Overridevoid mouseClicked(MouseEvent arg0){= new JFileChooser();.setDialogTitle("Выберитефайл");.setFileSelectionMode(JFileChooser.FILES_ONLY);res = choose.showOpenDialog(Konverter.this);(res == JFileChooser.APPROVE_OPTION)
{fileName = choose.getSelectedFile().toString();
{
BufferedReader fr = new BufferedReader(new FileReader(fileName));_pane.read(fr, false);.close();
} (FileNotFoundException ex) {}(IOException ea) {}
}
});_button.addMouseListener(new MouseAdapter() { // записьфайла
@Overridevoid mouseClicked(MouseEvent e) {= new JFileChooser();.addChoosableFileFilter(new TextFileFilter());.setDialogTitle("Выберитефайл");.setFileSelectionMode(JFileChooser.FILES_ONLY);res = choose.showSaveDialog(Konverter.this);(res == JFileChooser.APPROVE_OPTION)
{= choose.getSelectedFile().toString();(!fileName.endsWith(".cpp")) += ".cpp";
{= new BufferedWriter( new FileWriter(fileName));_pane.write(bw);.close();
} (FileNotFoundException ex) {}(IOException ea) {}
}
}
});_button.addMouseListener(new MouseAdapter() { // очисткаполей
@Overridevoid mouseClicked(MouseEvent e) {_pane.setText(null);_pane.setText(null);_pane.setText(null);
}
});_button.addMouseListener(new MouseAdapter() { // копировать
@Overridevoid mouse Clicked (MouseEvent e) {stringSelection = new StringSelection(pascal_pane.getSelectedText());.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
}
});_menuitem.addMouseListener(new MouseAdapter() // открытие файла
{
@Overridevoid mousePressed(MouseEvent arg0) {= new JFileChooser();.setDialogTitle("Выберитефайл");.setFileSelectionMode(JFileChooser.FILES_ONLY);res = choose.showOpenDialog(Konverter.this);(res == JFileChooser.APPROVE_OPTION) {fileName = choose.getSelectedFile().toString();{fr = new BufferedReader(new FileReader(fileName));_pane.read(fr, false);.close();
} catch (FileNotFoundException ex) {
} catch (IOException ea) {
}
}
}
});_menuitem.add Mouse Listener(new MouseAdapter() // сохранить документ
{
@Overridevoid mousePressed(MouseEvent e) {= new JFileChooser();.addChoosableFileFilter(new TextFileFilter());.setDialogTitle("Выберитефайл");.setFileSelectionMode(JFileChooser.FILES_ONLY);res = choose.showSaveDialog(Konverter.this);(res == JFileChooser.APPROVE_OPTION) {= choose.getSelectedFile().toString();(!fileName.endsWith(".cpp")) += ".cpp"; {= new BufferedWriter(new FileWriter(fileName));_pane.write(bw);.close();
} catch (FileNotFoundException ex) {
} catch (IOException ea) {
}
}
}
});_menuitem.addMouseListener(new MouseAdapter() // очистить поля
{
@Overridevoid mousePressed(MouseEvent e) {_pane.setText(null);_pane.setText(null);_pane.setText(null);
}
});_menuitem.addMouseListener(new MouseAdapter() // выход
{
@Overridevoid mousePressed(MouseEvent e) {.exit(0);
}
});
_menuitem.addMouseListener(new MouseAdapter() // копировать
{
@Overridevoid mousePressed(MouseEvent e) {stringSelection = new StringSelection(pascal_pane.getSelectedText());.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
}
});_menuitem.addMouseListener(new MouseAdapter() // вставить
{
@Overridevoid mouse Pressed (MouseEvent e) {clip = "";trans = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);{= (String) trans.getTransferData(DataFlavor.stringFlavor);
} catch (Exception exc) {
}_pane.replaceSelection(clip);
}
});_menuitem.addMouseListener(new MouseAdapter() // вырезать
{
@Overridevoid mousePressed(MouseEvent e) {stringSelection = new StringSelection(pascal_pane.getSelectedText());_pane.replaceSelection("");.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
}
});_menuitem.addMouseListener(new MouseAdapter() // О программе
{
@Overridevoid mousePressed(MouseEvent e) {.showMessageDialog(frame, "Программа реализует замену синтаксиса\n" +
"языка Pascal на язык C++ при объявлении\n" +
"переменных и констант, вводе операторов \n" +
"условия if и циклов for.\n\n" +
"Курсовой проект\n" +
"вариант 3\n" +
"группа - СКС-13\n" +
"автор - Богданова Ю.А.\n");
}
});
//----------------------------
//------- СОБЫТИЕ КНОПКИ -------_button.addMouseListener(new MouseAdapter() {
@Overridevoid mousePressed(MouseEvent e) {[] errors_of_string = pascal_pane.getText().split("\n"); // нужен для нахождения ошибо кв тексте
char bukva = 0; // проверяет последний символ строки на наличие ошибки errors = ""; // записывает номера строк с ошибками_pane.setText(null); // панель с количеством введенных строк
int cntBegin = 0;cntEnd = 0;(int i = 0; i < errors_of_string.length; i++) // определение строк с ошибками
{+= i + 1 + ", "; // запись номеров строк
}
} catch (Exception e1) {
}(errors_of_string[i].toLowerCase().indexOf("begin") != -1)+= 1;(errors_of_string[i].toLowerCase().indexOf("end") != -1)+= 1;
}(cntBegin != cntEnd).showMessageDialog(frame, "Количество Begin не соответстует количеству End!");
if (errors != "") { // если допустили ошибку, то выводит сообщение.showMessageDialog(frame, "Вы допустили ошибку в строках с номерами: " + errors.substring(0, errors.length() - 2));_pane.setText(null); // и очищаем правое поле
} else {_pane.setText(null); // и очищаем правое поле[] pascal_text = pascal_pane.getText().split(";"); // разделяем текст на блоки разделенные ";"= true; (int i = 0; i < pascal_text.length; i++) // каждый блок отправляем на "обработку" в спец. функцию
{_text[i] = containsWords(pascal_text[i]); // присваиваем обработанные данные_pane.setText(cpp_pane.getText() + pascal_text[i]); // и выводим на правую панель
}
}_pane.setText(null); // очищаем панель нумерации строк, чтобы всегда начиналась с 1(int i = 1; i <= errors_of_string.length; i++) // в зависимости от количества строк в левом поле
{_pane.setText(number_pane.getText() + i + ":\n"); // на считвываем нумерацию
}
}containsWords(String text) // функция обработки (перевода) данных
{= text.toLowerCase();if_searth = Pattern.compile("if"); // ищем слово "if"if_find = if_searth.matcher(text); // в остправленном блокеfor_searth = Pattern.compile("for"); // ищем слово "for"for_find = for_searth.matcher(text); // всё там же(mainFlag){(text.startsWith("begin")){= text.replaceAll("begin\r\n", "");= text.replaceAll("begin\n", "");= text.replaceAll("begin", "");
}= false;
}(if_find.find() == true) // если нашли "if"
{_if = true; // см. строки 446-457
} else // если не нашли
{[] pascal_set_type = text.split(":"); // разделяем, если возможно, блок на части по этому знаку
for (int i = 0; i < pascal_types.length; i++) // см. 50 строку
{pattern = Pattern. compile(pascal_types[i]); // ищемкаждыйизэтихэлементовmatcher;(pascal_set_type.length > 1 )
matcher = pattern.matcher(pascal_set_type[1]); // в правой части объекта (т.е. справа от знака ":")
else = pattern.matcher(pascal_set_type[0]); // в левой части объекта (т.е. слева от знака ":")
Pattern const_searth = Pattern.compile("const"); // ищемслово "const"const_find = const_searth.matcher(pascal_set_type[0]); // тамже(matcher.find() == true) // если нашли "integer", "longint", "string" ... или "real"
{(const_find.find() == true) // если нашли слово "const"
{(pascal_set_type.length >= 2) // если у нас строка типа "const x: Integer = 5;"
{_set_type[1] = pascal_set_type[1].replaceAll(pascal_types[i], ""); // то убераем "Integer", "Longint" ... ит.д._set_type[0] = pascal_set_type[0].replaceAll("const", "const "+ cpp_types[i] + " ");= pascal_set_type[0] + pascal_set_type[1] + ";"; // и выводим: const int x = 5;
} // знак равно и часть, что была справа, например " 6"// если у нас строка типа "x: Integer;"
{_set_type[1] = pascal_set_type[1].replaceAll(pascal_types[i], ""); // тоубераем "integer", "longint" ... ит.д._set_type[0] = pascal_set_type[0].replaceAll("const", "const "+ cpp_types[i] + " ");= pascal_set_type[0] + ";"; // выводим: const int x;
}
} else if (for_find.find() == true) // если нашли слово "for"
{_if = false;// см. строки 460-466
} // если не нашли слова "for", "const" и "if", значит остаются обычные объявления переменных
{(pascal_set_type.length >= 2) // если у нас строка типа "x: Integer = 6;"
{_set_type[1] = pascal_set_type[1].replaceAll(pascal_types[i], ""); // заменяемтипыданныхна ""= cpp_types[i] + " " + pascal_set_type[0] + pascal_set_type[1] + ";"; // выводим результат как выше
}
}
}
}
}(check_if == true) // этодля "if"
{
// if a = 5 then... -> if(a == 5)...[] if_parts = text.split("then");_parts[0] = if_parts[0].replaceAll("if", "if (");_parts[0] = if_parts[0].replaceAll("=", "==");_parts[0] = if_parts[0].replaceAll("<>", "!=");_parts[0] = if_parts[0].replaceAll("and", "&&");_parts[0] = if_parts[0].replaceAll("or", "||");_parts[0] = if_parts[0].replaceAll("not", "!");= if_parts[0] + ") ";(if_parts.length >= 2){[] else_parts = if_parts[1].split("else"); // обрабатываем else(else_parts.length >= 2){_parts[1] = else_parts[0].trim() + "; else" + else_parts[1];
}= text + if_parts[1] + ";";
}_if = false;
} else // этодля "for"
{
// for i := 1 to N do... -> for(i = 1; i < n ; i++)...[] assign = text.split(":="); [0] = assign[0].replaceAll("for ", "").trim(); // получаем переменную цикла i= text.replaceAll("to", "; " + assign[0] + " <");// получаем ; i < n= text.replaceAll("do", "; " + assign[0] + "++ )" ); // получаем ; i++)= text.replaceAll("for ", "for( ");(text.endsWith(";") == false && text.trim().equals("") == false)
text = text + ";";
}= text.replaceAll(":=", "="); // а это заменяем всегда и везде
text = text.replaceAll("begin", "\\{");= text.replaceAll("end;", "\\}");= text.replaceAll("end.", "\\}");= text.replaceAll("end", "\\}");= text.replaceAll("div", "\\/");= text.replaceAll("mod", "\\%");= text.replaceAll("};", "\\}");= text.replaceAll("var", "");[] writeln_parts = text.split("writeln"); // заменяем WriteLn на cout
// WriteLn(xyz) -> cout << xyz << endl(writeln_parts.length >= 2){= writeln_parts[0];_parts[1] = writeln_parts[1].replaceAll("\\(", " << ");_parts[1] = writeln_parts[1].replaceAll("\\)", " << endl");= text + "cout" + writeln_parts[1];
}[] write_parts = text.split("write"); // заменяем Write на cout
// Write(xyz) -> cout << xyz(write_parts.length >= 2){= write_parts[0];_parts[1] = write_parts[1].replaceAll("\\(", " << ");_parts[1] = write_parts[1].replaceAll("\\)", "");= text + "cout" + write_parts[1];
}(mainFlag){= "void main()\n{\n" + text; // добавляем main() C++= false;
};// возвращаем обработанный блок
}
});
}
}TextFileFilter extends FileFilter // нужно для сохранения
{boolean accept(java.io.File file) {(file.isDirectory()) {true;
}(file.getName().endsWith("cpp"));
}String getDescription() {"C++ files (*.cpp)";
}
}