use of de.prob.prolog.term.IntegerPrologTerm in project probparsers by bendisposto.
the class PrologTermGenerator method toPrologTerm.
private static PrologTerm toPrologTerm(final PTerm node) {
PrologTerm term;
if (node instanceof ANumberTerm) {
String text = ((ANumberTerm) node).getNumber().getText();
term = new IntegerPrologTerm(new BigInteger(text));
} else if (node instanceof AAtomTerm) {
String text = ((AAtomTerm) node).getName().getText();
if ("[]".equals(text)) {
term = new ListPrologTerm(EMPTY_PROLOG_LIST);
} else {
text = removeQuotes(text);
term = new CompoundPrologTerm(text);
}
} else if (node instanceof ATerm) {
ATerm aterm = (ATerm) node;
int listSize = getListSize(node);
if (listSize >= 0) {
PrologTerm[] list = new PrologTerm[listSize];
fillListWithElements(list, aterm);
term = new ListPrologTerm(list);
} else {
String functor = removeQuotes(aterm.getFunctor().getText());
PrologTerm[] params = evalParameters((AParams) aterm.getParams());
term = new CompoundPrologTerm(functor, params);
}
} else if (node instanceof AVariableTerm) {
String text = removeQuotes(((AVariableTerm) node).getVariable().getText());
term = new VariablePrologTerm(text);
} else
throw new IllegalStateException("Unexpected subclass of PTerm: " + node.getClass().getCanonicalName());
return term;
}
use of de.prob.prolog.term.IntegerPrologTerm in project probparsers by bendisposto.
the class FastReadTransformer method fastwrite.
private void fastwrite(PrologTerm term) {
if (term instanceof IntegerPrologTerm) {
IntegerPrologTerm intTerm = (IntegerPrologTerm) term;
write(intTerm);
}
if (term instanceof CompoundPrologTerm) {
write(term);
}
if (term instanceof VariablePrologTerm) {
write((VariablePrologTerm) term);
}
if (term instanceof ListPrologTerm) {
ListPrologTerm list = (ListPrologTerm) term;
write(list);
}
}
use of de.prob.prolog.term.IntegerPrologTerm in project prob2 by bendisposto.
the class ComputeCoverageCommand method processResult.
@Override
public void processResult(final ISimplifiedROMap<String, PrologTerm> bindings) {
IntegerPrologTerm totalNodeNr = (IntegerPrologTerm) bindings.get("TotalNodeNr");
IntegerPrologTerm totalTransNr = (IntegerPrologTerm) bindings.get("TotalTransSum");
ListPrologTerm ops = BindingGenerator.getList(bindings.get("OpStat"));
ListPrologTerm nodes = BindingGenerator.getList(bindings.get("NodeStat"));
ListPrologTerm uncovered = BindingGenerator.getList(bindings.get("Uncovered"));
coverageResult = new ComputeCoverageResult(totalNodeNr, totalTransNr, ops, nodes, uncovered);
}
use of de.prob.prolog.term.IntegerPrologTerm in project prob2 by bendisposto.
the class LtlCheckingCommand method processResult.
@Override
public void processResult(final ISimplifiedROMap<String, PrologTerm> bindings) {
PrologTerm term = bindings.get(VARIABLE_NAME_RESULT);
if (term.hasFunctor("ok", 0)) {
LTLOk res = new LTLOk(ltlFormula);
result = res;
value = res;
} else if (term.hasFunctor("nostart", 0)) {
LTLError res = new LTLError(ltlFormula, "Could not find initialisation. Try to animating the model.");
result = res;
value = res;
} else if (term.hasFunctor("typeerror", 0)) {
LTLError res = new LTLError(ltlFormula, "Type error discovered in formula");
result = res;
value = res;
} else if (term.hasFunctor("incomplete", 0)) {
LTLNotYetFinished res = new LTLNotYetFinished(ltlFormula);
result = res;
value = res;
} else if (term.hasFunctor("counterexample", 3)) {
CompoundPrologTerm cpt = BindingGenerator.getCompoundTerm(term, 3);
List<Transition> counterExample = BindingGenerator.getList(cpt.getArgument(1)).stream().filter(pt -> !pt.hasFunctor("none", 0)).map(pt -> Transition.createTransitionFromCompoundPrologTerm(s, BindingGenerator.getCompoundTerm(pt, 4))).collect(Collectors.toList());
PathType pathType;
int loopEntry;
PrologTerm loopStatus = cpt.getArgument(2);
if (loopStatus.hasFunctor("no_loop", 0)) {
pathType = PathType.REDUCED;
loopEntry = -1;
} else if (loopStatus.hasFunctor("deadlock", 0)) {
pathType = PathType.FINITE;
loopEntry = -1;
} else if (loopStatus.hasFunctor("loop", 1)) {
pathType = PathType.INFINITE;
loopEntry = ((IntegerPrologTerm) loopStatus.getArgument(1)).getValue().intValue();
} else {
throw new UnexpectedLoopStatusException("LTL model check returned unexpected loop status: " + loopStatus);
}
List<Transition> pathToCE = BindingGenerator.getList(cpt.getArgument(3)).stream().map(pt -> Transition.createTransitionFromCompoundPrologTerm(s, BindingGenerator.getCompoundTerm(pt, 4))).collect(Collectors.toList());
LTLCounterExample res = new LTLCounterExample(ltlFormula, pathToCE, counterExample, loopEntry, pathType);
result = res;
value = res;
} else {
throw new UnknownLtlResult("Unknown result from LTL checking: " + term);
}
}
use of de.prob.prolog.term.IntegerPrologTerm in project prob2 by bendisposto.
the class EvalstoreEvalCommand method processResult.
@Override
public void processResult(final ISimplifiedROMap<String, PrologTerm> bindings) {
CompoundPrologTerm term = (CompoundPrologTerm) bindings.get(RESULT_VAR);
// most fields are about
if (term.hasFunctor("interrupted", 0)) {
this.result = new EvalstoreResult(false, true, evalstoreId, null, Collections.emptyList());
} else if (term.hasFunctor("timeout", 0)) {
this.result = new EvalstoreResult(true, false, evalstoreId, null, Collections.emptyList());
} else if (term.hasFunctor("errors", 1)) {
final ListPrologTerm args = (ListPrologTerm) term.getArgument(1);
final List<String> errors = args.stream().map(arg -> PrologTerm.atomicString(arg.getArgument(1))).collect(Collectors.toList());
final String error = errors.isEmpty() ? "unspecified error" : errors.get(0);
final AbstractEvalResult er = new ComputationNotCompletedResult(evalElement.getCode(), error);
this.result = new EvalstoreResult(false, false, evalstoreId, er, Collections.emptyList());
} else if (term.hasFunctor("ok", 4)) {
// first argument ignored
final String valueStr = PrologTerm.atomicString(term.getArgument(2));
final ListPrologTerm ids = (ListPrologTerm) term.getArgument(3);
final List<String> newIdentifiers = PrologTerm.atomicStrings(ids);
final long storeId = ((IntegerPrologTerm) term.getArgument(4)).getValue().longValue();
final EvalResult er = new EvalResult(valueStr, Collections.emptyMap());
this.result = new EvalstoreResult(false, false, storeId, er, newIdentifiers);
} else {
// I don't now which
throw new IllegalStateException("Unexpected es_eval result: " + term.getFunctor() + "/" + term.getArity());
}
}
Aggregations