Skip to content
Snippets Groups Projects
Commit 1a25c676 authored by Sophie Coudert's avatar Sophie Coudert
Browse files

modifying assignment translation (parsing done. begin generation)

parent 9b87e016
No related branches found
No related tags found
2 merge requests!508Avatar sys ml 04 2024,!507Avatar sys ml 04 2024
......@@ -83,23 +83,28 @@ public class Avatar2SysMLNames {
public static String attributeSysMLname(String _name){
if (_name == null) return null;
String name = _name.trim();
if (_name.equals("") || _name.equals(".")) return null;
String[] list = name.split("\\.");
StringBuffer result =
( list.length == 0 ? new StringBuffer("'$" + name + "'") : new StringBuffer("'$" + list[0] + "'"));
int length = list.length;
if (length == 0) return null;
StringBuffer result = new StringBuffer("'$" + list[0] + "'");
for(int i = 1; i < length; i++)
result.append(".'" + list[i] + "'");
return result.toString();
}
/** specific... as SysML requires a "::" as first separator (instead of ".") for variable assignment */
public static String leftHandSysMLname(String name){
String aname = attributeSysMLname(name);
int found = aname.indexOf("'.'");
if (found == -1) return aname;
else return (
aname.substring(0,found) + "'::'" + aname.substring(found+3)
);
public static String leftHandSysMLname(String _name){
if (_name == null) return null;
String name = _name.trim();
if (_name.equals("") || _name.equals(".")) return null;
String[] list = name.split("\\.");
int length = list.length;
if (length == 0) return null;
StringBuffer result = new StringBuffer("'$" + list[0] + "'");
for(int i = 1; i < length; i++)
result.append("::'" + list[i] + "'");
return result.toString();
}
/** Note: method name are similar to attribute name (do not change, code rely on this) */
public static String methodSysMLname(String name){ return "'$" + name.trim() + "'"; }
......
......@@ -134,7 +134,7 @@ parser code {:
private HashMap<String,StxMethod> methodMap;
private StringBuffer fullIdentAcc = new StringBuffer();
private StringBuffer exprIdentAcc = new StringBuffer();
private StringBuffer exprStringAcc = new StringBuffer();
// %%%%%%%%%%%%%%%%%%%% "PATH" STATE VARIABLES
// context information for parsing
......@@ -2071,35 +2071,35 @@ complexIdent ::=
// METHOD CALL ---------------------------
stxCall ::=
stxCallBegin:b RPAR:r {:
theCall.addSegment(exprIdentAcc.toString() + ")");
theCall.addSegment(exprStringAcc.toString() + ")");
RESULT = theCall; RESULT.setLeft(bxleft); RESULT.setRight(rxright);
:}
| stxCallBegin:b stxCallParams:l RPAR:r {:
theCall.addSegment(exprIdentAcc.toString() + ")");
theCall.addSegment(exprStringAcc.toString() + ")");
RESULT = theCall; RESULT.setLeft(bxleft); RESULT.setRight(rxright);
:}
;
stxCallBegin ::= IDENT:i LPAR {:
theCall = new StxCall();
exprIdentAcc = new StringBuffer(i.getAvatarName() + "(");
exprStringAcc = new StringBuffer(i.getAvatarName() + "(");
:};
stxCallParams ::= stxCallParam | stxCallParam comma stxCallParams;
comma ::= COMMA {: exprIdentAcc.append(", "); :}
comma ::= COMMA {: exprStringAcc.append(", "); :}
;
stxCallParam ::=
expr:e {: exprIdentAcc.append(e); :}
expr:e {: exprStringAcc.append(e); :}
| complexIdent:i {:
theCall.addSegment(exprIdentAcc.toString());
theCall.addSegment(exprStringAcc.toString());
theCall.addIdent(i);
exprIdentAcc.setLength(0);
exprStringAcc.setLength(0);
:}
| call
;
call ::=
callBegin RPAR {: exprIdentAcc.append(")"); :}
| stxCallBegin stxCallParams:l RPAR {: exprIdentAcc.append(")"); :}
callBegin RPAR {: exprStringAcc.append(")"); :}
| stxCallBegin stxCallParams:l RPAR {: exprStringAcc.append(")"); :}
;
callBegin ::= IDENT:i LPAR {:
exprIdentAcc.append(i.getAvatarName() + "(");
exprStringAcc.append(i.getAvatarName() + "(");
:};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment