diff --git a/statemachine.solution/src/main/jastadd/Analysis.jadd b/statemachine.solution/src/main/jastadd/Analysis.jadd index a7d363ffdfead4e117290c5fd33c7990bede775c..26d12ee41caa10dc15a05333aa60dc10610ef342 100644 --- a/statemachine.solution/src/main/jastadd/Analysis.jadd +++ b/statemachine.solution/src/main/jastadd/Analysis.jadd @@ -1,5 +1,5 @@ aspect Analysis { - + /* public void StateMachine.printSomeAnalysis() { Set<Set<State>> sccs = this.SCC(); System.out.print("SCCs found: "); @@ -17,5 +17,5 @@ aspect Analysis { this.getInitial().minDistTo(finalState) + " step(s)"); } } - + */ } diff --git a/statemachine.solution/src/main/jastadd/Analysis.jrag b/statemachine.solution/src/main/jastadd/Analysis.jrag index 4bc4a0502203c41538702d22c19e2f3fc9caea26..919cdf866b1c26ebdc9e07528e72ae677e4f6858 100644 --- a/statemachine.solution/src/main/jastadd/Analysis.jrag +++ b/statemachine.solution/src/main/jastadd/Analysis.jrag @@ -1,6 +1,7 @@ aspect Analysis { /** Compute all states reachable from the current state */ + /* syn Set<State> State.reachable() circular [new HashSet<State>()] { Set<State> result = new HashSet<>(); result.addAll(successors()); @@ -9,8 +10,10 @@ aspect Analysis { } return result; } + */ /** Compute the minimum number of transitions to the other state, ignoring states with empty labels */ + /* syn int State.minDistTo(State other) circular [-1] { if (this == other) { return 0; @@ -25,12 +28,13 @@ aspect Analysis { } return result; } + */ /** A transition is an epsilon transition if the label is empty */ - syn boolean Transition.isEpsilon() = getLabel().isEmpty(); + //syn boolean Transition.isEpsilon() = getLabel().isEmpty(); /** Collect all epsilon transitions */ - coll Set<Transition> StateMachine.epsilonTransitions() [new HashSet<>()]; - Transition contributes this when isEpsilon() to StateMachine.epsilonTransitions(); + //coll Set<Transition> StateMachine.epsilonTransitions() [new HashSet<>()]; + //Transition contributes this when isEpsilon() to StateMachine.epsilonTransitions(); } diff --git a/statemachine.solution/src/main/jastadd/BankParser.parser b/statemachine.solution/src/main/jastadd/BankParser.parser index fcf625fceccfdd1af9270befff7332fe839a173f..ae992c62d8e948ef539224905df5a2ca9bdd3baf 100644 --- a/statemachine.solution/src/main/jastadd/BankParser.parser +++ b/statemachine.solution/src/main/jastadd/BankParser.parser @@ -8,8 +8,8 @@ import java.util.*; %embed {: // this code is inlined in the generated parser class - State initial; - List<State> finals = new ArrayList<>(); + //State initial; + //List<State> finals = new ArrayList<>(); :}; %goal goal; diff --git a/statemachine.solution/src/main/jastadd/BankScanner.flex b/statemachine.solution/src/main/jastadd/BankScanner.flex index dbbccf626add052a39763ae670f65b50dca2b7e9..dcf37d2e0bf7be11f047e87b722c31e6fe3a0e25 100644 --- a/statemachine.solution/src/main/jastadd/BankScanner.flex +++ b/statemachine.solution/src/main/jastadd/BankScanner.flex @@ -35,12 +35,5 @@ Identifier = [:jletter:][:jletterdigit:]* {WhiteSpace} { } // token definitions -"initial" { return sym(Terminals.INITIAL); } -"final" { return sym(Terminals.FINAL); } -"state" { return sym(Terminals.STATE); } -"trans" { return sym(Terminals.TRANS); } {Identifier} { return sym(Terminals.NAME); } -";" { return sym(Terminals.SEMI); } -":" { return sym(Terminals.COLON); } -"->" { return sym(Terminals.ARROW); } <<EOF>> { return sym(Terminals.EOF); } diff --git a/statemachine.solution/src/main/jastadd/ConnectedComponents.jrag b/statemachine.solution/src/main/jastadd/ConnectedComponents.jrag index 1637d454cde282e02789bb3a5ae53458193c08e8..f3f2e2fef68907a68ff646f2d5781adfa1304da8 100644 --- a/statemachine.solution/src/main/jastadd/ConnectedComponents.jrag +++ b/statemachine.solution/src/main/jastadd/ConnectedComponents.jrag @@ -3,6 +3,7 @@ aspect ConnectedComponents { /** * Kosaraju's algorithm */ + /* syn Set<Set<State>> StateMachine.SCC() { Map<State, Set> visited = new HashMap<>(); LinkedList<State> locked = new LinkedList<>(); @@ -33,5 +34,5 @@ aspect ConnectedComponents { if (visited.get(t.getFrom()) == null) t.getFrom().assign(visited, root); } - + */ } diff --git a/statemachine.solution/src/main/jastadd/NameAnalysis.jrag b/statemachine.solution/src/main/jastadd/NameAnalysis.jrag index 12adfd31b2629800dca5bc4db829173784b90264..3251423b55d43395496f0f3dd77978ee2b0052d2 100644 --- a/statemachine.solution/src/main/jastadd/NameAnalysis.jrag +++ b/statemachine.solution/src/main/jastadd/NameAnalysis.jrag @@ -1,6 +1,7 @@ aspect NameAnalysis { /** resolve a state using its name */ + /* syn State StateMachine.resolveState(String id) { for (State s : states()) { if (s.getLabel().equals(id)) { @@ -9,8 +10,10 @@ aspect NameAnalysis { } return null; } + */ /** resolve a transition using its name */ + /* syn Transition StateMachine.resolveTransition(String id) { for (Transition t : transitions()) { if (t.getLabel().equals(id)) { @@ -19,11 +22,12 @@ aspect NameAnalysis { } return null; } + */ // required interface implementation for name analysis in parser - eq StateMachine.globallyResolveStateByToken(String id) = resolveState(id); - eq Element.globallyResolveStateByToken(String id) = containingStateMachine().resolveState(id); + //eq StateMachine.globallyResolveStateByToken(String id) = resolveState(id); + //eq Element.globallyResolveStateByToken(String id) = containingStateMachine().resolveState(id); - eq StateMachine.globallyResolveTransitionByToken(String id) = resolveTransition(id); - eq Element.globallyResolveTransitionByToken(String id) = containingStateMachine().resolveTransition(id); + //eq StateMachine.globallyResolveTransitionByToken(String id) = resolveTransition(id); + //eq Element.globallyResolveTransitionByToken(String id) = containingStateMachine().resolveTransition(id); } diff --git a/statemachine.solution/src/main/jastadd/Navigation.jrag b/statemachine.solution/src/main/jastadd/Navigation.jrag index 18c4e4fbf90718c6ebdef69c96053fa054bf09fd..dec925906e1ff604850f9f3f42bc3b79bdb15c75 100644 --- a/statemachine.solution/src/main/jastadd/Navigation.jrag +++ b/statemachine.solution/src/main/jastadd/Navigation.jrag @@ -5,22 +5,23 @@ aspect Navigation { // ====================================================== /** Check, whether an this element is a state */ - syn boolean Element.isState() = false; - eq State.isState() = true; + //syn boolean Element.isState() = false; + //eq State.isState() = true; /** View this element as a state */ - syn State Element.asState() = null; - eq State.asState() = this; + //syn State Element.asState() = null; + //eq State.asState() = this; /** Check, whether an this element is a transition */ - syn boolean Element.isTransition() = false; - eq Transition.isTransition() = true; + //syn boolean Element.isTransition() = false; + //eq Transition.isTransition() = true; /** View this element as a transition */ - syn Transition Element.asTransition() = null; - eq Transition.asTransition() = this; + //syn Transition Element.asTransition() = null; + //eq Transition.asTransition() = this; /** Get all states */ + /* syn List<State> StateMachine.states() { List<State> states = new ArrayList<>(); for (Element element: getElementList()) { @@ -30,8 +31,10 @@ aspect Navigation { } return states; } + */ /** Get all transitions */ + /* syn List<Transition> StateMachine.transitions() { List<Transition> transitions = new ArrayList<>(); for (Element element: getElementList()) { @@ -41,18 +44,19 @@ aspect Navigation { } return transitions; } + */ /** Get the state machine the element is contained in */ - inh StateMachine Element.containingStateMachine(); - eq StateMachine.getElement().containingStateMachine() = this; + //inh StateMachine Element.containingStateMachine(); + //eq StateMachine.getElement().containingStateMachine() = this; /** Determine whether the State is final */ - syn boolean State.isInitial() = containingStateMachine().getInitial().equals(this); + //syn boolean State.isInitial() = containingStateMachine().getInitial().equals(this); /** Determine whether the State is final */ - syn boolean State.isFinal() = containingStateMachine().getFinalList().contains(this); + //syn boolean State.isFinal() = containingStateMachine().getFinalList().contains(this); /** Get all successor states */ - syn Collection<State> State.successors() = getOutgoingList().stream().map(Transition::getTo).collect(Collectors.toList()); + //syn Collection<State> State.successors() = getOutgoingList().stream().map(Transition::getTo).collect(Collectors.toList()); } diff --git a/statemachine.solution/src/main/jastadd/Printing.jrag b/statemachine.solution/src/main/jastadd/Printing.jrag index 90df2b9e9e74cdc0f3189d096c009b31aba077a8..c97dcc64b69aef70d8a7b82bf5226ffa912191f2 100644 --- a/statemachine.solution/src/main/jastadd/Printing.jrag +++ b/statemachine.solution/src/main/jastadd/Printing.jrag @@ -1,15 +1,17 @@ aspect Printing { /** Return a textual representation of the state machine */ + /* syn String StateMachine.prettyPrint() { StringBuilder sb = new StringBuilder(); states().forEach(s -> sb.append(s.prettyPrint())); transitions().forEach(t -> sb.append(t.prettyPrint())); return sb.toString(); } + */ /** Return a textual representation of the state machine */ - syn String Element.prettyPrint(); - eq State.prettyPrint() = (isInitial() ? "initial " : "") + (isFinal() ? "final " : "") + "state " + getLabel() + ";\n"; - eq Transition.prettyPrint() = "trans " + getFrom().getLabel() + " -> " + getTo().getLabel() + (isEpsilon() ? "" : " : " + getLabel()) + ";\n"; + //syn String Element.prettyPrint(); + //eq State.prettyPrint() = (isInitial() ? "initial " : "") + (isFinal() ? "final " : "") + "state " + getLabel() + ";\n"; + //eq Transition.prettyPrint() = "trans " + getFrom().getLabel() + " -> " + getTo().getLabel() + (isEpsilon() ? "" : " : " + getLabel()) + ";\n"; } diff --git a/statemachine.solution/src/main/jastadd/SMtoDotG.jrag b/statemachine.solution/src/main/jastadd/SMtoDotG.jrag index 18155d5366dc3d6f5778fba8f6193d09143c2f68..996a57db44317bf6f6a6589e987c275c72d9608f 100644 --- a/statemachine.solution/src/main/jastadd/SMtoDotG.jrag +++ b/statemachine.solution/src/main/jastadd/SMtoDotG.jrag @@ -1,4 +1,5 @@ aspect StateMachinetoDotG { + /* syn String StateMachine.toDot() { StringBuilder b = new StringBuilder(); b.append("strict digraph cycles {\n"); @@ -15,4 +16,5 @@ aspect StateMachinetoDotG { b.append("}\n"); return b.toString(); } + */ } diff --git a/statemachine.solution/src/main/jastadd/Transformation.jadd b/statemachine.solution/src/main/jastadd/Transformation.jadd index 266329489bc477b806aa4ae876a0ca2771a59596..4211dac72db4ced197e54dbe6f699aa1025d25e8 100644 --- a/statemachine.solution/src/main/jastadd/Transformation.jadd +++ b/statemachine.solution/src/main/jastadd/Transformation.jadd @@ -1,6 +1,7 @@ aspect Transformation { /** remove transformations with empty labels */ + /* public void StateMachine.removeEpsilonTransition(Transition t) { if (t.isEpsilon()) { State oldFrom = t.getFrom(); @@ -29,4 +30,5 @@ aspect Transformation { System.err.println("Won't remove non-epsilon transition " + t.getLabel()); } } + */ } diff --git a/statemachine.solution/src/main/jastadd/Util.jadd b/statemachine.solution/src/main/jastadd/Util.jadd index 517b6a51d6c7ea953aeb2a59f7b42ca354a77979..e1e78b0f63d41f1d7581aa14560db8501da6463a 100644 --- a/statemachine.solution/src/main/jastadd/Util.jadd +++ b/statemachine.solution/src/main/jastadd/Util.jadd @@ -28,7 +28,7 @@ aspect JastAddAPIExtension { } throw new RuntimeException("unable to remove child, because it was not contained in its parent!"); } - + /* public String Element.customID() { return getLabel(); } @@ -36,4 +36,5 @@ aspect JastAddAPIExtension { public String Element.toString() { return getLabel(); } + */ } diff --git a/statemachine.solution/src/main/java/de/tudresden/inf/st/statemachine/Main.java b/statemachine.solution/src/main/java/de/tudresden/inf/st/statemachine/Main.java index 2d0d558c834e3afa9f095054d76196090d3db454..be4bb45e89256e9486cfce1e86353df88fe1bd4c 100644 --- a/statemachine.solution/src/main/java/de/tudresden/inf/st/statemachine/Main.java +++ b/statemachine.solution/src/main/java/de/tudresden/inf/st/statemachine/Main.java @@ -2,9 +2,9 @@ package de.tudresden.inf.st.statemachine; import beaver.Parser; import de.tudresden.inf.st.jastadd.dumpAst.ast.Dumper; -import de.tudresden.inf.st.statemachine.jastadd.model.State; -import de.tudresden.inf.st.statemachine.jastadd.model.StateMachine; -import de.tudresden.inf.st.statemachine.jastadd.model.Transition; +//import de.tudresden.inf.st.statemachine.jastadd.model.State; +//import de.tudresden.inf.st.statemachine.jastadd.model.StateMachine; +//import de.tudresden.inf.st.statemachine.jastadd.model.Transition; import java.io.IOException; import java.nio.file.Paths; @@ -16,6 +16,7 @@ public class Main { public static Object DrAST_root_node; public static void main(String[] args) throws IOException, Parser.Exception { + /* StateMachine stateMachine; if (args.length == 0) { stateMachine = createExample(); @@ -45,8 +46,10 @@ public class Main { System.out.println(stateMachine.toDot()); Dumper.read(stateMachine).dumpAsPNG(Paths.get("02-transformed.png")); DrAST_root_node = stateMachine; + */ } + /* private static void printHeading(String s) { System.out.println(); System.out.println("========================================"); @@ -95,5 +98,5 @@ public class Main { stateMachine.getInitial().minDistTo(finalState) + " step(s)"); } } - + */ } diff --git a/statemachine.solution/src/main/java/de/tudresden/inf/st/statemachine/ParserUtils.java b/statemachine.solution/src/main/java/de/tudresden/inf/st/statemachine/ParserUtils.java index ef4e50169c525b631a10a531b9965283a967d2f4..f06cf1feb0aeed7fb8d857f55713bd17e1a67845 100644 --- a/statemachine.solution/src/main/java/de/tudresden/inf/st/statemachine/ParserUtils.java +++ b/statemachine.solution/src/main/java/de/tudresden/inf/st/statemachine/ParserUtils.java @@ -1,9 +1,9 @@ package de.tudresden.inf.st.statemachine; import beaver.Parser; -import de.tudresden.inf.st.statemachine.jastadd.model.StateMachine; -import de.tudresden.inf.st.statemachine.jastadd.parser.StateMachineParser; -import de.tudresden.inf.st.statemachine.jastadd.scanner.StateMachineScanner; +import de.tudresden.inf.st.statemachine.jastadd.model.Bank; +import de.tudresden.inf.st.statemachine.jastadd.parser.BankParser; +import de.tudresden.inf.st.statemachine.jastadd.scanner.BankScanner; import java.io.IOException; import java.io.Reader; @@ -16,11 +16,11 @@ import java.nio.file.Path; * @author rschoene - Initial contribution */ public class ParserUtils { - static StateMachine load(Path path) throws IOException, Parser.Exception { + static Bank load(Path path) throws IOException, Parser.Exception { Reader reader = Files.newBufferedReader(path); - StateMachineScanner scanner = new StateMachineScanner(reader); - StateMachineParser parser = new StateMachineParser(); - StateMachine result = (StateMachine) parser.parse(scanner); + BankScanner scanner = new BankScanner(reader); + BankParser parser = new BankParser(); + Bank result = (Bank) parser.parse(scanner); reader.close(); return result; }