use of de.be4.classicalb.core.parser.node.PPredicate in project prob2 by bendisposto.
the class DomBuilder method createPredicateAST.
private Start createPredicateAST(final PPredicate pPredicate) {
Start start = new Start();
APredicateParseUnit node2 = new APredicateParseUnit();
start.setPParseUnit(node2);
start.setEOF(EOF);
node2.setPredicate((PPredicate) pPredicate.clone());
node2.getPredicate().apply(new RenameIdentifiers());
return start;
}
use of de.be4.classicalb.core.parser.node.PPredicate in project probparsers by bendisposto.
the class DefinitionFilesTest method testRealFiles.
/*
* test with real files
*/
@Test
public void testRealFiles() throws Exception {
final BParser parser = new BParser("testcase");
File machine = new File("src/test/resources/parsable/DefinitionFileTest.mch");
parser.parseFile(machine, false);
final IDefinitions definitions = parser.getDefinitions();
final APredicateDefinitionDefinition def1 = (APredicateDefinitionDefinition) definitions.getDefinition("GRD2");
assertEquals("GRD2", def1.getName().getText());
assertEquals(0, def1.getParameters().size());
assertTrue(def1.getRhs() instanceof PPredicate);
final APredicateDefinitionDefinition def2 = (APredicateDefinitionDefinition) definitions.getDefinition("GRD1");
assertEquals("GRD1", def2.getName().getText());
assertEquals(0, def2.getParameters().size());
assertTrue(def2.getRhs() instanceof PPredicate);
}
use of de.be4.classicalb.core.parser.node.PPredicate in project probparsers by bendisposto.
the class ASTPrologTest method testEvent.
@Test
public void testEvent() throws BCompoundException {
final AEventBModelParseUnit model = new AEventBModelParseUnit();
model.setName(new TIdentifierLiteral("mm"));
final AEventsModelClause events = new AEventsModelClause();
model.setModelClauses(Arrays.asList((PModelClause) events));
AEvent event = new AEvent();
events.setEvent(Arrays.asList((PEvent) event));
event.setEventName(new TIdentifierLiteral("testevent"));
event.setVariables(Arrays.asList(createId("param")));
event.setGuards(Arrays.asList((PPredicate) new ATruthPredicate()));
PSubstitution subst1 = new AAssignSubstitution(Arrays.asList(createId("x")), Arrays.asList(createId("param")));
event.setAssignments(Arrays.asList(subst1));
PWitness witness = new AWitness(new TIdentifierLiteral("ab"), new AEqualPredicate(createId("ab"), createId("y")));
event.setWitness(Arrays.asList(witness));
event.setRefines(Arrays.asList(new TIdentifierLiteral("abstract1"), new TIdentifierLiteral("abstract2")));
checkAST(0, "event_b_model($,mm,[events($,[" + "event($,testevent,[abstract1,abstract2],[identifier($,param)],[truth($)],[]," + "[assign($,[identifier($,x)],[identifier($,param)])]," + "[witness($,identifier(%,ab),equal($,identifier($,ab),identifier($,y)))])])])", model);
}
use of de.be4.classicalb.core.parser.node.PPredicate in project prob2 by bendisposto.
the class DomBuilder method inAOperation.
@Override
public void inAOperation(final AOperation node) {
String name = extractIdentifierName(node.getOpName());
if (prefix != null && !prefix.equals(name)) {
name = prefix + "." + name;
}
List<PExpression> paramIds = node.getParameters();
final List<String> params = extractIdentifiers(paramIds);
final List<String> output = extractIdentifiers(node.getReturnValues());
Operation operation = new Operation(name, params, output);
PSubstitution body = node.getOperationBody();
List<ClassicalBGuard> guards = new ArrayList<>();
if (body instanceof ASelectSubstitution) {
PPredicate condition = ((ASelectSubstitution) body).getCondition();
List<PPredicate> predicates = getPredicates(condition);
for (PPredicate pPredicate : predicates) {
guards.add(new ClassicalBGuard(createPredicateAST(pPredicate)));
}
}
if (body instanceof APreconditionSubstitution) {
PPredicate condition = ((APreconditionSubstitution) body).getPredicate();
List<PPredicate> predicates = getPredicates(condition);
for (PPredicate pPredicate : predicates) {
guards.add(new ClassicalBGuard(createPredicateAST(pPredicate)));
}
}
List<ClassicalBAction> actions = new ArrayList<>();
actions.add(new ClassicalBAction(createSubstitutionAST(body)));
operation = operation.set(Action.class, new ModelElementList<>(actions));
operation = operation.set(Guard.class, new ModelElementList<>(guards));
operations.add(operation);
}
use of de.be4.classicalb.core.parser.node.PPredicate 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