1 package it.unical.mat.parsers.pddl.solver_planning_domains;
3 import it.unical.mat.parsers.pddl.PDDLDataCollection;
4 import org.antlr.v4.runtime.BailErrorStrategy;
5 import org.antlr.v4.runtime.CharStreams;
6 import org.antlr.v4.runtime.CommonTokenStream;
7 import org.antlr.v4.runtime.ConsoleErrorListener;
8 import org.antlr.v4.runtime.DefaultErrorStrategy;
9 import org.antlr.v4.runtime.RecognitionException;
10 import org.antlr.v4.runtime.atn.PredictionMode;
13 private static final int OK_STATUS = 1;
14 private static final int ERROR_STATUS = -1;
17 private String errors =
"";
20 this.actions = actions;
26 final String
string = ctx.STRING().getText();
28 if(status == 0 &&
string.equalsIgnoreCase(
"\"status\""))
29 status = valueContext.getText().equalsIgnoreCase(
"\"ok\"") ? OK_STATUS : ERROR_STATUS;
30 else if(status == ERROR_STATUS) {
31 if(
string.equalsIgnoreCase(
"\"result\"")) {
33 return visitChildren(ctx);
35 errors += trim(valueContext.getText());
36 }
else if(
string.equalsIgnoreCase(
"\"error\""))
37 errors += trim(valueContext.getText());
38 }
else if(status == OK_STATUS) {
39 if(
string.equalsIgnoreCase(
"\"name\""))
40 actions.storeAction(trim(valueContext.getText()));
41 else if(
string.equalsIgnoreCase(
"\"plan\"") ||
string.equalsIgnoreCase(
"\"result\""))
42 return visitChildren(ctx);
48 private static String trim(
final String
string) {
49 final int stringLength =
string.length();
51 return (
string.charAt(0) ==
'"' &&
string.charAt(stringLength - 1) ==
'"') ?
string.substring(1, stringLength - 1) : string;
54 public static String parse(
final PDDLDataCollection actions,
final String spdOutput,
final boolean two_stageParsing) {
55 final CommonTokenStream tokens =
new CommonTokenStream(
new SPDGrammarLexer(CharStreams.fromString(spdOutput)));
59 if(!two_stageParsing) {
60 visitor.visit(parser.json());
62 return visitor.errors;
65 parser.getInterpreter().setPredictionMode(PredictionMode.SLL);
66 parser.removeErrorListeners();
67 parser.setErrorHandler(
new BailErrorStrategy());
70 visitor.visit(parser.json());
71 }
catch (
final RuntimeException exception) {
72 if(exception.getClass() == RuntimeException.class && exception.getCause() instanceof RecognitionException) {
74 parser.addErrorListener(ConsoleErrorListener.INSTANCE);
75 parser.setErrorHandler(
new DefaultErrorStrategy());
76 parser.getInterpreter().setPredictionMode(PredictionMode.LL);
77 visitor.visit(parser.json());
81 return visitor.errors;