Added mnimize button

This commit is contained in:
2017-06-12 11:19:24 +02:00
parent b84faa8858
commit c5efc7ca9e
5 changed files with 91 additions and 25 deletions
+1 -1
View File
@@ -73,7 +73,7 @@ public class RegExp extends Importable{
// System.out.println("Toreplace is " + toReplace.toString()); // System.out.println("Toreplace is " + toReplace.toString());
toProcessAfter = toProcessAfter.replace(toReplace, replaceWith); toProcessAfter = toProcessAfter.replace(toReplace, replaceWith);
processedParantheses.add(stringNaarRegExp(sub, new RegExp(), null)); processedParantheses.add(stringNaarRegExp(sub, r, null));
} }
} }
+29 -14
View File
@@ -10,14 +10,14 @@ public class ThompsonConverter {
public static NDFA<String> convert(RegExp regex) public static NDFA<String> convert(RegExp regex)
{ {
Character [] characters = {'a', 'b'}; Character [] characters = {'a', 'b'};
NDFA generated = new NDFA<String>(characters); NDFA<String> generated = new NDFA<String>(characters);
convertStatement(regex, generated); convertStatement(regex, generated);
return generated; return generated;
} }
private static void convertStatement(RegExp regex, NDFA automata) private static void convertStatement(RegExp regex, NDFA<String> automata)
{ {
switch(regex.operator) switch(regex.operator)
{ {
@@ -25,8 +25,8 @@ public class ThompsonConverter {
//Links //Links
convertStatement(regex.links, automata); convertStatement(regex.links, automata);
String endLink1 = (String) automata.eindStates.first(); String endLink1 = automata.eindStates.first();
String beginLink1 = (String) automata.beginStates.first(); String beginLink1 = automata.beginStates.first();
//Repeat and skip //Repeat and skip
automata.addTransition(new Transition(endLink1, Transition.EPSILON, beginLink1)); automata.addTransition(new Transition(endLink1, Transition.EPSILON, beginLink1));
@@ -42,8 +42,8 @@ public class ThompsonConverter {
//Links //Links
convertStatement(regex.links, automata); convertStatement(regex.links, automata);
String endLink2 = (String) automata.eindStates.first(); String endLink2 = automata.eindStates.first();
String beginLink2 = (String) automata.beginStates.first(); String beginLink2 = automata.beginStates.first();
//New states //New states
String start2 = getState(); String start2 = getState();
@@ -66,13 +66,13 @@ public class ThompsonConverter {
//Links //Links
convertStatement(regex.links, automata); convertStatement(regex.links, automata);
String topEnd = (String) automata.eindStates.first(); String topEnd = automata.eindStates.first();
String topBegin = (String) automata.beginStates.first(); String topBegin = automata.beginStates.first();
//Rechts //Rechts
convertStatement(regex.rechts, automata); convertStatement(regex.rechts, automata);
String bottomBegin = (String) automata.beginStates.first(); String bottomBegin = automata.beginStates.first();
String bottomEnd = (String) automata.eindStates.first(); String bottomEnd = automata.eindStates.first();
//New states //New states
String start3 = getState(); String start3 = getState();
@@ -96,13 +96,13 @@ public class ThompsonConverter {
//Links //Links
convertStatement(regex.links, automata); convertStatement(regex.links, automata);
String endLink = (String) automata.eindStates.first(); String endLink = automata.eindStates.first();
String newBeginLink = (String) automata.beginStates.first(); String newBeginLink = automata.beginStates.first();
//Rechts //Rechts
convertStatement(regex.rechts, automata); convertStatement(regex.rechts, automata);
String beginLink = (String) automata.beginStates.first(); String beginLink = automata.beginStates.first();
String newEndLink = (String) automata.eindStates.first(); String newEndLink = automata.eindStates.first();
//Link both //Link both
automata.addTransition(new Transition(endLink, Transition.EPSILON, beginLink)); automata.addTransition(new Transition(endLink, Transition.EPSILON, beginLink));
@@ -115,11 +115,26 @@ public class ThompsonConverter {
break; break;
case EEN: case EEN:
char[] s = regex.characters.toCharArray(); char[] s = regex.characters.toCharArray();
automata.clearBeginStates(); automata.clearBeginStates();
automata.clearEindStates(); automata.clearEindStates();
if(regex.characters.length() <= 0)
{
String state1 = getState();
String state2 = getState();
Transition<String> t = new Transition<String>(state1, Transition.EPSILON, state2);
automata.addTransition(t);
automata.defineAsStartState(state1);
automata.defineAsEndState(state2);
break;
}
String prevState = getState(); String prevState = getState();
String newState = ""; String newState = "";
automata.defineAsStartState(prevState); automata.defineAsStartState(prevState);
+51 -4
View File
@@ -1,5 +1,6 @@
package com.imegumii.ui; package com.imegumii.ui;
import com.imegumii.*;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
@@ -18,20 +19,20 @@ public class GraphPanel extends JPanel {
private String name; private String name;
private File imageLocation; private File imageLocation;
private String export; private Automata<String> automata;
public String getName() public String getName()
{ {
return name; return name;
} }
public GraphPanel(String name, File f, String export) public GraphPanel(String name, File f, Automata<String> automata)
{ {
super(new BorderLayout()); super(new BorderLayout());
this.name = name; this.name = name;
this.imageLocation = f; this.imageLocation = f;
this.export = export; this.automata = automata;
this.add(new GraphImagePanel(imageLocation), BorderLayout.CENTER); this.add(new GraphImagePanel(imageLocation), BorderLayout.CENTER);
@@ -66,7 +67,7 @@ public class GraphPanel extends JPanel {
PrintWriter w = null; PrintWriter w = null;
try { try {
w = new PrintWriter(file); w = new PrintWriter(file);
w.print(export); w.print(automata.getTransitions());
w.flush(); w.flush();
w.close(); w.close();
StatusPanel.Instance().setStatus("Success: " + filename); StatusPanel.Instance().setStatus("Success: " + filename);
@@ -101,7 +102,53 @@ public class GraphPanel extends JPanel {
} }
}); });
JButton minimizeButton = new JButton("Minimize graph");
minimizeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Kaas");
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(automata.type);
if(automata.type == Importable.Type.NDFA)
{
StatusPanel.Instance().setStatus("Converting to DFA " + name, 20);
DFA<String> convert = ((NDFA<String>) automata).toDFA();
StatusPanel.Instance().setStatus("Generating image for DFA " + name, 30);
Graph.generateImage(convert, "cdfa." + name);
TabPanel.Instance().addGraph("DFA: " + name, new File("images/cdfa." + name), convert);
StatusPanel.Instance().setStatus("Minimizing cdfa." + name, 50);
DFA<String> mini = convert.minimaliseerHopcroft();
StatusPanel.Instance().setStatus("Generating minimized image", 70);
Graph.generateImage(mini, "mcdfa." + name);
TabPanel.Instance().addGraph("DFA: mcdfa." + name, new File("images/mcdfa." + name), mini);
StatusPanel.Instance().setStatus("Done", 100);
}
}
}).start();
}
});
buttonPanel.add(Box.createHorizontalGlue()); buttonPanel.add(Box.createHorizontalGlue());
buttonPanel.add(minimizeButton);
buttonPanel.add(Box.createRigidArea(new Dimension(10, 0)));
buttonPanel.add(exportImage); buttonPanel.add(exportImage);
buttonPanel.add(Box.createRigidArea(new Dimension(10,0))); buttonPanel.add(Box.createRigidArea(new Dimension(10,0)));
buttonPanel.add(exportData); buttonPanel.add(exportData);
+6 -4
View File
@@ -70,7 +70,7 @@ public class InputPanel extends JPanel {
Graph.generateImage(ndfa, name); Graph.generateImage(ndfa, name);
TabPanel.Instance().addGraph("REGEX: " + name, new File("images/" + name + ".png"), ndfa.getTransitions()); TabPanel.Instance().addGraph("REGEX: " + name, new File("images/" + name + ".png"), ndfa);
StatusPanel.Instance().setStatus("Done", 100); StatusPanel.Instance().setStatus("Done", 100);
} }
@@ -124,7 +124,7 @@ public class InputPanel extends JPanel {
Graph.generateImage(ndfa, name); Graph.generateImage(ndfa, name);
TabPanel.Instance().addGraph("NDFA: " + name, new File("images/" + name + ".png"), ndfa.getTransitions()); TabPanel.Instance().addGraph("NDFA: " + name, new File("images/" + name + ".png"), ndfa);
} }
if(p.type == Importable.Type.DFA) if(p.type == Importable.Type.DFA)
@@ -134,7 +134,7 @@ public class InputPanel extends JPanel {
Graph.generateImage(dfa, name); Graph.generateImage(dfa, name);
TabPanel.Instance().addGraph("DFA: " + name, new File("images/" + name + ".png"), dfa.getTransitions()); TabPanel.Instance().addGraph("DFA: " + name, new File("images/" + name + ".png"), dfa);
} }
if(p.type == Importable.Type.REGEX) if(p.type == Importable.Type.REGEX)
@@ -142,6 +142,8 @@ public class InputPanel extends JPanel {
StatusPanel.Instance().setStatus("Converting REGEX to NDFA", 40); StatusPanel.Instance().setStatus("Converting REGEX to NDFA", 40);
RegExp regex = (RegExp) p; RegExp regex = (RegExp) p;
System.out.println(regex.getTaal(10));
NDFA<String> ndfa = ThompsonConverter.convert(regex); NDFA<String> ndfa = ThompsonConverter.convert(regex);
try { try {
Thread.sleep(500); Thread.sleep(500);
@@ -152,7 +154,7 @@ public class InputPanel extends JPanel {
Graph.generateImage(ndfa, name); Graph.generateImage(ndfa, name);
TabPanel.Instance().addGraph("REGEX: " + name, new File("images/" + name + ".png"), ndfa.getTransitions()); TabPanel.Instance().addGraph("REGEX: " + name, new File("images/" + name + ".png"), ndfa);
} }
StatusPanel.Instance().setStatus("Done", 100); StatusPanel.Instance().setStatus("Done", 100);
+4 -2
View File
@@ -1,5 +1,7 @@
package com.imegumii.ui; package com.imegumii.ui;
import com.imegumii.Automata;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.io.*; import java.io.*;
@@ -24,9 +26,9 @@ public class TabPanel extends JTabbedPane {
super(); super();
} }
public void addGraph(String name, File image, String rawData) public void addGraph(String name, File image, Automata<String> a)
{ {
this.addTab(name, new GraphPanel(name, image, rawData)); this.addTab(name, new GraphPanel(name, image, a));
this.setSelectedIndex(this.getTabCount() - 1); this.setSelectedIndex(this.getTabCount() - 1);
} }