use of com.googlecode.prolog_cafe.lang.BufferingPrologControl in project gerrit by GerritCodeReview.
the class PrologShell method run.
@Override
public int run() {
banner();
BufferingPrologControl pcl = new BufferingPrologControl();
pcl.setPrologClassLoader(new PrologClassLoader(getClass().getClassLoader()));
pcl.setEnabled(Prolog.Feature.IO, true);
pcl.setEnabled(Prolog.Feature.STATISTICS, true);
pcl.configureUserIO(System.in, System.out, System.err);
pcl.initialize(Prolog.BUILTIN);
for (String file : fileName) {
String path;
try {
path = new File(file).getCanonicalPath();
} catch (IOException e) {
path = new File(file).getAbsolutePath();
}
pcl.execute(Prolog.BUILTIN, "consult", SymbolTerm.create(path));
System.err.println();
System.err.flush();
}
try {
pcl.execute(Prolog.BUILTIN, "cafeteria");
write("% halt\n");
return 0;
} catch (HaltException halt) {
write("% halt(" + halt.getStatus() + ")\n");
return halt.getStatus();
}
}
use of com.googlecode.prolog_cafe.lang.BufferingPrologControl in project gerrit by GerritCodeReview.
the class PrologTestCase method newMachine.
private PrologMachineCopy newMachine() {
BufferingPrologControl ctl = new BufferingPrologControl();
ctl.setMaxDatabaseSize(16 * 1024);
ctl.setPrologClassLoader(new PrologClassLoader(getClass().getClassLoader()));
return PrologMachineCopy.save(ctl);
}
use of com.googlecode.prolog_cafe.lang.BufferingPrologControl in project gerrit by GerritCodeReview.
the class RulesCache method newEmptyMachine.
private BufferingPrologControl newEmptyMachine(ClassLoader cl) {
BufferingPrologControl ctl = new BufferingPrologControl();
ctl.setMaxDatabaseSize(maxDbSize);
ctl.setPrologClassLoader(new PrologClassLoader(new PredicateClassLoader(predicateProviders, cl)));
ctl.setEnabled(EnumSet.allOf(Prolog.Feature.class), false);
List<String> packages = new ArrayList<>();
packages.addAll(PACKAGE_LIST);
for (PredicateProvider predicateProvider : predicateProviders) {
packages.addAll(predicateProvider.getPackages());
}
// Bootstrap the interpreter and ensure there is clean state.
ctl.initialize(packages.toArray(new String[packages.size()]));
return ctl;
}
use of com.googlecode.prolog_cafe.lang.BufferingPrologControl in project gerrit by GerritCodeReview.
the class RulesCache method consultRules.
private PrologMachineCopy consultRules(String name, Reader rules) throws CompileException {
BufferingPrologControl ctl = newEmptyMachine(systemLoader);
PushbackReader in = new PushbackReader(rules, Prolog.PUSHBACK_SIZE);
try {
if (!ctl.execute(Prolog.BUILTIN, "consult_stream", SymbolTerm.intern(name), new JavaObjectTerm(in))) {
return null;
}
} catch (SyntaxException e) {
throw new CompileException(e.toString(), e);
} catch (TermException e) {
Term m = e.getMessageTerm();
if (m instanceof StructureTerm && "syntax_error".equals(m.name()) && m.arity() >= 1) {
StringBuilder msg = new StringBuilder();
if (m.arg(0) instanceof ListTerm) {
msg.append(Joiner.on(' ').join(((ListTerm) m.arg(0)).toJava()));
} else {
msg.append(m.arg(0).toString());
}
if (m.arity() == 2 && m.arg(1) instanceof StructureTerm && "at".equals(m.arg(1).name())) {
Term at = m.arg(1).arg(0).dereference();
if (at instanceof ListTerm) {
msg.append(" at: ");
msg.append(prettyProlog(at));
}
}
throw new CompileException(msg.toString(), e);
}
throw new CompileException("Error while consulting rules from " + name, e);
} catch (RuntimeException e) {
throw new CompileException("Error while consulting rules from " + name, e);
}
return save(ctl);
}
Aggregations