Bugfixes, move generating to background thread

This commit is contained in:
2017-06-11 21:48:01 +02:00
parent e1273ab65e
commit a1d00818c3
9 changed files with 170 additions and 473 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

View File
-1
View File
@@ -1 +0,0 @@
Raw
+1 -1
View File
@@ -102,7 +102,7 @@ public class FileParser {
String line = "Error";
line = br.readLine();
RegExp regex = new RegExp("a").of(new RegExp("b").ster()); //RegExp.parse(line);
RegExp regex = RegExp.naarRegExp(line);
return regex;
}
+3 -12
View File
@@ -92,22 +92,13 @@ public class Graph {
return text;
}
public static void generateImage(Automata<String> a, String fileName) {
public static synchronized void generateImage(Automata<String> a, String fileName) {
try {
File f = new File("images/" + a.hashCode() + ".dot");
PrintWriter w = new PrintWriter(f);
w.print(Graph.generateImageString(a));
w.flush();
w.close();
MutableGraph g = Parser.read(f);
MutableGraph g = Parser.read(Graph.generateImageString(a));
if (fileName != null) {
Graphviz.fromGraph(g).width(1080).render(Format.PNG).toFile(new File("images/" + fileName + ".png"));
} else {
Graphviz.fromGraph(g).width(1080).render(Format.PNG).toFile(new File("images/" + a.toString() + ".png"));
}
if (!f.delete()) {
System.out.println("Failed to delete temp file");
Graphviz.fromGraph(g).width(1080).render(Format.PNG).toFile(new File("images/" + a.hashCode() + ".png"));
}
} catch (IOException e) {
e.printStackTrace();
-426
View File
@@ -6,436 +6,10 @@ import java.util.TreeSet;
public class Main {
public static void P1Opdracht1(TreeSet<String> stringsToParse) {
Character [] characters = {'a', 'b'};
DFA<String> myAutomata = new DFA<String>(characters);
// AAB
myAutomata.addTransition(new Transition<String>("q0", 'a', "q1"));
myAutomata.addTransition(new Transition<String>("q1", 'b', "q2"));
myAutomata.addTransition(new Transition<String>("q1", 'a', "q0"));
myAutomata.addTransition(new Transition<String>("q2", 'b', "q3"));
myAutomata.addTransition(new Transition<String>("q2", 'a', "q5"));
myAutomata.addTransition(new Transition<String>("q3", "q0"));
// BAAB
myAutomata.addTransition(new Transition<String>("q0", 'b', "q4"));
myAutomata.addTransition(new Transition<String>("q4", 'a', "q5"));
myAutomata.addTransition(new Transition<String>("q4", 'b', "q4"));
myAutomata.addTransition(new Transition<String>("q5", 'a', "q6"));
myAutomata.addTransition(new Transition<String>("q5", 'b', "q4"));
myAutomata.addTransition(new Transition<String>("q6", 'a', "q4"));
myAutomata.addTransition(new Transition<String>("q6", 'b', "q7"));
myAutomata.addTransition(new Transition<String>("q7", 'a', "q4"));
myAutomata.addTransition(new Transition<String>("q7", 'b', "q4"));
myAutomata.defineAsStartState("q0");
myAutomata.defineAsEndState("q3");
myAutomata.defineAsEndState("q7");
myAutomata.printTransitions();
final long[] startTime = {System.currentTimeMillis()};
myAutomata.geefTaalTotLengte(10).getSymbols().forEach((s) -> {
long before = System.currentTimeMillis();
boolean result = myAutomata.accepteer(s);
long after = System.currentTimeMillis();
long delta = (after-before);
System.out.println("string " + s + " fully parsed, result: " + result + " , it took " + delta + " ms");
startTime[0] += delta;
});
System.out.println((System.currentTimeMillis() - startTime[0]));
}
public static void Practicum1() {
TreeSet<String> stringsToParse = new TreeSet<>();
stringsToParse.add("abbaa");
stringsToParse.add("babaa");
stringsToParse.add("abbaaabaab");
stringsToParse.add("abaab");
stringsToParse.add("aaaabba");
stringsToParse.add("baab");
stringsToParse.add("baaba");
stringsToParse.add("baabaabba");
stringsToParse.add("aaaaabb"); // this is wrong, something is wrong
P1Opdracht1(stringsToParse);
}
public static void Practicum2()
{
RegExp a = new RegExp("a");
RegExp b = new RegExp("b");
// expr1: "baa"
RegExp expr1 = new RegExp("baa");
// expr2: "bb"
RegExp expr2 = new RegExp("bb");
// expr3: "baa | baa"
RegExp expr3 = expr1.of(expr2);
// all: "(a|b)*"
RegExp all = (a.of(b)).ster();
// expr4: "(baa | baa)+"
RegExp expr4 = expr3.plus();
// expr5: "(baa | baa)+ (a|b)*"
RegExp expr5 = expr4.punt(all);
System.out.println("taal van (baa):\n" + expr1.getTaal(5));
System.out.println("taal van (bb):\n" + expr2.getTaal(5));
System.out.println("taal van (baa | bb):\n" + expr3.getTaal(5));
System.out.println("taal van (a|b)*:\n" + all.getTaal(5));
System.out.println("taal van (baa | bb)+:\n" + expr4.getTaal(5));
System.out.println("taal van (baa | bb)+ (a|b)*:\n" + expr5.getTaal(6));
}
public static void Thompson() {
RegExp expr1 = new RegExp("a");
RegExp expr2 = new RegExp("b");
RegExp expr3 = new RegExp("c");
RegExp expr4 = new RegExp("d");
RegExp expr5 = expr1.of(expr2);
RegExp expr6 = expr3.of(expr4);
RegExp expr7 = expr5.punt(expr6);
NDFA<String> test = ThompsonConverter.convert(expr7);
System.out.println(Graph.generateGraphString(test));
}
public static void Hopcroft()
{
Character [] characters = {'a', 'b'};
DFA<String> automata = new DFA<String>(characters);
automata.addTransition(new Transition<String>("q0", 'a', "q2"));
automata.addTransition(new Transition<String>("q0", 'b', "q3"));
automata.addTransition(new Transition<String>("q1", 'a', "q3"));
automata.addTransition(new Transition<String>("q1", 'b', "q2"));
automata.addTransition(new Transition<String>("q2", 'a', "q0"));
automata.addTransition(new Transition<String>("q2", 'b', "q4"));
automata.addTransition(new Transition<String>("q3", 'a', "q1"));
automata.addTransition(new Transition<String>("q3", 'b', "q5"));
automata.addTransition(new Transition<String>("q4", 'a', "q6"));
automata.addTransition(new Transition<String>("q4", 'b', "q5"));
automata.addTransition(new Transition<String>("q5", 'a', "q2"));
automata.addTransition(new Transition<String>("q5", 'b', "q0"));
automata.addTransition(new Transition<String>("q6", 'a', "q4"));
automata.addTransition(new Transition<String>("q6", 'b', "q0"));
automata.defineAsStartState("q0");
automata.defineAsEndState("q1");
automata.defineAsEndState("q3");
automata.defineAsEndState("q4");
automata.defineAsEndState("q6");
/*
automata.addTransition(new Transition<String>("0", 'a', "0"));
automata.addTransition(new Transition<String>("0", 'b', "1"));
automata.addTransition(new Transition<String>("1", 'a', "2"));
automata.addTransition(new Transition<String>("1", 'b', "1"));
automata.addTransition(new Transition<String>("2", 'a', "0"));
automata.addTransition(new Transition<String>("2", 'b', "3"));
automata.addTransition(new Transition<String>("3", 'a', "4"));
automata.addTransition(new Transition<String>("3", 'b', "1"));
automata.addTransition(new Transition<String>("4", 'a', "5"));
automata.addTransition(new Transition<String>("4", 'b', "3"));
automata.addTransition(new Transition<String>("5", 'a', "0"));
automata.addTransition(new Transition<String>("5", 'b', "3"));
automata.defineAsStartState("0");
automata.defineAsEndState("2");
automata.defineAsEndState("4");
*/
System.out.println("\nNormal automata..");
System.out.println(Graph.generateGraphString(automata));
HopcroftConverter convert = new HopcroftConverter(automata);
DFA<String> minimized = convert.minimize();
System.out.println("\nMinimized automata..");
System.out.println(Graph.generateGraphString(minimized));
}
public static void ReverseAutomata()
{
Character [] characters = {'a', 'b'};
DFA<String> myAutomata = new DFA<String>(characters);
// AAB
myAutomata.addTransition(new Transition<String>("0", 'a', "0"));
myAutomata.addTransition(new Transition<String>("0", 'b', "1"));
myAutomata.addTransition(new Transition<String>("1", 'a', "0"));
myAutomata.addTransition(new Transition<String>("1", 'b', "2"));
myAutomata.addTransition(new Transition<String>("2", 'a', "0"));
myAutomata.addTransition(new Transition<String>("2", 'b', "2"));
myAutomata.defineAsStartState("0");
myAutomata.defineAsEndState("2");
// System.out.println(Graph.generateGraphString(myAutomata));
// System.out.println("\nREVERSE:");
NDFA<String> reverseAutomata = myAutomata.reverse();
// System.out.println(Graph.generateGraphString(reverseAutomata));
System.out.println("ORIGINEEL");
myAutomata.printTransitions();
System.out.println("MET BEGIN EN EIND");
System.out.println(myAutomata.beginStates);
System.out.println(myAutomata.eindStates);
System.out.println("REVERSE");
reverseAutomata.printTransitions();
System.out.println("MET BEGIN EN EIND");
System.out.println(reverseAutomata.beginStates);
System.out.println(reverseAutomata.eindStates);
}
public static void Practicum4() {
Character [] characters = {'a', 'b'};
NDFA<String> myAutomata = new NDFA<String>(characters);
// myAutomata.addTransition(new Transition<String>("0", 'a', "1"));
// myAutomata.addTransition(new Transition<String>("0", 'a', "2"));
// myAutomata.addTransition(new Transition<String>("1", 'a', "1"));
// myAutomata.addTransition(new Transition<String>("1", 'a', "2"));
// myAutomata.addTransition(new Transition<String>("2", 'b', "1"));
// myAutomata.addTransition(new Transition<String>("2", 'b', "3"));
// myAutomata.addTransition(new Transition<String>("3", 'a', "2"));
// myAutomata.addTransition(new Transition<String>("3", 'a', "1"));
// myAutomata.defineAsStartState("0");
// myAutomata.defineAsEndState("0");
// myAutomata.defineAsEndState("1");
// Test 2
// myAutomata.addTransition(new Transition<String>("0", 'a', "1"));
//
// myAutomata.addTransition(new Transition<String>("0", 'a', "3"));
// myAutomata.addTransition(new Transition<String>("0", 'b', "3"));
//
// myAutomata.addTransition(new Transition<String>("0", 'a', "2"));
// myAutomata.addTransition(new Transition<String>("0", 'b', "2"));
//
// myAutomata.addTransition(new Transition<String>("1", 'a', "1"));
// myAutomata.addTransition(new Transition<String>("1", 'b', "3"));
//
// myAutomata.addTransition(new Transition<String>("1", 'a', "2"));
// myAutomata.addTransition(new Transition<String>("1", 'b', "2"));
//
// myAutomata.addTransition(new Transition<String>("2", 'b', "2"));
// myAutomata.addTransition(new Transition<String>("2", 'b', "4"));
//
// myAutomata.addTransition(new Transition<String>("2", 'b', "3")); //ja? Ja.
// myAutomata.addTransition(new Transition<String>("3", 'b', "2"));
//
// myAutomata.addTransition(new Transition<String>("3", 'b', "3"));
//
// myAutomata.addTransition(new Transition<String>("3", 'a', "4"));
// myAutomata.addTransition(new Transition<String>("3", 'b', "4"));
//
// myAutomata.defineAsStartState("0");
// myAutomata.defineAsEndState("1");
// Test 3
// myAutomata.addTransition(new Transition<String>("1", 'a', "2"));
// myAutomata.addTransition(new Transition<String>("1", 'b', "1"));
//
// myAutomata.addTransition(new Transition<String>("2", 'a', "3"));
// myAutomata.addTransition(new Transition<String>("2", 'b', "2"));
// myAutomata.addTransition(new Transition<String>("2", Transition.EPSILON, "1"));
//
// myAutomata.addTransition(new Transition<String>("3", 'a', "4"));
// myAutomata.addTransition(new Transition<String>("3", 'b', "3"));
// myAutomata.addTransition(new Transition<String>("3", Transition.EPSILON, "2"));
//
// myAutomata.addTransition(new Transition<String>("4", 'a', "1"));
// myAutomata.addTransition(new Transition<String>("4", 'b', "4"));
// myAutomata.addTransition(new Transition<String>("4", Transition.EPSILON, "3"));
//
// myAutomata.defineAsStartState("1");
// myAutomata.defineAsEndState("2");
// myAutomata.defineAsEndState("3");
System.out.println("De NDFA is ");
myAutomata.printTransitions();
System.out.println("Met als begin en eind states");
System.out.println(myAutomata.beginStates);
System.out.println(myAutomata.eindStates);
System.out.println("DFA is dan ");
DFA<String> myDfa = myAutomata.toDFA();
myDfa.printTransitions();
System.out.println("Met als begin en eind states");
System.out.println(myDfa.beginStates);
System.out.println(myDfa.eindStates);
}
public static void Practicum5 () {
Character [] characters = {'a', 'b'};
DFA<String> myAutomata = new DFA<String>(characters);
// Test 4 minimalisatie
myAutomata.addTransition(new Transition<String>("0", 'a', "0"));
myAutomata.addTransition(new Transition<String>("0", 'b', "1"));
myAutomata.addTransition(new Transition<String>("1", 'a', "2"));
myAutomata.addTransition(new Transition<String>("1", 'b', "1"));
myAutomata.addTransition(new Transition<String>("2", 'a', "0"));
myAutomata.addTransition(new Transition<String>("2", 'b', "3"));
myAutomata.addTransition(new Transition<String>("3", 'a', "4"));
myAutomata.addTransition(new Transition<String>("3", 'b', "1"));
myAutomata.addTransition(new Transition<String>("4", 'a', "5"));
myAutomata.addTransition(new Transition<String>("4", 'b', "3"));
myAutomata.addTransition(new Transition<String>("5", 'a', "0"));
myAutomata.addTransition(new Transition<String>("5", 'b', "3"));
myAutomata.defineAsStartState("0");
myAutomata.defineAsEndState("2");
myAutomata.defineAsEndState("4");
System.out.println("Ongeminimaliseerd krijgen we:");
myAutomata.print();
System.out.println("-------");
Graph.generateImage(myAutomata, null);
DFA<String> geminimaliseerd = myAutomata.minimaliseer();
System.out.println("Geminimaliseerd krijgen we:");
geminimaliseerd.print();
System.out.println("------");
Graph.generateImage(geminimaliseerd, null);
geminimaliseerd.ontkenning();
}
public static void TestUitOpdrachtBeschrijving() {
Character [] characters = {'a', 'b'};
NDFA<String> ndfa = new NDFA<String>(characters);
ndfa.addTransition(new Transition<String>("q0", 'a', "q1"));
ndfa.addTransition(new Transition<String>("q1", 'b', "q2"));
ndfa.addTransition(new Transition<String>("q1", 'b', "q0"));
ndfa.addTransition(new Transition<String>("q2", 'a', "q0"));
ndfa.addTransition(new Transition<String>("q2", 'a', "q3"));
ndfa.addTransition(new Transition<String>("q3", 'a', "q4"));
ndfa.defineAsStartState("q0");
ndfa.defineAsEndState("q0");
ndfa.defineAsEndState("q4");
Graph.generateImage(ndfa, "Ndfa");
DFA<String> dfa = ndfa.toDFA();
Graph.generateImage(dfa, "Dfa");
}
public static void traverseRegExp(RegExp r) {
if (r == null) {
return;
}
System.out.println(r);
System.out.println("Printing left ");
traverseRegExp(r.links);
System.out.println("Printing right");
traverseRegExp(r.rechts);
System.out.println("----");
}
public static int aantalOperators(RegExp r, int i) {
if (r != null) {
if (r.links != null) {
i++;
i = aantalOperators(r.links, i);
}
if (r.rechts != null) {
i++;
i = aantalOperators(r.rechts, i);
}
}
return i;
}
public static void main(String[] args) {
// Test.test();
// Hopcroft();
// TestUitOpdrachtBeschrijving();
String s = "a*(aa+ |ba*b ) * (abba|baab|bbbb)+";
String s2 = "a(a+ | b*((a|b)+))";
String s3 = "(a|b)+a";
String s4 = "a+((ab)*b|ab|(b)*bb)+(abba|baab)+";
String s5 = "((ab)*b(a|b)|ab|(b)*bb)+";
RegExp reg = new RegExp();
// System.out.println(reg.toRegExp("a*|b+").getTaal(5));
// RegExp r1 = new RegExp("a");
// RegExp r2 = new RegExp("b");
//
// RegExp r3 = r1.punt(r2);
//
// RegExp r4 = new RegExp();
//
// RegExp r5 = r3.punt(r4);
//
// traverseRegExp(r5);
// System.out.println(aantalOperators(r5, 1));
// System.out.println(r5.getTaal(5));
// RegExp all = bSter.punt(aPlus);
// RegExp all = r1.punt(r2.ster()).punt(r3.plus());
//
// System.out.println(all.getTaal(5));
// reg.parseString(s);
// reg.parseString(s2);
// System.out.println(reg.parseString(s4).getTaal(3));
// System.out.println(aantalOperators(reg.parseString(s2),1));
// System.out.println(aantalOperators(reg.parseString(s4), 1));
System.out.println(aantalOperators(reg.parseString(s5), 1));
// System.out.println(reg.parseString(s3).getTaal(100)); // werkte!
new Frame();
}
}
+3 -3
View File
@@ -41,7 +41,7 @@ public class RegExp extends Importable{
rechts = null;
}
public RegExp loopRecursiefDoorString(String s, RegExp r) {
public static RegExp loopRecursiefDoorString(String s, RegExp r) {
Deque<Integer> start = new ArrayDeque<>();
Deque<Integer> end = new ArrayDeque<>();
@@ -83,7 +83,7 @@ public class RegExp extends Importable{
return reg;
}
public RegExp naarRegExp(String s) {
public static RegExp naarRegExp(String s) {
// String s is zonder spaces
// RegExp retval = new RegExp();
// Als eerste moet de string in groupen gedeeld worden op basis van haakjes.
@@ -96,7 +96,7 @@ public class RegExp extends Importable{
return r;
}
public RegExp stringNaarRegExp(String start, RegExp initieel, Deque<RegExp> alreadyParsed) {
public static RegExp stringNaarRegExp(String start, RegExp initieel, Deque<RegExp> alreadyParsed) {
ArrayList<RegExp> toOf = new ArrayList<>();
ArrayList<String> strings = new ArrayList<>();
+95 -1
View File
@@ -20,9 +20,49 @@ public class Test {
// Hopcroft();
TupleConstructie();
// TupleConstructie();
// FileReadTest();
// Hopcroft();
// TestUitOpdrachtBeschrijving();
String s = "a*(aa+ |ba*b ) * (abba|baab|bbbb)+";
String s2 = "a(a+ | b*((a|b)+))";
String s3 = "(a|b)+a";
String s4 = "a+((ab)*b|ab|(b)*bb)+(abba|baab)+";
String s5 = "((ab)*b(a|b)|ab|(b)*bb)+";
RegExp reg = new RegExp();
// System.out.println(reg.toRegExp("a*|b+").getTaal(5));
// RegExp r1 = new RegExp("a");
// RegExp r2 = new RegExp("b");
//
// RegExp r3 = r1.punt(r2);
//
// RegExp r4 = new RegExp();
//
// RegExp r5 = r3.punt(r4);
//
// traverseRegExp(r5);
// System.out.println(aantalOperators(r5, 1));
// System.out.println(r5.getTaal(5));
// RegExp all = bSter.punt(aPlus);
// RegExp all = r1.punt(r2.ster()).punt(r3.plus());
//
// System.out.println(all.getTaal(5));
// reg.parseString(s);
// reg.parseString(s2);
// System.out.println(reg.parseString(s4).getTaal(3));
// System.out.println(aantalOperators(reg.parseString(s2),1));
// System.out.println(aantalOperators(reg.parseString(s4), 1));
// System.out.println(aantalOperators(reg.parseString(s5), 1));
// System.out.println(reg.parseString(s3).getTaal(100)); // werkte!
}
public static void P1Opdracht1(TreeSet<String> stringsToParse) {
@@ -412,4 +452,58 @@ public class Test {
System.out.println(Graph.generateImageString(of));
Graph.generateImage(of, "of");
}
public static void TestUitOpdrachtBeschrijving() {
Character [] characters = {'a', 'b'};
NDFA<String> ndfa = new NDFA<String>(characters);
ndfa.addTransition(new Transition<String>("q0", 'a', "q1"));
ndfa.addTransition(new Transition<String>("q1", 'b', "q2"));
ndfa.addTransition(new Transition<String>("q1", 'b', "q0"));
ndfa.addTransition(new Transition<String>("q2", 'a', "q0"));
ndfa.addTransition(new Transition<String>("q2", 'a', "q3"));
ndfa.addTransition(new Transition<String>("q3", 'a', "q4"));
ndfa.defineAsStartState("q0");
ndfa.defineAsEndState("q0");
ndfa.defineAsEndState("q4");
Graph.generateImage(ndfa, "Ndfa");
DFA<String> dfa = ndfa.toDFA();
Graph.generateImage(dfa, "Dfa");
}
public static void traverseRegExp(RegExp r) {
if (r == null) {
return;
}
System.out.println(r);
System.out.println("Printing left ");
traverseRegExp(r.links);
System.out.println("Printing right");
traverseRegExp(r.rechts);
System.out.println("----");
}
public static int aantalOperators(RegExp r, int i) {
if (r != null) {
if (r.links != null) {
i++;
i = aantalOperators(r.links, i);
}
if (r.rechts != null) {
i++;
i = aantalOperators(r.rechts, i);
}
}
return i;
}
}
+68 -29
View File
@@ -1,6 +1,7 @@
package com.imegumii.ui;
import com.imegumii.*;
import jdk.nashorn.internal.runtime.regexp.joni.Regex;
import javax.swing.*;
import java.awt.*;
@@ -15,6 +16,7 @@ import java.util.ArrayList;
public class InputPanel extends JPanel {
private static InputPanel panel;
private static boolean threadRunning = false;
public static InputPanel Instance()
{
@@ -45,7 +47,29 @@ public class InputPanel extends JPanel {
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
TabPanel.Instance().addGraph("DFA: En", new File("images/en.png"), "Dit is nog meer rauwe en data");
String regS = text.getText();
String name = regS.toLowerCase().trim();
StatusPanel.Instance().setStatus("Parsing REGEX", 20);
RegExp regex = RegExp.naarRegExp(regS);
StatusPanel.Instance().setStatus("Converting REGEX to NDFA", 40);
NDFA<String> ndfa = ThompsonConverter.convert(regex);
try {
Thread.sleep(500);
} catch (InterruptedException e1) {
}
StatusPanel.Instance().setStatus("Generating image for NDFA", 70);
Graph.generateImage(ndfa, name);
TabPanel.Instance().addGraph("REGEX: " + name, new File("images/" + name + ".png"), ndfa.getTransitions());
StatusPanel.Instance().setStatus("Done", 100);
}
});
@@ -76,48 +100,63 @@ public class InputPanel extends JPanel {
fileButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
StatusPanel.Instance().setStatus("Parsing file", 10);
new Thread(new Runnable() {
@Override public void run() {
String file = (String)fileCombo.getSelectedItem();
String name = file.replaceAll(".dot", "");
while(threadRunning){};
Importable p = FileParser.read(file);
threadRunning = true;
if(p.type == Importable.Type.NDFA)
{
StatusPanel.Instance().setStatus("Generating image for NDFA", 60);
NDFA<String> ndfa = (NDFA<String>)p;
StatusPanel.Instance().setStatus("Parsing file", 10);
Graph.generateImage(ndfa, name);
String file = (String)fileCombo.getSelectedItem();
String name = file.replaceAll(".dot", "");
TabPanel.Instance().addGraph("NDFA: " + name, new File("images/" + name + ".png"), ndfa.getTransitions());
}
Importable p = FileParser.read(file);
if(p.type == Importable.Type.DFA)
{
StatusPanel.Instance().setStatus("Generating image for DFA", 60);
DFA<String> dfa = (DFA<String>)p;
if(p.type == Importable.Type.NDFA)
{
StatusPanel.Instance().setStatus("Generating image for NDFA", 60);
NDFA<String> ndfa = (NDFA<String>)p;
Graph.generateImage(dfa, name);
Graph.generateImage(ndfa, name);
TabPanel.Instance().addGraph("DFA: " + name, new File("images/" + name + ".png"), dfa.getTransitions());
}
TabPanel.Instance().addGraph("NDFA: " + name, new File("images/" + name + ".png"), ndfa.getTransitions());
}
if(p.type == Importable.Type.REGEX)
{
StatusPanel.Instance().setStatus("Converting REGEX to NDFA", 40);
RegExp regex = (RegExp) p;
if(p.type == Importable.Type.DFA)
{
StatusPanel.Instance().setStatus("Generating image for DFA", 60);
DFA<String> dfa = (DFA<String>)p;
NDFA<String> ndfa = ThompsonConverter.convert(regex);
Graph.generateImage(dfa, name);
StatusPanel.Instance().setStatus("Generating image for NDFA", 70);
TabPanel.Instance().addGraph("DFA: " + name, new File("images/" + name + ".png"), dfa.getTransitions());
}
Graph.generateImage(ndfa, name);
if(p.type == Importable.Type.REGEX)
{
StatusPanel.Instance().setStatus("Converting REGEX to NDFA", 40);
RegExp regex = (RegExp) p;
TabPanel.Instance().addGraph("REGEX: " + name, new File("images/" + name + ".png"), ndfa.getTransitions());
}
NDFA<String> ndfa = ThompsonConverter.convert(regex);
try {
Thread.sleep(500);
} catch (InterruptedException e1) {
}
StatusPanel.Instance().setStatus("Done", 100);
StatusPanel.Instance().setStatus("Generating image for NDFA", 70);
Graph.generateImage(ndfa, name);
TabPanel.Instance().addGraph("REGEX: " + name, new File("images/" + name + ".png"), ndfa.getTransitions());
}
StatusPanel.Instance().setStatus("Done", 100);
threadRunning = false;
}
}).start();
}
});