From 14de3b11c275a9c24b7ef3a001d6c01b4dd63818 Mon Sep 17 00:00:00 2001 From: SebastianEbert <sebastian.ebert@tu-dresden.de> Date: Tue, 16 May 2023 15:29:07 +0200 Subject: [PATCH] simplification of syntax and semantics --- .../st/pnml/base/constants/PnmlConstants.java | 17 +++---- src/main/jastadd/base/Navigation.jrag | 8 ++-- .../jastadd/base/clauses/expressions.jadd | 21 ++++++++ .../base/distribution/DistributedPN.jadd | 4 -- src/main/jastadd/base/io/IoPN.jadd | 3 -- src/main/jastadd/base/io/IoPN.relast | 26 +++++----- .../base/parsing/PnmlSignalParser.jadd | 48 ------------------- .../base/parsing/ToolSpecificsParser.jadd | 19 +++++--- .../de/tudresden/inf/st/pnml/base/Main.java | 10 +++- src/main/resources/nets/TestNet2.pnml | 1 + src/main/resources/nets/TestNet3.pnml | 4 -- 11 files changed, 65 insertions(+), 96 deletions(-) diff --git a/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java b/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java index 3530895..c9f39d7 100644 --- a/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java +++ b/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java @@ -39,6 +39,7 @@ public final class PnmlConstants { public static final String TRANSITION_SERVICE_SERVER_OUT_KEY = "serverOutput"; public static final String TRANSITION_SERVICE_CHANNELS_KEY = "channels"; public static final String TRANSITION_SERVICE_CHANNEL_KEY = "channel"; + public static final String TRANSITION_SERVICE_CHANNEL_ID_KEY = "cid"; public static final String TRANSITION_SERVICE_REQUEST_KEY = "request"; public static final String TRANSITION_SERVICE_RESPONSE_KEY = "response"; @@ -48,17 +49,16 @@ public final class PnmlConstants { public static final String SUBNET_KEY = "subnet"; public static final String TOPIC_KEY = "topic"; - // bindings - public static final String INPUT_SIGNAL_BINDING_KEY = "inputsignalbinding"; - public static final String INPUT_SIGNAL_SIGNAL_KEY = "signal"; - + // signal keys public static final String TRANSITION_ID_KEY = "transitionID"; public static final String INPUT_SIGNAL_ID_KEY = "inputsignalID"; public static final String PLACE_ID_KEY = "placeID"; - public static final String OUTPUT_SIGNAL_ID_KEY = "outputsignalID"; public static final String CURRENT_VALUE_KEY = "initialvalue"; - public static final String CLAUSE_KEY = "inputsignalclause"; + public static final String INPUT_SIGNALS_DEF = "inputsignals"; + public static final String INPUT_SIGNAL_DEF = "inputsignal"; + public static final String INPUT_SIGNAL_ID_DEF = "inputsignalID"; + public static final String INPUT_SIGNAL_INIT_VALUE_DEF = "initialvalue"; // structural keys public static final String COMMUNICATORS = "communicators"; @@ -71,11 +71,6 @@ public final class PnmlConstants { public static final String SERVICE_CLIENT = "serviceClient"; public static final String SERVICE_SERVER = "serviceServer"; - public static final String INPUT_SIGNALS_DEF = "inputsignals"; - public static final String INPUT_SIGNAL_DEF = "inputsignal"; - public static final String INPUT_SIGNAL_ID_DEF = "inputsignalID"; - public static final String INPUT_SIGNAL_INIT_VALUE_DEF = "initialvalue"; - // arc types public static final String ARC_TYPE_KEY = "type"; public static final String DEFAULT_ARC = "default"; diff --git a/src/main/jastadd/base/Navigation.jrag b/src/main/jastadd/base/Navigation.jrag index 55d925a..0003ecb 100644 --- a/src/main/jastadd/base/Navigation.jrag +++ b/src/main/jastadd/base/Navigation.jrag @@ -78,8 +78,8 @@ aspect Navigation { syn boolean TransitionInformation.isServiceTransitionInformation() = false; eq ServiceTransitionInformation.isServiceTransitionInformation() = true; - syn boolean TransitionInformation.isDefaultTransitionInformation() = false; - eq DefaultTransitionInformation.isDefaultTransitionInformation() = true; + syn boolean TransitionInformation.isSignalTransitionInformation() = false; + eq SignalTransitionInformation.isSignalTransitionInformation() = true; syn boolean TransitionNode.isRefTransition() = false; eq RefTransition.isRefTransition() = true; @@ -129,8 +129,8 @@ aspect Navigation { syn ServiceTransitionInformation TransitionInformation.asServiceTransitionInformation() = null; eq ServiceTransitionInformation.asServiceTransitionInformation() = this; - syn DefaultTransitionInformation TransitionInformation.asDefaultTransitionInformation() = null; - eq DefaultTransitionInformation.asDefaultTransitionInformation() = this; + syn SignalTransitionInformation TransitionInformation.asSignalTransitionInformation() = null; + eq SignalTransitionInformation.asSignalTransitionInformation() = this; syn Place PlaceNode.place(); eq Place.place() = this; diff --git a/src/main/jastadd/base/clauses/expressions.jadd b/src/main/jastadd/base/clauses/expressions.jadd index a5bba72..589a2cb 100644 --- a/src/main/jastadd/base/clauses/expressions.jadd +++ b/src/main/jastadd/base/clauses/expressions.jadd @@ -41,6 +41,27 @@ aspect SignalExpressions { return result; } + syn List<String> InputSignalClause.signals(); + + eq InputSignalClause.signals(){ + + Set<String> literalSet = new HashSet<>(); + + for(Disjunction dj : getDisjunctionList()){ + for(Literal l : dj.getLiteralList()){ + literalSet.add(l.getName()); + } + } + + List<String> retList = new ArrayList<>(); + + for(String s : literalSet){ + retList.add(s); + } + + return retList; + } + syn boolean ASTNode.evalClause(ClauseValuesDefinition defs); eq ASTNode.evalClause(ClauseValuesDefinition defs) = false; diff --git a/src/main/jastadd/base/distribution/DistributedPN.jadd b/src/main/jastadd/base/distribution/DistributedPN.jadd index a47045c..f1cccb2 100644 --- a/src/main/jastadd/base/distribution/DistributedPN.jadd +++ b/src/main/jastadd/base/distribution/DistributedPN.jadd @@ -39,10 +39,6 @@ aspect PnDistribution { return ToolSpecificsParser.getSubnetFromToolSpecifics(this.getToolspecificList()); } - syn lazy InputSignalClause DefaultTransitionInformation.getInputSignalClause(){ - return ToolSpecificsParser.getClauseFromToolSpecifics(this.containingTransition().getToolspecificList()); - } - syn lazy CommunicatorInformation PetriNet.getCommunicatorInformation(){ return ToolSpecificsParser.getCommunicatorInformationFromToolSpecifics(this.getToolspecificList()); } diff --git a/src/main/jastadd/base/io/IoPN.jadd b/src/main/jastadd/base/io/IoPN.jadd index fd19887..bc1c7bd 100644 --- a/src/main/jastadd/base/io/IoPN.jadd +++ b/src/main/jastadd/base/io/IoPN.jadd @@ -7,7 +7,4 @@ aspect IoPnExtension{ inh DinerosTransition TransitionInformation.containingTransition(); eq DinerosTransition.getChild().containingTransition() = this; - syn lazy JastAddList<InputSignalBinding> DefaultTransitionInformation.getInputSignalBinding() { - return PnmlSignalParser.parseInputSignalBindingDefinitions(this.containingTransition().getToolspecificList()); - } } diff --git a/src/main/jastadd/base/io/IoPN.relast b/src/main/jastadd/base/io/IoPN.relast index dfaa8d2..f80c79b 100644 --- a/src/main/jastadd/base/io/IoPN.relast +++ b/src/main/jastadd/base/io/IoPN.relast @@ -1,22 +1,20 @@ +// Elements +DinerosTransition : Transition ::= /StaticTransitionInformation:TransitionInformation/ [MutableTransitionInformation:TransitionInformation]; +DinerosPlace : Place ::= /StaticPlaceInformation:PlaceInformation/ [MutablePlaceInformation:PlaceInformation]; + // General Information -abstract PnObjectInformation ::= <Node:String> <SubNet:String> <Instance:String> <TraceInfo:String>; +abstract PnObjectInformation ::= <Node:String> <SubNet:String> <TraceInfo:String>; PlaceInformation : PnObjectInformation; +// Transition Information +abstract TransitionInformation : PnObjectInformation; +TopicTransitionInformation : TransitionInformation ::= <Topic:String> SubscriberPort:SubscriberPort* PublisherPort:PublisherPort*; +ServiceTransitionInformation : TransitionInformation ::= <ServiceName:String> ServerChannel:ServiceChannel ClientChannel:ServiceChannel*; +SignalTransitionInformation : TransitionInformation ::= Clause:InputSignalClause; /* only normal transition have signals attached */ + // Ports abstract Port; abstract TopicPort : Port ::= <PlaceId:String> <Limit:int>; SubscriberPort : TopicPort; PublisherPort : TopicPort; -ServiceChannel : Port ::= <RequestPort:String> <ResponsePort:String>; - -// Transition Information -InputSignalBinding ::= <InputSignalId:String>; -abstract TransitionInformation : PnObjectInformation ::= <Type:String>; -TopicTransitionInformation : TransitionInformation ::= <Topic:String> SubscriberPort:SubscriberPort* PublisherPort:PublisherPort*; -ServiceTransitionInformation : TransitionInformation ::= <ServiceName:String> <ServerInput:String> <ServerOutput:String> ServiceChannel:ServiceChannel*; -DefaultTransitionInformation : TransitionInformation ::= InputSignal:InputSignalBinding* /Clause:InputSignalClause/; /* only normal transition have signals attached */ - -// Elements -DinerosTransition : Transition ::= /StaticTransitionInformation:TransitionInformation/ [MutableTransitionInformation:TransitionInformation]; -DinerosPlace : Place ::= /StaticPlaceInformation:PlaceInformation/ [MutablePlaceInformation:PlaceInformation]; - +ServiceChannel : Port ::= <RequestPlaceId:String> <ResponsePlaceId:String> <Id:String>; \ No newline at end of file diff --git a/src/main/jastadd/base/parsing/PnmlSignalParser.jadd b/src/main/jastadd/base/parsing/PnmlSignalParser.jadd index 23dc214..29dc90c 100644 --- a/src/main/jastadd/base/parsing/PnmlSignalParser.jadd +++ b/src/main/jastadd/base/parsing/PnmlSignalParser.jadd @@ -17,54 +17,6 @@ public class PnmlSignalParser { private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(PnmlSignalParser.class); - public static JastAddList<InputSignalBinding> parseInputSignalBindingDefinitions(JastAddList<ToolInfo> toolInfos) { - - try { - Document doc = parseToolSpecifics(toolInfos); - return parseInputSignalBindingDefinitionsInternal(doc); - - } catch (ParserConfigurationException | SAXException | IOException e) { - logger.error(e.getMessage()); - } - - return null; - } - - private static JastAddList<InputSignalBinding> parseInputSignalBindingDefinitionsInternal(Document doc) { - - if (doc == null) { - return null; - } - - org.w3c.dom.NodeList isBindingDefList = doc.getElementsByTagName(PnmlConstants.INPUT_SIGNAL_BINDING_KEY); - JastAddList<InputSignalBinding> jastAddBindingList = new JastAddList<>(); - - if (isBindingDefList.getLength() > 0 && isBindingDefList.item(0) != null) { - - org.w3c.dom.Node isBindingsNode = isBindingDefList.item(0); - - - if (isBindingsNode.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) { - - Element isBindingsElement = (Element) isBindingsNode; - - org.w3c.dom.NodeList isBindingNodes = isBindingsElement.getElementsByTagName(PnmlConstants.INPUT_SIGNAL_SIGNAL_KEY); - - for (int i = 0; i < isBindingNodes.getLength(); i++) { - - org.w3c.dom.Node isBindingNode = isBindingNodes.item(i); - Element isBindingElement = (Element) isBindingNode; - - InputSignalBinding isb = new InputSignalBinding(); - isb.setInputSignalId(isBindingElement.getTextContent()); - - jastAddBindingList.add(isb); - } - } - } - return jastAddBindingList; - } - private static Document parseToolSpecifics(JastAddList<ToolInfo> toolInfos) throws ParserConfigurationException, SAXException, IOException { if (toolInfos == null || toolInfos.getNumChild() == 0) { diff --git a/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd b/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd index 7ecb26f..d8e1f21 100644 --- a/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd +++ b/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd @@ -150,6 +150,10 @@ aspect ToolSpecificsParser{ return getElementByKeyFromToolSpecifics(toolInfos, PnmlConstants.NODE_KEY); } + public static String getChannelIdFromToolSpecifics(JastAddList<ToolInfo> toolInfos) { + return getElementByKeyFromToolSpecifics(toolInfos, PnmlConstants.TRANSITION_SERVICE_CHANNEL_ID_KEY); + } + public static String getServerInputFromToolSpecifics(JastAddList<ToolInfo> toolInfos) { return getElementByKeyFromToolSpecifics(toolInfos, PnmlConstants.TRANSITION_SERVICE_SERVER_IN_KEY); } @@ -339,8 +343,9 @@ aspect ToolSpecificsParser{ } if(listKey.equals(PnmlConstants.TRANSITION_SERVICE_CHANNELS_KEY)){ ServiceChannel sc = new ServiceChannel(); - sc.setRequestPort(portField1); - sc.setRequestPort(portField2); + sc.setRequestPlaceId(portField1); + sc.setResponsePlaceId(portField2); + sc.setId(pDefElement.getElementsByTagName(PnmlConstants.TRANSITION_SERVICE_CHANNEL_ID_KEY).item(0).getTextContent()); ports.add(sc); } } @@ -358,7 +363,7 @@ aspect ToolSpecificsParser{ if (getTransitionTopicFromToolSpecifics(toolInfos) != null) { TopicTransitionInformation topicTransition = new TopicTransitionInformation(); topicTransition.setNode(getNodeFromToolSpecifics(toolInfos)); - topicTransition.setType(getTransitionTypeFromToolSpecifics(toolInfos)); + // topicTransition.setType(getTransitionTypeFromToolSpecifics(toolInfos)); topicTransition.setTopic(getTransitionTopicFromToolSpecifics(toolInfos)); topicTransition.setSubNet(getTransitionSubnetInfo(toolInfos)); @@ -386,7 +391,7 @@ aspect ToolSpecificsParser{ if (getTransitionServiceNameFromToolSpecifics(toolInfos) != null) { ServiceTransitionInformation serviceTransition = new ServiceTransitionInformation(); serviceTransition.setNode(getNodeFromToolSpecifics(toolInfos)); - serviceTransition.setType(getTransitionTypeFromToolSpecifics(toolInfos)); + // serviceTransition.setType(getTransitionTypeFromToolSpecifics(toolInfos)); serviceTransition.setServiceName(getTransitionServiceNameFromToolSpecifics(toolInfos)); serviceTransition.setSubNet(getTransitionSubnetInfo(toolInfos)); @@ -396,15 +401,15 @@ aspect ToolSpecificsParser{ PnmlConstants.TRANSITION_SERVICE_REQUEST_KEY, PnmlConstants.TRANSITION_SERVICE_RESPONSE_KEY); for(Port s : servicePorts){ - serviceTransition.addServiceChannel(s.asServiceChannel()); + serviceTransition.addClientChannel(s.asServiceChannel()); } return serviceTransition; } - DefaultTransitionInformation transitionInformation = new DefaultTransitionInformation(); + SignalTransitionInformation transitionInformation = new SignalTransitionInformation(); transitionInformation.setNode(getNodeFromToolSpecifics(toolInfos)); - transitionInformation.setType(getTransitionTypeFromToolSpecifics(toolInfos)); + //transitionInformation.setType(getTransitionTypeFromToolSpecifics(toolInfos)); transitionInformation.setSubNet(getTransitionSubnetInfo(toolInfos)); return transitionInformation; diff --git a/src/main/java/de/tudresden/inf/st/pnml/base/Main.java b/src/main/java/de/tudresden/inf/st/pnml/base/Main.java index fb6a466..ab1fc8b 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/base/Main.java +++ b/src/main/java/de/tudresden/inf/st/pnml/base/Main.java @@ -1,8 +1,16 @@ package de.tudresden.inf.st.pnml.base; +import beaver.Parser; +import de.tudresden.inf.st.pnml.jastadd.model.InputSignalClause; +import de.tudresden.inf.st.pnml.jastadd.parser.ExpressionParser; +import de.tudresden.inf.st.pnml.jastadd.scanner.ExpressionScanner; + +import java.io.IOException; +import java.io.StringReader; + public class Main { - public static void main(String[] args) { + public static void main(String[] args) throws IOException, Parser.Exception { // Nothing to do here // List<PetriNet> petriNets = PnmlParser.parsePnml("..."); diff --git a/src/main/resources/nets/TestNet2.pnml b/src/main/resources/nets/TestNet2.pnml index 995cf03..63df430 100644 --- a/src/main/resources/nets/TestNet2.pnml +++ b/src/main/resources/nets/TestNet2.pnml @@ -58,6 +58,7 @@ <serverOutput>serverOut</serverOutput> <channels> <channel> + <cid>c1</cid> <request>req1</request> <response>res1</response> </channel> diff --git a/src/main/resources/nets/TestNet3.pnml b/src/main/resources/nets/TestNet3.pnml index d1a7cc9..15362bc 100644 --- a/src/main/resources/nets/TestNet3.pnml +++ b/src/main/resources/nets/TestNet3.pnml @@ -24,10 +24,6 @@ <node>n1</node> <subnet>s1</subnet> <type>discreteTransitionType</type> - <inputsignalbinding> - <signal>is1</signal> - <signal>is2</signal> - </inputsignalbinding> <inputsignalclause>(is1 OR NOT is2) AND (is1 OR is2)</inputsignalclause> </toolspecific> <name> -- GitLab