diff --git a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLSyntax.java b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLSyntax.java index a7224d22116b507c44da030291e846e2fcce258e..338e7649def65045852633bc772eb8335dd9e1c3 100644 --- a/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLSyntax.java +++ b/src/main/java/avatartranslator/tosysmlv2/AvatarFromSysMLSyntax.java @@ -2,6 +2,7 @@ package avatartranslator.tosysmlv2; import java.util.ArrayList; import java.util.HashMap; +import java_cup.runtime.ComplexSymbolFactory.Location; public class AvatarFromSysMLSyntax { public static class MyArray<E> extends ArrayList<E> { @@ -68,12 +69,20 @@ public class AvatarFromSysMLSyntax { public static final byte STXASSIGNACTION = 0; public static final byte STXMETHODACTION = 1; /** idents collected while parsing an Avatar SysML Model */ - public static class Ident { + public static class Ident extends StxElement { private byte type; private String sysMLName; private String avatarName; public Ident(byte _type, String _smlName) { + super(); + setTypeName(_type, _smlName); + } + public Ident(Location _left, Location _right, byte _type, String _smlName) { + super(_left, _right); + setTypeName(_type, _smlName); + }; + private void setTypeName(byte _type, String _smlName) { type = _type; if (type == AVATARNAME) { sysMLName = _smlName; @@ -81,22 +90,21 @@ public class AvatarFromSysMLSyntax { } else { sysMLName = _smlName.substring(1, _smlName.length() - 2); if (type == DATATYPENAME) { - avatarName = _smlName.substring(5,_smlName.length() - 2); + avatarName = _smlName.substring(5, _smlName.length() - 2); } else if (type == ATTRIBUTENAME) { - avatarName = _smlName.substring(2,_smlName.length() - 2); + avatarName = _smlName.substring(2, _smlName.length() - 2); } else if (type == SIGNALNAME) { - avatarName = _smlName.substring(6,_smlName.length() - 2); + avatarName = _smlName.substring(6, _smlName.length() - 2); } else if (type == STANDARDSTATENAME) { - avatarName = _smlName.substring(14,_smlName.length() - 2); + avatarName = _smlName.substring(14, _smlName.length() - 2); } else if (type == BLOCKNAME) { - avatarName = _smlName.substring(6,_smlName.length() - 2); + avatarName = _smlName.substring(6, _smlName.length() - 2); } else { avatarName = sysMLName; if (type == QUOTEDNAME) type = AVATARNAME; } } - } public byte getType() { return type; } public String getSysMLName() { return sysMLName; } @@ -129,21 +137,22 @@ public class AvatarFromSysMLSyntax { public abstract static class StxElement { - private int row; - private int column; - public StxElement(int _row, int _column){ row = _row; column = _column; } - public StxElement(){ row = -1; column = -1; } - public void setRowColumn(int _row, int _column) { row = _row; column = _column; } - - public int getRow() { return row; } - public int getColumn() { return column; } + protected Location defaultLocation = new Location(-1,-1); + private Location left; + private Location right; + public StxElement(Location _left, Location _right){ left = _left; right = _right; } + public StxElement(){ left = defaultLocation; right = defaultLocation; } + public void setLeft(Location _left) { left = _left; } + public void setRight(Location _right) { right = _right; } + public Location getLeft() { return left; } + public Location getRight() { return right; } } public static class StxStructure extends StxElement { private String name; private ArrayList<String> fieldNames; private ArrayList<String> fieldTypes; - public StxStructure(int _row, int _column, String _name) { - super(_row, _column); + public StxStructure(Location _left, Location _right, String _name) { + super(_left, _right); name = _name; fieldNames = new ArrayList<String>(); fieldTypes = new ArrayList<String>(); @@ -169,7 +178,7 @@ public class AvatarFromSysMLSyntax { public String getFieldType(int i) { return fieldTypes.get(i);} } public static class StxDataType extends StxStructure { - public StxDataType(int _row, int _column, String _name) { super(_row, _column, _name); } + public StxDataType(Location _left, Location _right, String _name) { super(_left, _right, _name); } public StxDataType(String _name) { super(_name); } } public static class StxRelation extends StxElement { @@ -181,8 +190,8 @@ public class AvatarFromSysMLSyntax { boolean isprivate; int sizeOfFIFO; boolean asynchronous; - public StxRelation(int _row, int _column) { - super(_row, _column); + public StxRelation(Location _left, Location _right) { + super(_left, _right); channels = new ArrayList<StxChannel>(); isprivate = false; lossy = false; @@ -216,7 +225,7 @@ public class AvatarFromSysMLSyntax { public StxChannel getChannel(int i) { return channels.get(i); } } public static class StxMethod extends StxStructure { - public StxMethod(int _row, int _column, String _name) { super(_row, _column, _name); returnType = null; } + public StxMethod(Location _left, Location _right, String _name) { super(_left, _right, _name); returnType = null; } public StxMethod(String _name) { super(_name); returnType = null; } private String returnType; public String getReturnType() { return returnType; } @@ -228,8 +237,8 @@ public class AvatarFromSysMLSyntax { String name; String type; String init; - public StxAttribute(int _row, int _column, String _name, String _type){ - super(_row, _column); + public StxAttribute(Location _left, Location _right, String _name, String _type){ + super(_left, _right); name = _name; type = _type; init = null; @@ -248,8 +257,8 @@ public class AvatarFromSysMLSyntax { public static class StxTimer extends StxElement { String name; - public StxTimer(int _row, int _column, String _name){ - super(_row, _column); + public StxTimer(Location _left, Location _right, String _name){ + super(_left, _right); name = _name; } public StxTimer(String _name){ @@ -266,8 +275,8 @@ public class AvatarFromSysMLSyntax { ArrayList<StxSignal> signals; ArrayList<StxTimer> timers; HashMap<String, StxState> states; - public StxBlock(int _row, int _column, String _name) { - super(_row, _column); + public StxBlock(Location _left, Location _right, String _name) { + super(_left, _right); name = _name; father = null; attributes = new ArrayList<StxAttribute>(); @@ -329,8 +338,8 @@ public class AvatarFromSysMLSyntax { private StxSignal signalA; private String blockB; private StxSignal signalB; - public StxChannel(int _row, int _column){ - super(_row, _column); + public StxChannel(Location _left, Location _right){ + super(_left, _right); inProfile = null; outProfile = null; blockA = null; @@ -375,8 +384,8 @@ public class AvatarFromSysMLSyntax { public static class StxSignal extends StxElement { private String name; private boolean input; - public StxSignal(int _row, int _column, String _name){ - super(_row, _column); + public StxSignal(Location _left, Location _right, String _name){ + super(_left, _right); name = _name; } public StxSignal(String _name){ @@ -389,7 +398,7 @@ public class AvatarFromSysMLSyntax { } public static class StxInMessage extends StxStructure { private StxChannel channel; - public StxInMessage(int _row, int _column, String _name) { super(_row, _column, _name ); } + public StxInMessage(Location _left, Location _right, String _name) { super(_left, _right, _name ); } public StxInMessage(String _name) { super(_name); } public void setChannel(StxChannel _c) { channel = _c; } public StxChannel getChannel() { return channel; } @@ -397,8 +406,8 @@ public class AvatarFromSysMLSyntax { public static class StxOutMessage extends StxElement { private StxInMessage inMessage; private HashMap<String,String> fieldMap; - public StxOutMessage(int _row, int _column, StxInMessage _inMessage) { - super(_row, _column); + public StxOutMessage(Location _left, Location _right, StxInMessage _inMessage) { + super(_left, _right); inMessage = _inMessage; fieldMap = new HashMap<String,String>(); } @@ -418,7 +427,7 @@ public class AvatarFromSysMLSyntax { public StxInMessage getInMessage() { return inMessage; } public HashMap<String,String> getFieldMap() { return fieldMap; } } - public static class StxState { + public static class StxState extends StxElement { private byte type; private String name; private StxSignal signal; @@ -457,7 +466,7 @@ public class AvatarFromSysMLSyntax { return result; } } - public static class StxTransition { + public static class StxTransition extends StxElement { private byte type; private final int index; private String guard; @@ -472,7 +481,11 @@ public class AvatarFromSysMLSyntax { private HashMap<String,String> delayExtra; private StxState target; private ArrayList<StxAction> actions; + private Location rleft; + private Location rright; + public StxTransition(int _index){ + super(); type = -1; index = _index; guard = null; @@ -485,6 +498,8 @@ public class AvatarFromSysMLSyntax { delayExtra = null; target = null; actions = new ArrayList<StxAction>(); + rleft = defaultLocation; + rright = defaultLocation; } public void setType(byte _t) { type = _t; }; public void setGuard(String _s) { guard = _s; } @@ -499,6 +514,8 @@ public class AvatarFromSysMLSyntax { public void setDelayExtra(HashMap<String,String> _m) { delayExtra = _m; } public void setTarget(StxState _s) { target = _s; } public void setActions(ArrayList<StxAction> _a) { actions = _a; } + public void setRleft(Location _l) { rleft = _l; } + public void setRright(Location _l) { rright = _l; } public byte getType() { return type; } public int getIndex() { return index; } public String getGuard() { return guard; } @@ -513,16 +530,31 @@ public class AvatarFromSysMLSyntax { public HashMap<String,String> getDelayExtra() { return delayExtra; } public StxState getTarget() { return target; } public ArrayList<StxAction> getActions() { return actions; } + public Location setRleft() { return rleft; } + public Location setRright() { return rright; } } - public static class StxAction{ + public static class StxAction extends StxElement { private byte type; private String value; private String target; public StxAction (String _value) { + super(); + type = STXMETHODACTION; + value = _value; + } + public StxAction (Location _left, Location _right, String _value) { + super(_left, _right); type = STXMETHODACTION; value = _value; } public StxAction (String _target, String _value) { + super(); + type = STXASSIGNACTION; + value = _value; + target = _target; + } + public StxAction (Location _left, Location _right, String _target, String _value) { + super(_left, _right); type = STXASSIGNACTION; value = _value; target = _target; diff --git a/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup b/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup index ea56871b9b8ad6eaf566bc96219a4e74e4da70b5..2c098f201446fb87e33da349297c7b58a86f67f6 100644 --- a/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup +++ b/src/main/java/avatartranslator/tosysmlv2/javacup/AvatarFromSysML.jcup @@ -1,7 +1,6 @@ package avatartranslator.tosysmlv2; import java_cup.runtime.*; -import java_cup.runtime.ComplexSymbolFactory.*; import java.util.ArrayList; import java.util.HashMap; import avatartranslator.tosysmlv2.AvatarFromSysMLSyntax.*; @@ -94,7 +93,6 @@ parser code {: private void getAttribute(String _name, String _type) { theAttribute = new StxAttribute(_name, _type); } - private StxMethod theMethod; private void getMethod(String _name) { theStructure = new StxMethod(_name); } @@ -232,27 +230,31 @@ subsets ::= SUBSETS | REFINES; // BLOCK ALIASES blockAlias ::= - PART IDENT COLON AVBLOCK_T subsets blockChain EQUAL blockChain SEMICOLON {: :} + PART IDENT COLON AVBLOCK_T subsets blockChain EQUAL blockChain SEMICOLON ; blockChain::= - IDENT {: :} - | IDENT blockChain {: :} + IDENT + | IDENT POINT blockChain ; // DATATYPE DECLARATION $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ datatypeDecl ::= - datatypeDeclHEADER LBRAC fieldDecls RBRAC - | datatypeDeclHEADER LBRAC RBRAC + datatypeDeclHEADER LBRAC fieldDecls RBRAC:b {: + theStructure.setRight(bxright); + :} + | datatypeDeclHEADER LBRAC RBRAC:b {: + theStructure.setRight(bxright); + :} ; -datatypeDeclHEADER ::= ATTRIBUTE DEF IDENT:id specializes AVDATATYPE_T {: +datatypeDeclHEADER ::= ATTRIBUTE:a DEF IDENT:id specializes AVDATATYPE_T {: theStructure = dataTypeMap.get(id.getAvatarName()); if (theStructure == null) { theStructure = new StxDataType(id.getAvatarName()); dataTypeMap.put(id.getAvatarName(), (StxDataType) theStructure); } - else addError("Datatype " + id.getAvatarName() + " has already been declared\n"); + theStructure.setLeft(axleft); :}; -fieldDecls ::= fieldDecl {: :} | fieldDecl fieldDecls {: :} +fieldDecls ::= fieldDecl | fieldDecl fieldDecls ; fieldDecl ::= ATTRIBUTE IDENT:id COLON typeIdent:tp SEMICOLON {: theStructure.addField(id.getAvatarName(),tp); :} ; @@ -264,31 +266,37 @@ typeIdent ::= // RELATION DECLARATION $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ relationDecl ::= syncRelDecl | nbfRelDecl | bfRelDecl; -syncRelDecl ::= syncRelDeclBegin relParams RPAR SEMICOLON {: :} -; +syncRelDecl ::= syncRelDeclBegin relParams RPAR SEMICOLON:x {: + theRelation.setRight(xxright); +:}; syncRelDeclBegin ::= - PART IDENT:id COLON SYNCREL_T EQUAL SYNCREL_T LPAR {: + PART:p IDENT:id COLON SYNCREL_T EQUAL SYNCREL_T LPAR {: Location l = idxleft; getRelation(id.getAvatarName()); theRelation.setAsynchronous(false); + theRelation.setLeft(pxleft); clearRelationParams(); :}; -nbfRelDecl ::= nbfRelDeclBegin relParams RPAR SEMICOLON {: :} -; +nbfRelDecl ::= nbfRelDeclBegin relParams RPAR SEMICOLON:x {: + theRelation.setRight(xxright); +:}; nbfRelDeclBegin ::= - PART IDENT:id COLON NBFIFOREL_T EQUAL NBFIFOREL_T LPAR {: + PART:p IDENT:id COLON NBFIFOREL_T EQUAL NBFIFOREL_T LPAR {: getRelation(id.getAvatarName()); theRelation.setAsynchronous(true); theRelation.setBlocking(false); + theRelation.setLeft(pxleft); clearRelationParams(); :}; -bfRelDecl ::= bfRelDeclBegin relParams RPAR SEMICOLON {: :} -; +bfRelDecl ::= bfRelDeclBegin relParams RPAR SEMICOLON:x {: + theRelation.setRight(xxright); +:}; bfRelDeclBegin ::= - PART IDENT:id COLON BFIFOREL_T EQUAL BFIFOREL_T LPAR {: + PART:p IDENT:id COLON BFIFOREL_T EQUAL BFIFOREL_T LPAR {: getRelation(id.getAvatarName()); theRelation.setAsynchronous(true); theRelation.setBlocking(true); + theRelation.setLeft(pxleft); clearRelationParams(); :}; @@ -342,20 +350,26 @@ lossyParam ::= LOSSY_F EQUAL BOOL:b {: // CHANNEL DECLARATION $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ channelDecl ::= syncChDecl | nbfChDecl |bfChDecl; -syncChDecl ::= PART IDENT:id COLON SYNC_T EQUAL SYNC_T LPAR RELATION_F EQUAL IDENT:rl RPAR SEMICOLON {: +syncChDecl ::= PART:p IDENT:id COLON SYNC_T EQUAL SYNC_T LPAR RELATION_F EQUAL IDENT:rl RPAR SEMICOLON:s {: getRelation(rl.getAvatarName()); getChannel(id.getAvatarName()); theRelation.addChannel(theChannel); + theChannel.setLeft(pxleft); + theChannel.setRight(sxright); :}; -nbfChDecl ::= PART IDENT:id COLON NBFIFO_T EQUAL NBFIFO_T LPAR RELATION_F EQUAL IDENT:rl RPAR SEMICOLON {: +nbfChDecl ::= PART:p IDENT:id COLON NBFIFO_T EQUAL NBFIFO_T LPAR RELATION_F EQUAL IDENT:rl RPAR SEMICOLON:s {: getRelation(rl.getAvatarName()); getChannel(id.getAvatarName()); theRelation.addChannel(theChannel); + theChannel.setLeft(pxleft); + theChannel.setRight(sxright); :}; -bfChDecl ::= PART IDENT:id COLON BFIFO_T EQUAL BFIFO_T LPAR RELATION_F EQUAL IDENT:rl RPAR SEMICOLON {: +bfChDecl ::= PART:p IDENT:id COLON BFIFO_T EQUAL BFIFO_T LPAR RELATION_F EQUAL IDENT:rl RPAR SEMICOLON:s {: getRelation(rl.getAvatarName()); getChannel(id.getAvatarName()); theRelation.addChannel(theChannel); + theChannel.setLeft(pxleft); + theChannel.setRight(sxright); :}; // SIGNAL BINDING $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ @@ -370,30 +384,30 @@ inSignalBinding ::= theChannel.setSignal(b.getAvatarName(), theSignal); :} | BINDING COLON INSIGNALBINDING_T BIND IDENT:c EQUAL IDENT:b POINT IDENT:s SEMICOLON {: - getChannel(c.getAvatarName()); - getBlock(b.getAvatarName()); - getSignal(b.getAvatarName(),s.getAvatarName()); - theSignal.setInput(true); - theBlock.addSignal(theSignal); - theChannel.setSignal(b.getAvatarName(), theSignal); + getChannel(c.getAvatarName()); + getBlock(b.getAvatarName()); + getSignal(b.getAvatarName(),s.getAvatarName()); + theSignal.setInput(true); + theBlock.addSignal(theSignal); + theChannel.setSignal(b.getAvatarName(), theSignal); :} ; outSignalBinding ::= BINDING COLON OUTSIGNALBINDING_T BIND IDENT:b POINT IDENT:s EQUAL IDENT:c SEMICOLON {: - getChannel(c.getAvatarName()); - getBlock(b.getAvatarName()); - getSignal(b.getAvatarName(),s.getAvatarName()); - theSignal.setInput(false); - theBlock.addSignal(theSignal); - theChannel.setSignal(b.getAvatarName(), theSignal); + getChannel(c.getAvatarName()); + getBlock(b.getAvatarName()); + getSignal(b.getAvatarName(),s.getAvatarName()); + theSignal.setInput(false); + theBlock.addSignal(theSignal); + theChannel.setSignal(b.getAvatarName(), theSignal); :} | BINDING COLON OUTSIGNALBINDING_T BIND IDENT:c EQUAL IDENT:b POINT IDENT:s SEMICOLON {: - getChannel(c.getAvatarName()); - getBlock(b.getAvatarName()); - getSignal(b.getAvatarName(),s.getAvatarName()); - theSignal.setInput(false); - theBlock.addSignal(theSignal); - theChannel.setSignal(b.getAvatarName(), theSignal); + getChannel(c.getAvatarName()); + getBlock(b.getAvatarName()); + getSignal(b.getAvatarName(),s.getAvatarName()); + theSignal.setInput(false); + theBlock.addSignal(theSignal); + theChannel.setSignal(b.getAvatarName(), theSignal); :} ; @@ -402,13 +416,20 @@ messageDecl ::= inMessageDecl | outMessageDecl ; inMessageDecl ::= inMessageDeclBegin inMessageDeclBODY ; -inMessageDeclBegin ::= PART DEF IDENT:id specializes INMESSAGE_T LBRAC {: +inMessageDeclBegin ::= PART:p DEF IDENT:id specializes INMESSAGE_T LBRAC {: getInMessage(id.getAvatarName()); + theStructure.setLeft(pxleft); :}; inMessageDeclBODY ::= - messageChannel RBRAC - | messageChannel fieldDecls RBRAC - | fieldDecls messageChannel RBRAC + messageChannel RBRAC:b {: + theStructure.setRight(bxright); + :} + | messageChannel fieldDecls RBRAC:b {: + theStructure.setRight(bxright); + :} + | fieldDecls messageChannel RBRAC:b {: + theStructure.setRight(bxright); + :} ; messageChannel ::= PRIVATE PART CHANNEL_F COLON CHANNEL_T EQUAL IDENT:ch SEMICOLON {: @@ -421,22 +442,30 @@ messageChannel ::= :} ; outMessageDecl ::= - outMessageDeclBegin SEMICOLON - | outMessageDeclBegin LBRAC RBRAC + outMessageDeclBegin SEMICOLON:b {: + theOutMessage.setRight(bxright); + :} + | outMessageDeclBegin LBRAC RBRAC:b {: + theOutMessage.setRight(bxright); + :} | outMessageDeclBegin LBRAC outMessageDeclBODY ; outMessageDeclBegin ::= - PART DEF IDENT:id specializes OUTMESSAGE_T COMMA IDENT:m {: + PART:p DEF IDENT:id specializes OUTMESSAGE_T COMMA IDENT:m {: getInMessage(m.getAvatarName()); getOutMessage(id.getAvatarName(), (StxInMessage)theStructure); + theOutMessage.setLeft(pxleft); :} - | PART DEF IDENT:id specializes IDENT:m COMMA OUTMESSAGE_T {: + | PART:p DEF IDENT:id specializes IDENT:m COMMA OUTMESSAGE_T {: getInMessage(m.getAvatarName()); getOutMessage(id.getAvatarName(), (StxInMessage)theStructure); + theOutMessage.setLeft(pxleft); :} ; outMessageDeclBODY ::= - redefineField RBRAC + redefineField RBRAC:b {: + theOutMessage.setRight(bxright); + :} | redefineField outMessageDeclBODY ; redefineField ::= @@ -450,14 +479,17 @@ blockDecl ::= | blockDeclBegin blockDeclBODY {: popBlock(); :} ; blockDeclBegin ::= - PART IDENT:id COLON AVBLOCK_T LBRAC {: + PART:p IDENT:id COLON AVBLOCK_T LBRAC {: StxBlock tmp = theBlock; pushBlock(); getBlock(id.getAvatarName()); theBlock.setFather(tmp); + theBlock.setLeft(pxleft); :}; blockDeclBODY ::= - blockItem RBRAC + blockItem RBRAC:b {: + theBlock.setRight(bxright); + :} | blockItem blockDeclBODY ; blockItem ::= @@ -471,43 +503,51 @@ blockItem ::= // ATTRIBUTE DECLARATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% attributeDecl ::= - attributeDeclHEADER SEMICOLON {: lexer.setGetStringValue(false); :} - | attributeDeclHEADER GETS STRINGEXPR:e SEMICOLON {: + attributeDeclHEADER SEMICOLON:q {: + lexer.setGetStringValue(false); + theAttribute.setRight(qxright); + :} + | attributeDeclHEADER GETS STRINGEXPR:e SEMICOLON:q {: lexer.setGetStringValue(false); theAttribute.setInit(e); + theAttribute.setRight(qxright); :} ; attributeDeclHEADER ::= - ATTRIBUTE IDENT:id COLON typIdent:tp {: + ATTRIBUTE:a IDENT:id COLON typIdent:tp {: getAttribute(id.getAvatarName(), (String) tp); theBlock.addAttribute(theAttribute); + theAttribute.setLeft(axleft); lexer.setGetStringValue(true); -:} -; -typIdent ::= - INTEGER_T {: RESULT = "Integer"; :} - | BOOLEAN_T {: RESULT = "Boolean"; :} - | IDENT:id {: RESULT = id.getAvatarName(); :} -; - +:}; // METHOD DECLARATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% methodDecl ::= voidMethodDecl | calcMethodDecl; voidMethodDecl ::= - voidMethodDeclBegin LBRAC RBRAC - | voidMethodDeclBegin LBRAC fieldDecls RBRAC + voidMethodDeclBegin LBRAC RBRAC:b {: + theStructure.setRight(bxright); + :} + | voidMethodDeclBegin LBRAC fieldDecls RBRAC:b {: + theStructure.setRight(bxright); + :} ; -voidMethodDeclBegin ::= ACTION IDENT:id COLON AVVOIDMETHOD_T {: +voidMethodDeclBegin ::= ACTION:a IDENT:id COLON AVVOIDMETHOD_T {: getMethod(id.getAvatarName()); - theBlock.addMethod(theMethod); + theBlock.addMethod((StxMethod)theStructure); + theStructure.setLeft(axleft); :}; calcMethodDecl ::= - calcMethodDeclBegin LBRAC RBRAC - | calcMethodDeclBegin LBRAC calcMethodItems RBRAC + calcMethodDeclBegin LBRAC RBRAC:b {: + theStructure.setRight(bxright); + :} + | calcMethodDeclBegin LBRAC calcMethodItems RBRAC:b {: + theStructure.setRight(bxright); + :} ; -calcMethodDeclBegin ::= CALC IDENT:id COLON AVCALCMETHOD_T {: +calcMethodDeclBegin ::= CALC:c IDENT:id COLON AVCALCMETHOD_T {: getMethod(id.getAvatarName()); - theBlock.addMethod(theMethod); + theBlock.addMethod((StxMethod)theStructure); + theStructure.setLeft(cxleft); :}; calcMethodItems ::= calcMethodItem @@ -522,23 +562,27 @@ calcMethodItem ::= // SIGNAL DECLARATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% signalDecl ::= - PART IDENT:id COLON FIFO_T SEMICOLON {: + PART:p IDENT:id COLON FIFO_T SEMICOLON:q {: getSignal(theBlock.getName(),id.getAvatarName()); theBlock.addSignal(theSignal); + theSignal.setLeft(pxleft); + theSignal.setRight(qxright); :} - | PART IDENT:id COLON CHANNEL_T SEMICOLON {: + | PART:p IDENT:id COLON CHANNEL_T SEMICOLON:q {: getSignal(theBlock.getName(),id.getAvatarName()); theBlock.addSignal(theSignal); + theSignal.setLeft(pxleft); + theSignal.setRight(qxright); :} ; // TIMER DECLARATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% timerDecl ::= - PART IDENT:id COLON AVTIMER_T EQUAL AVTIMER_T LPAR RPAR SEMICOLON {: - theBlock.addTimer(new StxTimer(id.getAvatarName())); + PART:p IDENT:id COLON AVTIMER_T EQUAL AVTIMER_T LPAR RPAR SEMICOLON:q {: + theBlock.addTimer(new StxTimer(pxleft, qxright, id.getAvatarName())); :} - | PART IDENT:id COLON AVTIMER_T SEMICOLON {: - theBlock.addTimer(new StxTimer(id.getAvatarName())); + | PART:p IDENT:id COLON AVTIMER_T SEMICOLON:q {: + theBlock.addTimer(new StxTimer(pxleft, qxright, id.getAvatarName())); :} ; @@ -573,118 +617,192 @@ state ::= standardState | stopState | startState | sendState | receiveState | setTimerState | resetTimerState | expireTimerState ; startState ::= - startStateBegin SEMICOLON - | startStateBegin EQUAL AVSTARTSTATE_T LPAR RPAR SEMICOLON - | startStateBegin EQUAL AVSTARTSTATE_T LPAR requestParam RPAR SEMICOLON + startStateBegin SEMICOLON:q {: + theState.setRight(qxright); + :} + | startStateBegin EQUAL AVSTARTSTATE_T LPAR RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} + | startStateBegin EQUAL AVSTARTSTATE_T LPAR requestParam RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} ; -startStateBegin ::= ENTRY ACTION IDENT:id COLON AVSTARTSTATE_T {: +startStateBegin ::= ENTRY:z ACTION IDENT:id COLON AVSTARTSTATE_T {: getState(id.getAvatarName()); theState.setType(AvatarFromSysMLSyntax.STXSTARTSTATE); + theState.setLeft(zxright); requestIndex = 1; :}; standardState ::= - standardStateBegin SEMICOLON - | standardStateBegin EQUAL AVSTANDARDSTATE_T LPAR RPAR SEMICOLON - | standardStateBegin EQUAL AVSTANDARDSTATE_T LPAR poolParam RPAR SEMICOLON + standardStateBegin SEMICOLON:q {: + theState.setRight(qxright); + :} + | standardStateBegin EQUAL AVSTANDARDSTATE_T LPAR RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} + | standardStateBegin EQUAL AVSTANDARDSTATE_T LPAR poolParam RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} ; -standardStateBegin ::= STATE IDENT:id COLON AVSTANDARDSTATE_T {: +standardStateBegin ::= STATE:z IDENT:id COLON AVSTANDARDSTATE_T {: getState(id.getAvatarName()); theState.setType(AvatarFromSysMLSyntax.STXSTANDARDSTATE); theState.setName(id.getAvatarName()); + theState.setLeft(zxright); requestIndex = 1; :}; stopState ::= - stopStateBegin SEMICOLON - | stopStateBegin EQUAL AVSTOPSTATE_T LPAR RPAR SEMICOLON + stopStateBegin SEMICOLON:q {: + theState.setRight(qxright); + :} + | stopStateBegin EQUAL AVSTOPSTATE_T LPAR RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} ; -stopStateBegin ::= STATE IDENT:id COLON AVSTOPSTATE_T {: +stopStateBegin ::= EXIT:z ACTION IDENT:id COLON AVSTOPSTATE_T {: getState(id.getAvatarName()); theState.setType(AvatarFromSysMLSyntax.STXSTOPSTATE); + theState.setLeft(zxright); :}; sendState ::= - sendStateBegin SEMICOLON - | sendStateBegin EQUAL AVSENDSTATE_T LPAR RPAR SEMICOLON - | sendStateBegin EQUAL AVSENDSTATE_T LPAR requestParam RPAR SEMICOLON + sendStateBegin SEMICOLON:q {: + theState.setRight(qxright); + :} + | sendStateBegin EQUAL AVSENDSTATE_T LPAR RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} + | sendStateBegin EQUAL AVSENDSTATE_T LPAR requestParam RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} ; -sendStateBegin ::= STATE IDENT:id COLON AVSENDSTATE_T {: +sendStateBegin ::= STATE:z IDENT:id COLON AVSENDSTATE_T {: getState(id.getAvatarName()); theState.setType(AvatarFromSysMLSyntax.STXSENDSTATE); + theState.setLeft(zxright); requestIndex = 1; :}; receiveState ::= - receiveStateBegin SEMICOLON - | receiveStateBegin EQUAL AVRECEIVESTATE_T LPAR RPAR SEMICOLON - | receiveStateBegin EQUAL AVRECEIVESTATE_T LPAR requestParam RPAR SEMICOLON + receiveStateBegin SEMICOLON:q {: + theState.setRight(qxright); + :} + | receiveStateBegin EQUAL AVRECEIVESTATE_T LPAR RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} + | receiveStateBegin EQUAL AVRECEIVESTATE_T LPAR requestParam RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} ; -receiveStateBegin ::= STATE IDENT:id COLON AVRECEIVESTATE_T {: +receiveStateBegin ::= STATE:z IDENT:id COLON AVRECEIVESTATE_T {: getState(id.getAvatarName()); theState.setType(AvatarFromSysMLSyntax.STXRECEIVESTATE); + theState.setLeft(zxright); requestIndex = 1; :}; randomState ::= - randomStateBegin EQUAL AVRANDOMSTATE_T LPAR randomAction requestParam RPAR SEMICOLON - | randomStateBegin EQUAL AVRANDOMSTATE_T LPAR requestParam randomAction RPAR SEMICOLON - | randomStateBegin EQUAL AVRANDOMSTATE_T LPAR randomAction RPAR SEMICOLON + randomStateBegin EQUAL AVRANDOMSTATE_T LPAR randomAction requestParam RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} + | randomStateBegin EQUAL AVRANDOMSTATE_T LPAR requestParam randomAction RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} + | randomStateBegin EQUAL AVRANDOMSTATE_T LPAR randomAction RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} ; -randomStateBegin ::= STATE IDENT:id COLON AVRANDOMSTATE_T {: +randomStateBegin ::= STATE:z IDENT:id COLON AVRANDOMSTATE_T {: getState(id.getAvatarName()); theState.setType(AvatarFromSysMLSyntax.STXRANDOMSTATE); + theState.setLeft(zxright); requestIndex = 1; :}; countState ::= - countStateBegin EQUAL AVCOUNTSTATE_T LPAR countAction RPAR SEMICOLON - | countStateBegin EQUAL AVCOUNTSTATE_T LPAR requestParam countAction RPAR SEMICOLON - | countStateBegin EQUAL AVCOUNTSTATE_T LPAR countAction requestParam RPAR SEMICOLON + countStateBegin EQUAL AVCOUNTSTATE_T LPAR countAction RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} + | countStateBegin EQUAL AVCOUNTSTATE_T LPAR requestParam countAction RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} + | countStateBegin EQUAL AVCOUNTSTATE_T LPAR countAction requestParam RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} ; -countStateBegin ::= STATE IDENT:id COLON AVCOUNTSTATE_T {: +countStateBegin ::= STATE:z IDENT:id COLON AVCOUNTSTATE_T {: getState(id.getAvatarName()); theState.setType(AvatarFromSysMLSyntax.STXCOUNTSTATE); + theState.setLeft(zxright); requestIndex = 1; :}; presendState ::= - presendStateBegin EQUAL AVPRESENDSTATE_T LPAR requestParam RPAR SEMICOLON + presendStateBegin EQUAL AVPRESENDSTATE_T LPAR requestParam RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} ; -presendStateBegin ::= STATE IDENT:id COLON AVPRESENDSTATE_T {: +presendStateBegin ::= STATE:z IDENT:id COLON AVPRESENDSTATE_T {: getState(id.getAvatarName()); theState.setType(AvatarFromSysMLSyntax.STXPRESENDSTATE); + theState.setLeft(zxright); requestIndex = 1; :}; prereceiveState ::= - prereceiveStateBegin EQUAL AVPRERECEIVESTATE_T LPAR requestParam RPAR SEMICOLON + prereceiveStateBegin EQUAL AVPRERECEIVESTATE_T LPAR requestParam RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} ; -prereceiveStateBegin ::= STATE IDENT:id COLON AVPRERECEIVESTATE_T {: +prereceiveStateBegin ::= STATE:z IDENT:id COLON AVPRERECEIVESTATE_T {: getState(id.getAvatarName()); theState.setType(AvatarFromSysMLSyntax.STXPRERECEIVESTATE); + theState.setLeft(zxright); requestIndex = 1; :}; setTimerState ::= - setTimerStateBegin EQUAL AVSETTIMERSTATE_T LPAR requestParam RPAR SEMICOLON - | setTimerStateBegin EQUAL AVSETTIMERSTATE_T LPAR RPAR SEMICOLON - | setTimerStateBegin SEMICOLON + setTimerStateBegin EQUAL AVSETTIMERSTATE_T LPAR requestParam RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} + | setTimerStateBegin EQUAL AVSETTIMERSTATE_T LPAR RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} + | setTimerStateBegin SEMICOLON:q {: + theState.setRight(qxright); + :} ; -setTimerStateBegin ::= STATE IDENT:id COLON AVSETTIMERSTATE_T {: +setTimerStateBegin ::= STATE:z IDENT:id COLON AVSETTIMERSTATE_T {: getState(id.getAvatarName()); theState.setType(AvatarFromSysMLSyntax.STXSETTIMERSTATE); + theState.setLeft(zxright); requestIndex = 1; :}; resetTimerState ::= - resetTimerStateBegin EQUAL AVRESETTIMERSTATE_T LPAR requestParam RPAR SEMICOLON - | resetTimerStateBegin EQUAL AVRESETTIMERSTATE_T LPAR RPAR SEMICOLON - | resetTimerStateBegin SEMICOLON + resetTimerStateBegin EQUAL AVRESETTIMERSTATE_T LPAR requestParam RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} + | resetTimerStateBegin EQUAL AVRESETTIMERSTATE_T LPAR RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} + | resetTimerStateBegin SEMICOLON:q {: + theState.setRight(qxright); + :} ; -resetTimerStateBegin ::= STATE IDENT:id COLON AVRESETTIMERSTATE_T {: +resetTimerStateBegin ::= STATE:z IDENT:id COLON AVRESETTIMERSTATE_T {: getState(id.getAvatarName()); theState.setType(AvatarFromSysMLSyntax.STXRESETTIMERSTATE); + theState.setLeft(zxright); requestIndex = 1; :}; expireTimerState ::= - expireTimerStateBegin EQUAL AVEXPIRETIMERSTATE_T LPAR requestParam RPAR SEMICOLON - | expireTimerStateBegin EQUAL AVEXPIRETIMERSTATE_T LPAR RPAR SEMICOLON - | expireTimerStateBegin SEMICOLON + expireTimerStateBegin EQUAL AVEXPIRETIMERSTATE_T LPAR requestParam RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} + | expireTimerStateBegin EQUAL AVEXPIRETIMERSTATE_T LPAR RPAR SEMICOLON:q {: + theState.setRight(qxright); + :} + | expireTimerStateBegin SEMICOLON:q {: + theState.setRight(qxright); + :} ; -expireTimerStateBegin ::= STATE IDENT:id COLON AVEXPIRETIMERSTATE_T {: +expireTimerStateBegin ::= STATE:z IDENT:id COLON AVEXPIRETIMERSTATE_T {: getState(id.getAvatarName()); theState.setType(AvatarFromSysMLSyntax.STXEXPIRETIMERSTATE); + theState.setLeft(zxright); requestIndex = 1; :}; @@ -694,11 +812,17 @@ poolParam ::= POOL_F EQUAL requestList; requestParam ::= REQUEST_F EQUAL request; requestList ::= request | request COMMA requestList; request ::= - IF STRINGEXPR:e simpleRequest ELSE NOKREQUEST_U LPAR INT RPAR {: + IF:i STRINGEXPR:e simpleRequest:q ELSE NOKREQUEST_U LPAR INT RPAR {: theTransition.setGuard(e); + theTransition.setRleft(ixleft); + theTransition.setRright(qxright); + requestIndex++; + :} + | simpleRequest:i {: requestIndex++; + theTransition.setRleft(ixleft); + theTransition.setRright(ixright); :} - | simpleRequest {: requestIndex++; :} ; simpleRequest ::= trivialRequest | sendRequest | receiveRequest | setTimerRequest | resetTimerRequest | expireTimerRequest; @@ -824,25 +948,33 @@ countParam ::= VALUE_F EQUAL IDENT:id POINT AMOUNT_U LPAR RPAR {: // TRANSITIONS @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ transition ::= - transitionBegin THEN IDENT:id SEMICOLON {: + transitionBegin:t THEN IDENT:id SEMICOLON:q {: getState(id.getAvatarName()); theTransition.setTarget(theState); + theTransition.setLeft(txleft); + theTransition.setRight(qxright); :} - | transitionBegin doActions THEN IDENT:id SEMICOLON {: + | transitionBegin:t doActions THEN IDENT:id SEMICOLON:q {: getState(id.getAvatarName()); theTransition.setTarget(theState); + theTransition.setLeft(txleft); + theTransition.setRight(qxright); :} - | transitionBegin THEN IDENT:id transitionLabels RBRAC {: + | transitionBegin:t THEN IDENT:id transitionLabels RBRAC:q {: getState(id.getAvatarName()); theTransition.setTarget(theState); theTransition.setDelayExtra(delayExtraMap); delayExtraMap = null; + theTransition.setLeft(txleft); + theTransition.setRight(qxright); :} - | transitionBegin doActions THEN IDENT:id transitionLabels RBRAC {: + | transitionBegin:t doActions THEN IDENT:id transitionLabels RBRAC:q {: getState(id.getAvatarName()); theTransition.setTarget(theState); theTransition.setDelayExtra(delayExtraMap); delayExtraMap = null; + theTransition.setLeft(txleft); + theTransition.setRight(qxright); :} ; transitionBegin ::= @@ -883,11 +1015,11 @@ actionSeq ::= | THEN act SEMICOLON actionSeq ; act ::= - assign fullIdent GETS STRINGEXPR:e SEMICOLON {: - actionList.add(new StxAction(stringAcc.toString(),e)); + assign:a fullIdent GETS STRINGEXPR:e SEMICOLON:q {: + actionList.add(new StxAction(axleft, qxright, stringAcc.toString(),e)); :} - | ACTION STRINGEXPR:e SEMICOLON {: - actionList.add(new StxAction(e)); + | ACTION:a STRINGEXPR:e SEMICOLON:q {: + actionList.add(new StxAction(axleft, qxright, e)); :} ; assign ::= ASSIGN {: