Fixed issue in accepteer

This commit is contained in:
Yorick Rommers
2017-06-12 14:04:48 +02:00
parent 2c1f44fe7e
commit a33b7b9164
6 changed files with 31 additions and 22 deletions
+4 -2
View File
@@ -27,9 +27,11 @@ public class DFA<T extends Comparable> extends Automata<T> {
for (int i = 0; i < s.length(); i++) { for (int i = 0; i < s.length(); i++) {
// System.out.println(s.charAt(i));
for (Transition<T> t : this.transistions) { for (Transition<T> t : this.transistions) {
if (t.vanState == currentState) { // System.out.println("State is " + t.vanState);
// System.out.println("CurrentState is " + currentState);
if (t.vanState.equals(currentState)) {
// System.out.println("Char is " + s.charAt(i) + " and state is " + t);
// if states match, parse using symbols. // if states match, parse using symbols.
if (t.symbol == s.charAt(i)) { if (t.symbol == s.charAt(i)) {
// symbols match // symbols match
+3 -1
View File
@@ -27,7 +27,9 @@ public class Main {
RegExp reg = new RegExp(); RegExp reg = new RegExp();
// System.out.println(reg.naarRegExp(s3).getTaal(10)); // System.out.println(reg.naarRegExp(s3).getTaal(10));
System.out.println(reg.naarRegExp(s7).getTaal(10)); // System.out.println(reg.naarRegExp(s7).getTaal(10));
// Test.TestUitOpdrachtBeschrijving();
new Frame(); new Frame();
} }
} }
+10 -8
View File
@@ -3,6 +3,7 @@ package com.imegumii;
import sun.misc.Regexp; import sun.misc.Regexp;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* Created by kenny on 2-5-2017. * Created by kenny on 2-5-2017.
@@ -217,7 +218,7 @@ public class RegExp extends Importable{
return res; return res;
} }
public Taal getTaal(int maxOperaties) public Taal getTaal(int maxOperaties, int maxLength)
{ {
SortedSet<String> leeg = new TreeSet<>(vergelijkDmvLengte); SortedSet<String> leeg = new TreeSet<>(vergelijkDmvLengte);
SortedSet<String> resultaat = new TreeSet<>(vergelijkDmvLengte); SortedSet<String> resultaat = new TreeSet<>(vergelijkDmvLengte);
@@ -233,15 +234,15 @@ public class RegExp extends Importable{
break; break;
case OF: case OF:
resLinks = links == null ? leeg : links.getTaal(maxOperaties - 1).getSymbols(); resLinks = links == null ? leeg : links.getTaal(maxOperaties - 1, maxLength).getSymbols();
resRechts = rechts == null ? leeg : rechts.getTaal(maxOperaties - 1).getSymbols(); resRechts = rechts == null ? leeg : rechts.getTaal(maxOperaties - 1, maxLength).getSymbols();
resultaat.addAll (resLinks); resultaat.addAll (resLinks);
resultaat.addAll (resRechts); resultaat.addAll (resRechts);
break; break;
case PUNT: case PUNT:
resLinks = links == null ? leeg : links.getTaal(maxOperaties - 1).getSymbols(); resLinks = links == null ? leeg : links.getTaal(maxOperaties, maxLength).getSymbols();
resRechts = rechts == null ? leeg : rechts.getTaal(maxOperaties - 1).getSymbols(); resRechts = rechts == null ? leeg : rechts.getTaal(maxOperaties, maxLength).getSymbols();
for (String s1 : resLinks) { for (String s1 : resLinks) {
for (String s2 : resRechts) { for (String s2 : resRechts) {
resultaat.add(s1 + s2); resultaat.add(s1 + s2);
@@ -251,7 +252,7 @@ public class RegExp extends Importable{
case STER: case STER:
case PLUS: case PLUS:
resLinks = links == null ? leeg : links.getTaal(maxOperaties - 1).getSymbols(); resLinks = links == null ? leeg : links.getTaal(maxOperaties - 1, maxLength).getSymbols();
resultaat.addAll(resLinks); resultaat.addAll(resLinks);
for (int i = 1; i < maxOperaties; i++) for (int i = 1; i < maxOperaties; i++)
{ {
@@ -276,8 +277,9 @@ public class RegExp extends Importable{
break; break;
} }
SortedSet<String> ret = new TreeSet<>();
return new Taal(resultaat); resultaat.stream().filter(r -> r.length() < maxLength).forEach(ret::add);
return new Taal(ret);
} }
public class Tuple<X, Y> { public class Tuple<X, Y> {
+7 -8
View File
@@ -149,13 +149,13 @@ public class Test {
// expr5: "(baa | baa)+ (a|b)*" // expr5: "(baa | baa)+ (a|b)*"
RegExp expr5 = expr4.punt(all); RegExp expr5 = expr4.punt(all);
System.out.println("taal van (baa):\n" + expr1.getTaal(5)); // 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 (bb):\n" + expr2.getTaal(5));
System.out.println("taal van (baa | bb):\n" + expr3.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 (a|b)*:\n" + all.getTaal(5));
System.out.println("taal van (baa | bb)+:\n" + expr4.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)); // System.out.println("taal van (baa | bb)+ (a|b)*:\n" + expr5.getTaal(6));
} }
@@ -477,7 +477,6 @@ public class Test {
DFA<String> dfa = ndfa.toDFA(); DFA<String> dfa = ndfa.toDFA();
Graph.generateImage(dfa, "Dfa"); Graph.generateImage(dfa, "Dfa");
} }
public static void traverseRegExp(RegExp r) { public static void traverseRegExp(RegExp r) {
+5 -2
View File
@@ -2,6 +2,7 @@ package com.imegumii.ui;
import com.imegumii.*; import com.imegumii.*;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.xpath.SourceTree;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import javax.swing.*; import javax.swing.*;
@@ -130,9 +131,11 @@ public class GraphPanel extends JPanel {
Graph.generateImage(mini, "mcdfa"); Graph.generateImage(mini, "mcdfa");
TabPanel.Instance().addGraph("DFA: mcdfa." + name, new File("images/mcdfa.png"), mini); TabPanel.Instance().addGraph("DFA: mcdfa." + name, new File("images/mcdfa.png"), mini);
System.out.println(mini.accepteer("fuuuuuuuck"));
System.out.println(mini.accepteer("fuuuuuuuckabba"));
System.out.println(mini.accepteer("fuuuuuuuckabb"));
mini.geefTaalTotLengte(10).getSymbols().forEach(s -> System.out.println("Accepteer " + s + " ? " + mini.accepteer(s)));
StatusPanel.Instance().setStatus("Done", 100); StatusPanel.Instance().setStatus("Done", 100);
} }
} }
}); });
+2 -1
View File
@@ -59,6 +59,7 @@ public class InputPanel extends JPanel {
RegExp regex = new RegExp(); RegExp regex = new RegExp();
regex = regex.naarRegExp(regS); regex = regex.naarRegExp(regS);
System.out.println(regex.getTaal(4, 10));
StatusPanel.Instance().setStatus("Converting REGEX to NDFA", 40); StatusPanel.Instance().setStatus("Converting REGEX to NDFA", 40);
@@ -144,7 +145,7 @@ 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)); // System.out.println(regex.getTaal(10));
NDFA<String> ndfa = ThompsonConverter.convert(regex); NDFA<String> ndfa = ThompsonConverter.convert(regex);
try { try {