Skip to content
Snippets Groups Projects
Commit 41be2f07 authored by Thomas's avatar Thomas
Browse files

kiss parser

parent 7d1cee9f
No related branches found
No related tags found
No related merge requests found
file,origstates,forward states,forward rounds,mqueries,reverse states,reverse rounds,mqueries
../../asml/m106.dot,79,79,25,2980800,96,38,2494380
../../asml/m135.dot,57,57,19,3115636,66,26,1754456
../../asml/m158.dot,28,28,12,338013,35,16,281952
../../asml/m159.dot,30,30,11,369680,37,17,311740
../../asml/m164.dot,43,43,8,430544,48,22,575498
../../asml/m172.dot,113,113,36,7166880,119,51,5936328
../../asml/m183.dot,9,9,5,4368,11,7,5700
../../asml/m185.dot,190,190,39,15340536,231,50,15922095
../../asml/m196.dot,81,81,33,2573870,89,58,2970903
../../asml/m199.dot,27,27,15,223008,36,18,264762
../../asml/m201.dot,128,128,46,13830919,145,68,16272915
../../asml/m217.dot,14,14,10,182643,22,12,207944
../../asml/m22.dot,93,93,28,4605436,117,46,5020006
../../asml/m34.dot,115,115,35,6555594,123,47,8157072
../../asml/m41.dot,25,25,9,97550,34,13,147465
../../asml/m45.dot,184,184,52,10515860,219,70,15981504
../../asml/m49.dot,142,142,36,8028494,151,65,12654375
../../asml/m54.dot,27,27,13,83237,29,21,131670
../../asml/m76.dot,210,210,66,14901636,245,80,20917533
../../asml/m95.dot,33,33,11,390710,39,18,306348
file,origstates,forward states,forward rounds,mqueries,reverse states,reverse rounds,mqueries
../../asml/m106.dot,79,79,25,2980800,96,38,2494380
../../asml/m135.dot,57,57,19,3115636,66,26,1754456
../../asml/m158.dot,28,28,12,338013,35,16,281952
../../asml/m159.dot,30,30,11,369680,37,17,311740
../../asml/m164.dot,43,43,8,430544,48,22,575498
../../asml/m172.dot,113,113,36,7166880,119,51,5936328
../../asml/m183.dot,9,9,5,4368,11,7,5700
../../asml/m185.dot,190,190,39,15340536,231,50,15922095
../../asml/m196.dot,81,81,33,2573870,89,58,2970903
../../asml/m199.dot,27,27,15,223008,36,18,264762
../../asml/m201.dot,128,128,46,13830919,145,68,16272915
../../asml/m217.dot,14,14,10,182643,22,12,207944
../../asml/m22.dot,93,93,28,4605436,117,46,5020006
../../asml/m34.dot,115,115,35,6555594,123,47,8157072
../../asml/m41.dot,25,25,9,97550,34,13,147465
../../asml/m45.dot,184,184,52,10515860,219,70,15981504
../../asml/m49.dot,142,142,36,8028494,151,65,12654375
../../asml/m54.dot,27,27,13,83237,29,21,131670
../../asml/m76.dot,210,210,66,14901636,245,80,20917533
../../asml/m95.dot,33,33,11,390710,39,18,306348
File added
......@@ -68,6 +68,10 @@ public class GraphvizParser {
}
CompactDFA<String> createDFAfromMealy(List<String> accepting){
return createDFAfromMealy(accepting, "0");
}
CompactDFA<String> createDFAfromMealy(List<String> accepting, String initial){
Set<String> inputs = new HashSet<>();
Set<String> outputs = new HashSet<>();
for(GraphvizParser.Edge e : edges){
......@@ -79,20 +83,20 @@ public class GraphvizParser {
List<String> inputList = Lists.newArrayList(inputs.iterator());
Alphabet<String> alphabet = Alphabets.fromList(inputList);
DFABuilder<Integer, String, CompactDFA<String>>.DFABuilder__1 builder = AutomatonBuilders.newDFA(alphabet).withInitial("0");
DFABuilder<Integer, String, CompactDFA<String>>.DFABuilder__1 builder = AutomatonBuilders.newDFA(alphabet).withInitial(initial);
for(GraphvizParser.Edge e : edges){
String[] io = e.label.split("/");
for (String o : outputs){
if (e.from.equals("0") && e.to.equals("0") && accepting.contains(o) && accepting.contains(io[1].trim())) {
if (e.from.equals(initial) && e.to.equals(initial) && accepting.contains(o) && accepting.contains(io[1].trim())) {
builder.from(e.from).on(io[0].trim()).to(e.to);
} else if (e.from.equals("0") && accepting.contains(o)) {
} else if (e.from.equals(initial) && accepting.contains(o)) {
try {
builder.from(e.from).on(io[0].trim()).to(e.to + "_" + io[1].trim());
} catch (IllegalStateException ignored) {
}
} else if (e.to.equals("0") && accepting.contains(io[1].trim())) {
} else if (e.to.equals(initial) && accepting.contains(io[1].trim())) {
builder.from(e.from + "_" + o).on(io[0].trim()).to(e.to);
} else {
builder.from(e.from + "_" + o).on(io[0].trim()).to(e.to + "_" + io[1].trim());
......@@ -100,7 +104,7 @@ public class GraphvizParser {
}
if (accepting.contains(io[1].trim())){
if (e.to.equals("0"))
if (e.to.equals(initial))
builder.withAccepting(e.to);
else
builder.withAccepting(e.to+"_"+io[1].trim());
......@@ -111,13 +115,17 @@ public class GraphvizParser {
}
CompactDFA<String> createDFA(List<String> accepting){
return createDFA(accepting, "0");
}
CompactDFA<String> createDFA(List<String> accepting, String initial){
Set<String> inputs = new HashSet<>();
edges.forEach(edge -> inputs.add(edge.label));
List<String> inputList = Lists.newArrayList(inputs.iterator());
Alphabet<String> alphabet = Alphabets.fromList(inputList);
DFABuilder<Integer, String, CompactDFA<String>>.DFABuilder__1 builder = AutomatonBuilders.newDFA(alphabet).withInitial("0");
DFABuilder<Integer, String, CompactDFA<String>>.DFABuilder__1 builder = AutomatonBuilders.newDFA(alphabet).withInitial(initial);
for(GraphvizParser.Edge e : edges){
builder.from(e.from).on(e.label).to(e.to);
}
......@@ -128,13 +136,17 @@ public class GraphvizParser {
}
CompactDFA<String> createDFAAllAccepting() {
return createDFAAllAccepting("0");
}
CompactDFA<String> createDFAAllAccepting(String initial){
Set<String> inputs = new HashSet<>();
edges.forEach(edge -> inputs.add(edge.label));
List<String> inputList = Lists.newArrayList(inputs.iterator());
Alphabet<String> alphabet = Alphabets.fromList(inputList);
DFABuilder<Integer, String, CompactDFA<String>>.DFABuilder__1 builder = AutomatonBuilders.newDFA(alphabet).withInitial("0");
DFABuilder<Integer, String, CompactDFA<String>>.DFABuilder__1 builder = AutomatonBuilders.newDFA(alphabet).withInitial(initial);
for(GraphvizParser.Edge e : edges){
builder.from(e.from).on(e.label).to(e.to);
}
......
import net.automatalib.automata.fsa.NFA;
import net.automatalib.automata.fsa.impl.compact.CompactDFA;
import net.automatalib.automata.fsa.impl.compact.CompactNFA;
import net.automatalib.visualization.Visualization;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;
/**
* It is *not* a general KISS2 parser, it only parses the things I needed for the mealy machines.
*/
public class Kiss2Parser extends GraphvizParser {
Kiss2Parser(Path filename) throws IOException {
super(filename);
nodes = new HashSet<>();
nodes2 = new HashSet<>();
edges = new HashSet<>();
Scanner s = new Scanner(filename);
while(s.hasNextLine()){
String line = s.nextLine();
line = line.split("#",1)[0].trim();
if(line.isEmpty() || line.startsWith("."))
continue;
if(line.matches("\\p{Graph}+\\s+\\p{Graph}+\\s+\\p{Graph}+\\s+\\p{Graph}+")){
int i = 0;
String input = line.split(" ")[i].trim();
++i;
while (line.split(" ")[i].isEmpty())
++i;
String from = line.split(" ")[i].trim();
++i;
while (line.split(" ")[i].isEmpty())
++i;
String to = line.split(" ")[i].trim();
++i;
while (line.split(" ")[i].isEmpty())
++i;
String out = line.split(" ")[i].trim();
edges.add(new Edge(from, to, input + "/" + out));
nodes2.add(from);
nodes2.add(to);
}
}
}
public static void main(String[] args) throws IOException {
Kiss2Parser parser = new Kiss2Parser(Paths.get(args[0]));
CompactDFA<String> dfa = parser.createDFAfromMealy(Collections.singletonList("1"), "s_2_0");
Visualization.visualize(dfa);
CompactNFA<String> nfa = FSAUtil.convert(dfa);
RFSALearnAndCompare<String> learnAndCompare = new RFSALearnAndCompare<>();
learnAndCompare.setTarget(nfa);
learnAndCompare.learn((int) (1.5*learnAndCompare.target.getStates().size()), 200000);
NFA<?, String> result = learnAndCompare.experiment.getFinalHypothesis();
NFA<?, String> result2 = learnAndCompare.experiment2.getFinalHypothesis();
Visualization.visualize(result, learnAndCompare.target.getInputAlphabet());
Visualization.visualize(result2, learnAndCompare.target.getInputAlphabet());
System.out.println(args[0] + "," + nfa.getStates().size() + "," + result.size() + "," + learnAndCompare.experiment.getRounds().getCount() + "," + learnAndCompare.mqOracle.getCounter().getCount() + "," + result2.size() + "," + learnAndCompare.experiment2.getRounds().getCount() + "," + learnAndCompare.mqOracle2.getCounter().getCount());
}
}
file,origstates,forwardstates,forward rounds,mqueries,reversestates,reverse rounds,mqueries2
Ba4bPa0,4,4,3,174,4,3,145
Ba4bPa1,3,4,2,27,3,2,21
Ba4bPa4,16,16,7,3616,16,6,2260
Ba4bPa6,40,36,16,23120,36,15,16473
Ba4bPa10,125,88,43,305493,90,35,187889
Ba4bPa11,89,67,26,136359,61,27,91485
Ba4bPa12,165,101,57,448655,95,49,247566
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment