diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedFormulaChannel.java b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedFormulaChannel.java new file mode 100644 index 0000000..420655e --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedFormulaChannel.java @@ -0,0 +1,9 @@ +package parser; + +public class ExpectedFormulaChannel extends ParseException { + + public ExpectedFormulaChannel(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedGeometry.java b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedGeometry.java new file mode 100644 index 0000000..b7927e0 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedGeometry.java @@ -0,0 +1,9 @@ +package parser; + +public class ExpectedGeometry extends ParseException { + + public ExpectedGeometry(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedIoChannel.java b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedIoChannel.java new file mode 100644 index 0000000..d6885fd --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedIoChannel.java @@ -0,0 +1,9 @@ +package parser; + +public class ExpectedIoChannel extends ParseException { + + public ExpectedIoChannel(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedModel.java b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedModel.java new file mode 100644 index 0000000..d3758e3 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedModel.java @@ -0,0 +1,9 @@ +package parser; + +public class ExpectedModel extends ParseException { + + public ExpectedModel(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedNode.java b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedNode.java new file mode 100644 index 0000000..c82a553 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedNode.java @@ -0,0 +1,9 @@ +package parser; + +public class ExpectedNode extends ParseException { + + public ExpectedNode(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ExpectedResource.java b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedResource.java new file mode 100644 index 0000000..b462e21 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/ExpectedResource.java @@ -0,0 +1,9 @@ +package parser; + +public class ExpectedResource extends ParseException { + + public ExpectedResource(int line) { + super(line); + } + +} diff --git a/AlgebraicDataflowArchitectureModel/src/parser/ParserDTRAM.java b/AlgebraicDataflowArchitectureModel/src/parser/ParserDTRAM.java new file mode 100644 index 0000000..0012395 --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/parser/ParserDTRAM.java @@ -0,0 +1,154 @@ +package parser; + +import java.io.BufferedReader; +import java.io.IOException; + +import com.mxgraph.model.mxCell; +import com.mxgraph.model.mxGeometry; +import com.mxgraph.model.mxIGraphModel; +import com.mxgraph.view.mxCellState; +import com.mxgraph.view.mxGraph; +import com.mxgraph.view.mxGraphView; + + +import models.dataFlowModel.DataFlowModel; + +public class ParserDTRAM extends Parser { + + + private static TokenStream stream; + + public static final String MODEL = "model"; + public static final String GEOMETRY = "geometry"; + public static final String NODE = "node"; + public static final String RESOURCE = "r"; + public static final String CHANNEL = "c"; + public static final String FORMULA_CHANNEL = "fc"; + public static final String IO_CHANNEL = "ioc"; + + + public ParserDTRAM(BufferedReader reader) { + super(reader); + } + + public DataFlowModel doParseModel() + throws ExpectedRightBracket, ExpectedChannel, ExpectedChannelName, ExpectedLeftCurlyBracket, ExpectedInOrOutOrRefKeyword, ExpectedStateTransition, ExpectedEquals, ExpectedRHSExpression, WrongLHSExpression, WrongRHSExpression, ExpectedAssignment, ExpectedModel, ExpectedGeometry { + stream = new TokenStream(); + try { + String line; + while ((line = reader.readLine()) != null) { + stream.addLine(line); + } + reader.close(); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + DataFlowModel model = parseModel(stream); + return model; + } + + public void doParseGeometry(mxGraph graph) + throws ExpectedRightBracket, ExpectedChannel, ExpectedChannelName, ExpectedLeftCurlyBracket, ExpectedInOrOutOrRefKeyword, ExpectedStateTransition, ExpectedEquals, ExpectedRHSExpression, WrongLHSExpression, WrongRHSExpression, ExpectedAssignment, ExpectedModel, ExpectedGeometry, ExpectedNode, ExpectedResource, ExpectedFormulaChannel, ExpectedIoChannel{ + + parseGeometry(stream, graph); + } + + public static DataFlowModel parseModel(TokenStream stream) + throws ExpectedRightBracket, ExpectedChannel, ExpectedChannelName, ExpectedLeftCurlyBracket, ExpectedInOrOutOrRefKeyword, ExpectedStateTransition, ExpectedEquals, ExpectedRHSExpression, WrongLHSExpression, WrongRHSExpression, ExpectedAssignment, ExpectedModel, ExpectedGeometry { + + if (!stream.hasNext()) { + return null; + } + + String modelKeyword = stream.next(); + if (!modelKeyword.equals(MODEL)) { + throw new ExpectedModel(stream.getLine()); + } + + if (!stream.hasNext()) { + throw new ExpectedModel(stream.getLine()); + } + + String leftBracket = stream.next(); + if (!leftBracket.equals(LEFT_CURLY_BRACKET)) { + throw new ExpectedLeftCurlyBracket(stream.getLine()); + } + + DataFlowModel model = Parser.parseDataFlowModel(stream); + + String rightBracket = stream.next(); + if(!rightBracket.equals(RIGHT_CURLY_BRACKET)) { + throw new ExpectedRightBracket(stream.getLine()); + } + return model; + } + + public static void parseGeometry(TokenStream stream, mxGraph graph) + throws ExpectedRightBracket, ExpectedChannel, ExpectedChannelName, ExpectedLeftCurlyBracket, ExpectedInOrOutOrRefKeyword, ExpectedStateTransition, ExpectedEquals, ExpectedRHSExpression, WrongLHSExpression, WrongRHSExpression, ExpectedAssignment,ExpectedModel, ExpectedGeometry, ExpectedNode, ExpectedResource, ExpectedFormulaChannel, ExpectedIoChannel { + + + String geometry = stream.next(); + if (!geometry.equals(GEOMETRY)) { + throw new ExpectedGeometry(stream.getLine()); + } + + String leftBracket = stream.next(); + if(!leftBracket.equals(LEFT_CURLY_BRACKET)) { + throw new ExpectedLeftCurlyBracket(stream.getLine()); + } + + String node = stream.next(); + while (node.equals(NODE)) { + String rOrFcOrIocOrC = stream.next(); + if (!rOrFcOrIocOrC.equals(RESOURCE) &&!rOrFcOrIocOrC.equals(FORMULA_CHANNEL) &&!rOrFcOrIocOrC.equals(IO_CHANNEL) &&!rOrFcOrIocOrC.equals(CHANNEL)) { + throw new ExpectedNode(stream.getLine()); + } + + String name = stream.next(); + + String colon = stream.next(); + + String x = stream.next(); + int xC = Integer.parseInt(x); // C = Coordinate(���W) + + String comma1 = stream.next(); + + String y = stream.next(); + int yC = Integer.parseInt(y); + + String comma2 = stream.next(); + + String w = stream.next(); + int wC = Integer.parseInt(w); + + String comma3 = stream.next(); + + String h = stream.next(); + int hC = Integer.parseInt(h); + + Object root = graph.getDefaultParent(); + mxIGraphModel graphModel = graph.getModel(); + for (int i = 0; i < graph.getModel().getChildCount(root); i++) { + Object cell = graph.getModel().getChildAt(root, i); + if (graph.getModel().isVertex(cell)) { + mxGeometry geom = (mxGeometry) ((mxCell) cell).getGeometry().clone(); + mxGraphView view = graph.getView(); + mxCellState state = view.getState(cell); + if (name.equals(state.getLabel())){ + geom.setX(xC); + geom.setY(yC); + graphModel.setGeometry(cell, geom); + } + } + } + node = stream.next(); + } + if (!node.equals(RIGHT_CURLY_BRACKET)) { + throw new ExpectedRightBracket(stream.getLine()); + } + } +} + + +