Skip to content
Snippets Groups Projects
Commit 14de3b11 authored by Sebastian Ebert's avatar Sebastian Ebert
Browse files

simplification of syntax and semantics

parent 568608fa
No related branches found
No related tags found
No related merge requests found
...@@ -39,6 +39,7 @@ public final class PnmlConstants { ...@@ -39,6 +39,7 @@ public final class PnmlConstants {
public static final String TRANSITION_SERVICE_SERVER_OUT_KEY = "serverOutput"; 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_CHANNELS_KEY = "channels";
public static final String TRANSITION_SERVICE_CHANNEL_KEY = "channel"; 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_REQUEST_KEY = "request";
public static final String TRANSITION_SERVICE_RESPONSE_KEY = "response"; public static final String TRANSITION_SERVICE_RESPONSE_KEY = "response";
...@@ -48,17 +49,16 @@ public final class PnmlConstants { ...@@ -48,17 +49,16 @@ public final class PnmlConstants {
public static final String SUBNET_KEY = "subnet"; public static final String SUBNET_KEY = "subnet";
public static final String TOPIC_KEY = "topic"; public static final String TOPIC_KEY = "topic";
// bindings // signal keys
public static final String INPUT_SIGNAL_BINDING_KEY = "inputsignalbinding";
public static final String INPUT_SIGNAL_SIGNAL_KEY = "signal";
public static final String TRANSITION_ID_KEY = "transitionID"; public static final String TRANSITION_ID_KEY = "transitionID";
public static final String INPUT_SIGNAL_ID_KEY = "inputsignalID"; public static final String INPUT_SIGNAL_ID_KEY = "inputsignalID";
public static final String PLACE_ID_KEY = "placeID"; 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 CURRENT_VALUE_KEY = "initialvalue";
public static final String CLAUSE_KEY = "inputsignalclause"; 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 // structural keys
public static final String COMMUNICATORS = "communicators"; public static final String COMMUNICATORS = "communicators";
...@@ -71,11 +71,6 @@ public final class PnmlConstants { ...@@ -71,11 +71,6 @@ public final class PnmlConstants {
public static final String SERVICE_CLIENT = "serviceClient"; public static final String SERVICE_CLIENT = "serviceClient";
public static final String SERVICE_SERVER = "serviceServer"; 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 // arc types
public static final String ARC_TYPE_KEY = "type"; public static final String ARC_TYPE_KEY = "type";
public static final String DEFAULT_ARC = "default"; public static final String DEFAULT_ARC = "default";
......
...@@ -78,8 +78,8 @@ aspect Navigation { ...@@ -78,8 +78,8 @@ aspect Navigation {
syn boolean TransitionInformation.isServiceTransitionInformation() = false; syn boolean TransitionInformation.isServiceTransitionInformation() = false;
eq ServiceTransitionInformation.isServiceTransitionInformation() = true; eq ServiceTransitionInformation.isServiceTransitionInformation() = true;
syn boolean TransitionInformation.isDefaultTransitionInformation() = false; syn boolean TransitionInformation.isSignalTransitionInformation() = false;
eq DefaultTransitionInformation.isDefaultTransitionInformation() = true; eq SignalTransitionInformation.isSignalTransitionInformation() = true;
syn boolean TransitionNode.isRefTransition() = false; syn boolean TransitionNode.isRefTransition() = false;
eq RefTransition.isRefTransition() = true; eq RefTransition.isRefTransition() = true;
...@@ -129,8 +129,8 @@ aspect Navigation { ...@@ -129,8 +129,8 @@ aspect Navigation {
syn ServiceTransitionInformation TransitionInformation.asServiceTransitionInformation() = null; syn ServiceTransitionInformation TransitionInformation.asServiceTransitionInformation() = null;
eq ServiceTransitionInformation.asServiceTransitionInformation() = this; eq ServiceTransitionInformation.asServiceTransitionInformation() = this;
syn DefaultTransitionInformation TransitionInformation.asDefaultTransitionInformation() = null; syn SignalTransitionInformation TransitionInformation.asSignalTransitionInformation() = null;
eq DefaultTransitionInformation.asDefaultTransitionInformation() = this; eq SignalTransitionInformation.asSignalTransitionInformation() = this;
syn Place PlaceNode.place(); syn Place PlaceNode.place();
eq Place.place() = this; eq Place.place() = this;
......
...@@ -41,6 +41,27 @@ aspect SignalExpressions { ...@@ -41,6 +41,27 @@ aspect SignalExpressions {
return result; 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); syn boolean ASTNode.evalClause(ClauseValuesDefinition defs);
eq ASTNode.evalClause(ClauseValuesDefinition defs) = false; eq ASTNode.evalClause(ClauseValuesDefinition defs) = false;
......
...@@ -39,10 +39,6 @@ aspect PnDistribution { ...@@ -39,10 +39,6 @@ aspect PnDistribution {
return ToolSpecificsParser.getSubnetFromToolSpecifics(this.getToolspecificList()); return ToolSpecificsParser.getSubnetFromToolSpecifics(this.getToolspecificList());
} }
syn lazy InputSignalClause DefaultTransitionInformation.getInputSignalClause(){
return ToolSpecificsParser.getClauseFromToolSpecifics(this.containingTransition().getToolspecificList());
}
syn lazy CommunicatorInformation PetriNet.getCommunicatorInformation(){ syn lazy CommunicatorInformation PetriNet.getCommunicatorInformation(){
return ToolSpecificsParser.getCommunicatorInformationFromToolSpecifics(this.getToolspecificList()); return ToolSpecificsParser.getCommunicatorInformationFromToolSpecifics(this.getToolspecificList());
} }
......
...@@ -7,7 +7,4 @@ aspect IoPnExtension{ ...@@ -7,7 +7,4 @@ aspect IoPnExtension{
inh DinerosTransition TransitionInformation.containingTransition(); inh DinerosTransition TransitionInformation.containingTransition();
eq DinerosTransition.getChild().containingTransition() = this; eq DinerosTransition.getChild().containingTransition() = this;
syn lazy JastAddList<InputSignalBinding> DefaultTransitionInformation.getInputSignalBinding() {
return PnmlSignalParser.parseInputSignalBindingDefinitions(this.containingTransition().getToolspecificList());
}
} }
// Elements
DinerosTransition : Transition ::= /StaticTransitionInformation:TransitionInformation/ [MutableTransitionInformation:TransitionInformation];
DinerosPlace : Place ::= /StaticPlaceInformation:PlaceInformation/ [MutablePlaceInformation:PlaceInformation];
// General Information // General Information
abstract PnObjectInformation ::= <Node:String> <SubNet:String> <Instance:String> <TraceInfo:String>; abstract PnObjectInformation ::= <Node:String> <SubNet:String> <TraceInfo:String>;
PlaceInformation : PnObjectInformation; 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 // Ports
abstract Port; abstract Port;
abstract TopicPort : Port ::= <PlaceId:String> <Limit:int>; abstract TopicPort : Port ::= <PlaceId:String> <Limit:int>;
SubscriberPort : TopicPort; SubscriberPort : TopicPort;
PublisherPort : TopicPort; PublisherPort : TopicPort;
ServiceChannel : Port ::= <RequestPort:String> <ResponsePort:String>; ServiceChannel : Port ::= <RequestPlaceId:String> <ResponsePlaceId:String> <Id:String>;
\ No newline at end of file
// 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];
...@@ -17,54 +17,6 @@ public class PnmlSignalParser { ...@@ -17,54 +17,6 @@ public class PnmlSignalParser {
private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(PnmlSignalParser.class); 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 { private static Document parseToolSpecifics(JastAddList<ToolInfo> toolInfos) throws ParserConfigurationException, SAXException, IOException {
if (toolInfos == null || toolInfos.getNumChild() == 0) { if (toolInfos == null || toolInfos.getNumChild() == 0) {
......
...@@ -150,6 +150,10 @@ aspect ToolSpecificsParser{ ...@@ -150,6 +150,10 @@ aspect ToolSpecificsParser{
return getElementByKeyFromToolSpecifics(toolInfos, PnmlConstants.NODE_KEY); 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) { public static String getServerInputFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
return getElementByKeyFromToolSpecifics(toolInfos, PnmlConstants.TRANSITION_SERVICE_SERVER_IN_KEY); return getElementByKeyFromToolSpecifics(toolInfos, PnmlConstants.TRANSITION_SERVICE_SERVER_IN_KEY);
} }
...@@ -339,8 +343,9 @@ aspect ToolSpecificsParser{ ...@@ -339,8 +343,9 @@ aspect ToolSpecificsParser{
} }
if(listKey.equals(PnmlConstants.TRANSITION_SERVICE_CHANNELS_KEY)){ if(listKey.equals(PnmlConstants.TRANSITION_SERVICE_CHANNELS_KEY)){
ServiceChannel sc = new ServiceChannel(); ServiceChannel sc = new ServiceChannel();
sc.setRequestPort(portField1); sc.setRequestPlaceId(portField1);
sc.setRequestPort(portField2); sc.setResponsePlaceId(portField2);
sc.setId(pDefElement.getElementsByTagName(PnmlConstants.TRANSITION_SERVICE_CHANNEL_ID_KEY).item(0).getTextContent());
ports.add(sc); ports.add(sc);
} }
} }
...@@ -358,7 +363,7 @@ aspect ToolSpecificsParser{ ...@@ -358,7 +363,7 @@ aspect ToolSpecificsParser{
if (getTransitionTopicFromToolSpecifics(toolInfos) != null) { if (getTransitionTopicFromToolSpecifics(toolInfos) != null) {
TopicTransitionInformation topicTransition = new TopicTransitionInformation(); TopicTransitionInformation topicTransition = new TopicTransitionInformation();
topicTransition.setNode(getNodeFromToolSpecifics(toolInfos)); topicTransition.setNode(getNodeFromToolSpecifics(toolInfos));
topicTransition.setType(getTransitionTypeFromToolSpecifics(toolInfos)); // topicTransition.setType(getTransitionTypeFromToolSpecifics(toolInfos));
topicTransition.setTopic(getTransitionTopicFromToolSpecifics(toolInfos)); topicTransition.setTopic(getTransitionTopicFromToolSpecifics(toolInfos));
topicTransition.setSubNet(getTransitionSubnetInfo(toolInfos)); topicTransition.setSubNet(getTransitionSubnetInfo(toolInfos));
...@@ -386,7 +391,7 @@ aspect ToolSpecificsParser{ ...@@ -386,7 +391,7 @@ aspect ToolSpecificsParser{
if (getTransitionServiceNameFromToolSpecifics(toolInfos) != null) { if (getTransitionServiceNameFromToolSpecifics(toolInfos) != null) {
ServiceTransitionInformation serviceTransition = new ServiceTransitionInformation(); ServiceTransitionInformation serviceTransition = new ServiceTransitionInformation();
serviceTransition.setNode(getNodeFromToolSpecifics(toolInfos)); serviceTransition.setNode(getNodeFromToolSpecifics(toolInfos));
serviceTransition.setType(getTransitionTypeFromToolSpecifics(toolInfos)); // serviceTransition.setType(getTransitionTypeFromToolSpecifics(toolInfos));
serviceTransition.setServiceName(getTransitionServiceNameFromToolSpecifics(toolInfos)); serviceTransition.setServiceName(getTransitionServiceNameFromToolSpecifics(toolInfos));
serviceTransition.setSubNet(getTransitionSubnetInfo(toolInfos)); serviceTransition.setSubNet(getTransitionSubnetInfo(toolInfos));
...@@ -396,15 +401,15 @@ aspect ToolSpecificsParser{ ...@@ -396,15 +401,15 @@ aspect ToolSpecificsParser{
PnmlConstants.TRANSITION_SERVICE_REQUEST_KEY, PnmlConstants.TRANSITION_SERVICE_REQUEST_KEY,
PnmlConstants.TRANSITION_SERVICE_RESPONSE_KEY); PnmlConstants.TRANSITION_SERVICE_RESPONSE_KEY);
for(Port s : servicePorts){ for(Port s : servicePorts){
serviceTransition.addServiceChannel(s.asServiceChannel()); serviceTransition.addClientChannel(s.asServiceChannel());
} }
return serviceTransition; return serviceTransition;
} }
DefaultTransitionInformation transitionInformation = new DefaultTransitionInformation(); SignalTransitionInformation transitionInformation = new SignalTransitionInformation();
transitionInformation.setNode(getNodeFromToolSpecifics(toolInfos)); transitionInformation.setNode(getNodeFromToolSpecifics(toolInfos));
transitionInformation.setType(getTransitionTypeFromToolSpecifics(toolInfos)); //transitionInformation.setType(getTransitionTypeFromToolSpecifics(toolInfos));
transitionInformation.setSubNet(getTransitionSubnetInfo(toolInfos)); transitionInformation.setSubNet(getTransitionSubnetInfo(toolInfos));
return transitionInformation; return transitionInformation;
......
package de.tudresden.inf.st.pnml.base; 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 class Main {
public static void main(String[] args) { public static void main(String[] args) throws IOException, Parser.Exception {
// Nothing to do here // Nothing to do here
// List<PetriNet> petriNets = PnmlParser.parsePnml("..."); // List<PetriNet> petriNets = PnmlParser.parsePnml("...");
......
...@@ -58,6 +58,7 @@ ...@@ -58,6 +58,7 @@
<serverOutput>serverOut</serverOutput> <serverOutput>serverOut</serverOutput>
<channels> <channels>
<channel> <channel>
<cid>c1</cid>
<request>req1</request> <request>req1</request>
<response>res1</response> <response>res1</response>
</channel> </channel>
......
...@@ -24,10 +24,6 @@ ...@@ -24,10 +24,6 @@
<node>n1</node> <node>n1</node>
<subnet>s1</subnet> <subnet>s1</subnet>
<type>discreteTransitionType</type> <type>discreteTransitionType</type>
<inputsignalbinding>
<signal>is1</signal>
<signal>is2</signal>
</inputsignalbinding>
<inputsignalclause>(is1 OR NOT is2) AND (is1 OR is2)</inputsignalclause> <inputsignalclause>(is1 OR NOT is2) AND (is1 OR is2)</inputsignalclause>
</toolspecific> </toolspecific>
<name> <name>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment