Skip to content
Snippets Groups Projects
Commit 9610bb24 authored by Bastien Sultan's avatar Bastien Sultan
Browse files

Improving JURASSIC compiler

parent 1f94d258
No related branches found
No related tags found
1 merge request!478Adding a compiler for JURASSIC AMULET
......@@ -614,19 +614,23 @@ public class Action extends Command implements ProVerifOutputListener {
TMLModeling<?> tmlModel = interpreter.mgui.gtm.getTMLModeling();
TMLMapping tmlMapping = interpreter.mgui.gtm.getTMLMapping();
DateFormat dateFormat = new SimpleDateFormat("_yyyyMMdd_HHmmss");
Date date = new Date();
String dateAndTime = dateFormat.format(date);
if (tmlModel == null && tmlMapping == null) {
return "No model";
} else{
if (tmlModel != null){
try {
interpreter.mgui.drawTMLSpecification(tmlModel,"TMLModel");
interpreter.mgui.drawTMLSpecification(tmlModel,"TMLModel", dateAndTime);
} catch (MalformedTMLDesignException e) {
TraceManager.addDev("Exception in drawing TML model :" + e.getMessage());
}
}
if (tmlMapping != null){
try {
interpreter.mgui.drawTMAPSpecification(tmlMapping, "TMLMapping");
interpreter.mgui.drawTMAPSpecification(tmlMapping, "TMLMapping", dateAndTime);
} catch (MalformedTMLDesignException e) {
TraceManager.addDev("Exception in drawing TML model :" + e.getMessage());
}
......
......@@ -50,6 +50,7 @@ import java.util.List;
public class AddEventConnectionMutation extends EventConnectionMutation{
protected List<String> parameters;
protected AddEventConnectionMutation(String _originTaskName, String _destinationTaskName, String _connectionName, String _connectionSemantics) {
super(_originTaskName, _destinationTaskName, _connectionName);
setConnectionSemantics(_connectionSemantics);
......@@ -110,28 +111,6 @@ public class AddEventConnectionMutation extends EventConnectionMutation{
_tmlModel.addEvent(event);
}
public static List<String> parseParameters(String toParse) throws ParseDiplodocusMutationException{
List<String> _parameters = new LinkedList<>();
String[] tokens = MutationParser.tokenise(toParse);
int endIndex;
int closingBracketIndex = DiplodocusMutationParser.indexOf(tokens,")");
if (closingBracketIndex == -1){
throw new ParseDiplodocusMutationException("Missing ) at the end of the parameters list.");
} else {
endIndex = closingBracketIndex ;
}
for(int i = DiplodocusMutationParser.indexOf(tokens,"(") + 1; i < endIndex; i += 2) {
if (!(tokens[i].toUpperCase().equals("INT") || tokens[i].toUpperCase().equals("BOOL"))){
throw new ParseDiplodocusMutationException("Incorrect type provided in parameters list or incorrect list format. Expected types are" +
" int or bool, and expected list format is (type1,type2,...,typen).");
}
_parameters.add(tokens[i]);
}
return _parameters;
}
public static AddEventConnectionMutation createFromString(String toParse) throws ParseDiplodocusMutationException{
AddEventConnectionMutation mutation = null;
String[] tokens = DiplodocusMutationParser.tokenise(toParse);
......
......@@ -38,15 +38,94 @@
package tmltranslator.mutations;
import avatartranslator.mutation.MutationParser;
import tmltranslator.TMLModeling;
import tmltranslator.TMLRequest;
import tmltranslator.TMLTask;
import tmltranslator.TMLType;
import java.util.LinkedList;
import java.util.List;
public class AddRequestConnectionMutation extends RequestConnectionMutation {
protected List<String> parameters;
protected AddRequestConnectionMutation(String _originTaskName, String _destinationTaskName, String _connectionName) {
super(_originTaskName, _destinationTaskName, _connectionName);
}
public TMLRequest createElement(TMLModeling<?> _tmlModel) throws ApplyDiplodocusMutationException {
if (getRequest(_tmlModel) != null){
throw new ApplyDiplodocusMutationException("An request connection named " + getConnectionName() + " already exists in the current model.");
}
TMLRequest request = new TMLRequest(getConnectionName(), null);
TMLTask _originTask = getOriginTask(_tmlModel);
TMLTask _destinationTask = getDestinationTask(_tmlModel);
if (_originTask == null){
throw new ApplyDiplodocusMutationException("The task named " + getOriginTaskName() + " does not exist in the current model.");
}
if (_destinationTask==null){
throw new ApplyDiplodocusMutationException("The task named " + getDestinationTaskName() + " does not exist in the current model.");
}
request.addOriginTask(_originTask);
request.setDestinationTask(_destinationTask);
return request;
}
@Override
public void apply(TMLModeling<?> _tmlModel) throws ApplyDiplodocusMutationException {
TMLRequest request = createElement(_tmlModel);
if (parameters != null) {
for (String parameter : parameters) {
int type = 4;
if (parameter.toUpperCase().equals("INT")) {
type = TMLType.NATURAL;
} else if (parameter.toUpperCase().equals("BOOL")) {
type = TMLType.BOOLEAN;
}
request.addParam(new TMLType(type));
}
}
_tmlModel.addRequest(request);
}
public static AddRequestConnectionMutation createFromString (String toParse) throws ParseDiplodocusMutationException {
String[] tokens = DiplodocusMutationParser.tokenise(toParse);
int index = DiplodocusMutationParser.indexOf(tokens,"BETWEEN");
if (tokens.length <= index + 3) {
throw new ParseDiplodocusMutationException("Missing task name. Expected syntax is add request connection connectionName between " +
"originTaskName and destinationTaskName");
}
String _originTaskName = tokens[index+1];
String _destinationTaskName = tokens[index+3];
if (tokens[index-1].toUpperCase().equals("CONNECTION")){
throw new ParseDiplodocusMutationException("Missing or invalid connection name. Expected syntax is add request connection " +
"connectionName between originTaskName and destinationTaskName with connectionName != 'connection'");
}
boolean hasParameters = false;
String _connectionName;
if (DiplodocusMutationParser.indexOf(tokens,"(") != -1){
hasParameters = true;
}
if (hasParameters){
_connectionName = tokens[DiplodocusMutationParser.indexOf(tokens,"(")-1];
} else {
_connectionName = tokens[index - 1];
}
AddRequestConnectionMutation mutation = new AddRequestConnectionMutation(_originTaskName, _destinationTaskName, _connectionName);
if (hasParameters){
mutation.parameters = parseParameters(toParse);
}
mutation.setMutationType("TMLmutation");
return mutation;
}
}
......@@ -38,9 +38,13 @@
package tmltranslator.mutations;
import avatartranslator.mutation.MutationParser;
import tmltranslator.TMLModeling;
import tmltranslator.TMLTask;
import java.util.LinkedList;
import java.util.List;
public abstract class ConnectionMutation extends DiplodocusMutation{
private String connectionName;
private String connectionSemantics;
......@@ -131,6 +135,28 @@ public abstract class ConnectionMutation extends DiplodocusMutation{
return str.matches("-?\\d+(\\.\\d+)?");
}
public static List<String> parseParameters(String toParse) throws ParseDiplodocusMutationException{
List<String> _parameters = new LinkedList<>();
String[] tokens = MutationParser.tokenise(toParse);
int endIndex;
int closingBracketIndex = DiplodocusMutationParser.indexOf(tokens,")");
if (closingBracketIndex == -1){
throw new ParseDiplodocusMutationException("Missing ) at the end of the parameters list.");
} else {
endIndex = closingBracketIndex ;
}
for(int i = DiplodocusMutationParser.indexOf(tokens,"(") + 1; i < endIndex; i += 2) {
if (!(tokens[i].toUpperCase().equals("INT") || tokens[i].toUpperCase().equals("BOOL"))){
throw new ParseDiplodocusMutationException("Incorrect type provided in parameters list or incorrect list format. Expected types are" +
" int or bool, and expected list format is (type1,type2,...,typen).");
}
_parameters.add(tokens[i]);
}
return _parameters;
}
public static ConnectionMutation createFromString(String toParse) throws ParseDiplodocusMutationException{
switch (DiplodocusMutationParser.findConnectionTypeToken(toParse)) {
case "DATA":
......
......@@ -38,6 +38,7 @@
package tmltranslator.mutations;
import org.apache.commons.math3.analysis.function.Add;
import tmltranslator.TMLModeling;
import tmltranslator.TMLRequest;
import tmltranslator.TMLTask;
......@@ -74,6 +75,7 @@ public abstract class RequestConnectionMutation extends ConnectionMutation {
public static RequestConnectionMutation createFromString(String toParse) throws ParseDiplodocusMutationException{
switch (DiplodocusMutationParser.findMutationToken(toParse)) {
case "ADD":
return AddRequestConnectionMutation.createFromString(toParse);
case "RM":
case "REMOVE":
return RemoveRequestConnectionMutation.createFromString(toParse);
......
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