use of de.prob.model.eventb.EventParameter in project prob2 by bendisposto.
the class MachineXmlHandler method addEventParameter.
private void addEventParameter(final Attributes attributes) {
String name = attributes.getValue("name");
parameters.add(new EventParameter(name));
}
use of de.prob.model.eventb.EventParameter in project prob2 by bendisposto.
the class Transition method getParameterPredicates.
/**
* @return a list of string predicates representing the value of the
* parameters for this transition
*/
public List<String> getParameterPredicates() {
if (isArtificialTransition()) {
return Collections.emptyList();
}
evaluate(FormulaExpand.EXPAND);
List<String> predicates = new ArrayList<>();
AbstractElement mainComponent = stateSpace.getMainComponent();
List<String> paramNames = new ArrayList<>();
if (mainComponent instanceof ClassicalBMachine) {
Operation op = ((ClassicalBMachine) mainComponent).getOperation(getName());
paramNames = op.getParameters();
} else if (mainComponent instanceof EventBMachine) {
Event event = ((EventBMachine) mainComponent).getEvent(getName());
for (EventParameter eventParameter : event.getParameters()) {
paramNames.add(eventParameter.getName());
}
}
if (paramNames.size() == this.params.size()) {
for (int i = 0; i < paramNames.size(); i++) {
predicates.add(paramNames.get(i) + " = " + this.params.get(i));
}
}
return predicates;
}
use of de.prob.model.eventb.EventParameter in project prob2 by bendisposto.
the class EventBMachineTranslator method processEvents.
private AEventsModelClause processEvents() {
List<PEvent> events = new ArrayList<>();
for (Event e : machine.getEvents()) {
AEvent event = new AEvent();
event.setEventName(new TIdentifierLiteral(e.getName()));
event.setStatus(extractEventStatus(e));
nodeInfos.put(event, new Tuple2<>(machine.getName(), e.getName()));
List<TIdentifierLiteral> refined = new ArrayList<>();
for (Event ref : e.getRefines()) {
refined.add(new TIdentifierLiteral(ref.getName()));
}
event.setRefines(refined);
List<PExpression> params = new ArrayList<>();
for (EventParameter eventParameter : e.getParameters()) {
PExpression pExpression = (PExpression) eventParameter.getExpression().getAst();
nodeInfos.put(pExpression, new Tuple2<>(machine.getName(), eventParameter.getName()));
params.add(pExpression);
}
event.setVariables(params);
List<PPredicate> guards = new ArrayList<>();
List<PPredicate> thms = new ArrayList<>();
for (EventBGuard eventBGuard : e.getGuards()) {
PPredicate ppred = (PPredicate) ((EventB) eventBGuard.getPredicate()).getAst();
nodeInfos.put(ppred, new Tuple2<>(machine.getName(), eventBGuard.getName()));
if (eventBGuard.isTheorem()) {
thms.add(ppred);
} else {
guards.add(ppred);
}
}
event.setGuards(guards);
event.setTheorems(thms);
List<PWitness> witnesses = new ArrayList<>();
for (Witness witness : e.getWitnesses()) {
PPredicate ppred = (PPredicate) witness.getPredicate().getAst();
nodeInfos.put(ppred, new Tuple2<>(machine.getName(), witness.getName()));
witnesses.add(new AWitness(new TIdentifierLiteral(witness.getName()), ppred));
}
event.setWitness(witnesses);
List<PSubstitution> actions = new ArrayList<>();
for (EventBAction eventBAction : e.getActions()) {
PSubstitution psub = (PSubstitution) ((EventB) eventBAction.getCode()).getAst();
nodeInfos.put(psub, new Tuple2<>(machine.getName(), eventBAction.getName()));
actions.add(psub);
}
event.setAssignments(actions);
events.add(event);
}
return new AEventsModelClause(events);
}
Aggregations