EmbASP-Java
SPDGrammarBaseVisitorImplementation.java
1 package it.unical.mat.parsers.pddl.solver_planning_domains;
2 
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;
11 
13  private static final int OK_STATUS = 1;
14  private static final int ERROR_STATUS = -1;
15  private int status;
16  private final PDDLDataCollection actions;
17  private String errors = "";
18 
20  this.actions = actions;
21  }
22 
23  @Override
24  public Void visitPair(SPDGrammarParser.PairContext ctx) {
25  final SPDGrammarParser.ValueContext valueContext = ctx.value();
26  final String string = ctx.STRING().getText();
27 
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\"")) {
32  if(valueContext instanceof SPDGrammarParser.ArrayValueContext || valueContext instanceof SPDGrammarParser.ObjectValueContext)
33  return visitChildren(ctx);
34  else
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);
43  }
44 
45  return null;
46  }
47 
48  private static String trim(final String string) {
49  final int stringLength = string.length();
50 
51  return (string.charAt(0) == '"' && string.charAt(stringLength - 1) == '"') ? string.substring(1, stringLength - 1) : string;
52  }
53 
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)));
56  final SPDGrammarParser parser = new SPDGrammarParser(tokens);
58 
59  if(!two_stageParsing) {
60  visitor.visit(parser.json());
61 
62  return visitor.errors;
63  }
64 
65  parser.getInterpreter().setPredictionMode(PredictionMode.SLL);
66  parser.removeErrorListeners();
67  parser.setErrorHandler(new BailErrorStrategy());
68 
69  try {
70  visitor.visit(parser.json());
71  } catch (final RuntimeException exception) {
72  if(exception.getClass() == RuntimeException.class && exception.getCause() instanceof RecognitionException) {
73  tokens.seek(0);
74  parser.addErrorListener(ConsoleErrorListener.INSTANCE);
75  parser.setErrorHandler(new DefaultErrorStrategy());
76  parser.getInterpreter().setPredictionMode(PredictionMode.LL);
77  visitor.visit(parser.json());
78  }
79  }
80 
81  return visitor.errors;
82  }
83 }
it.unical.mat.parsers.pddl.solver_planning_domains.SPDGrammarBaseVisitor
Definition: SPDGrammarBaseVisitor.java:13
it.unical.mat.parsers.pddl.solver_planning_domains.SPDGrammarParser.ObjectValueContext
Definition: SPDGrammarParser.java:331
it.unical.mat.parsers.pddl.solver_planning_domains.SPDGrammarLexer
Definition: SPDGrammarLexer.java:13
it.unical.mat.parsers.pddl.solver_planning_domains.SPDGrammarParser.PairContext
Definition: SPDGrammarParser.java:271
it.unical.mat.parsers.pddl.solver_planning_domains.SPDGrammarParser
Definition: SPDGrammarParser.java:13
it.unical.mat.parsers.pddl.solver_planning_domains.SPDGrammarBaseVisitorImplementation
Definition: SPDGrammarBaseVisitorImplementation.java:12
it.unical.mat.parsers.pddl.solver_planning_domains.SPDGrammarParser.ArrayValueContext
Definition: SPDGrammarParser.java:369
it.unical.mat.parsers.pddl.solver_planning_domains.SPDGrammarParser.ValueContext
Definition: SPDGrammarParser.java:312
it.unical.mat.parsers.pddl.PDDLDataCollection
Definition: PDDLDataCollection.java:3