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 {
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";
......
......@@ -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;
......
......@@ -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;
......
......@@ -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());
}
......
......@@ -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());
}
}
// 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
......@@ -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) {
......
......@@ -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;
......
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("...");
......
......@@ -58,6 +58,7 @@
<serverOutput>serverOut</serverOutput>
<channels>
<channel>
<cid>c1</cid>
<request>req1</request>
<response>res1</response>
</channel>
......
......@@ -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>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment