EmbASP-Java
DLV2ParserBaseVisitorImplementation.java
1 package it.unical.mat.parsers.asp.dlv2;
2 
3 import it.unical.mat.parsers.asp.ASPDataCollection;
4 import java.util.HashMap;
5 import org.antlr.v4.runtime.BailErrorStrategy;
6 import org.antlr.v4.runtime.CharStreams;
7 import org.antlr.v4.runtime.CommonTokenStream;
8 import org.antlr.v4.runtime.ConsoleErrorListener;
9 import org.antlr.v4.runtime.DefaultErrorStrategy;
10 import org.antlr.v4.runtime.RecognitionException;
11 import org.antlr.v4.runtime.atn.PredictionMode;
12 
14  private final ASPDataCollection answerSets;
15  private HashMap <Integer, Integer> costs;
16 
17  private DLV2ParserBaseVisitorImplementation(final ASPDataCollection answerSets) {
18  this.answerSets = answerSets;
19  }
20 
21  @Override
22  public Void visitAnswer_set(DLV2Parser.Answer_setContext ctx) {
23  answerSets.addAnswerSet();
24 
25  if(ctx.cost() != null && !ctx.cost().isEmpty()) {
26  costs = new HashMap <> ();
27  final String[] firstCost = ctx.cost().COST_LABEL().getText().split(" ")[1].split("@");
28 
29  costs.put(Integer.parseInt(firstCost[1]), Integer.parseInt(firstCost[0]));
30  }
31 
32  if(costs != null)
33  costs.forEach((level, cost) -> answerSets.storeCost(level, cost));
34 
35  return visitChildren(ctx);
36  }
37 
38  @Override
39  public Void visitLevel(DLV2Parser.LevelContext ctx) {
40  final int level = Integer.parseInt(ctx.INTEGER(1).getText()), cost = Integer.parseInt(ctx.INTEGER(0).getText());
41 
42  costs.put(level, cost);
43  answerSets.storeCost(level, cost);
44 
45  return null;
46  }
47 
48  @Override
49  public Void visitPredicate_atom(DLV2Parser.Predicate_atomContext ctx) {
50  answerSets.storeAtom(ctx.getText());
51 
52  return null;
53  }
54 
55  public static void parse(final ASPDataCollection answerSets, final String atomsList, final boolean two_stageParsing) {
56  final CommonTokenStream tokens = new CommonTokenStream(new DLV2Lexer(CharStreams.fromString(atomsList)));
57  final DLV2Parser parser = new DLV2Parser(tokens);
59 
60  if(!two_stageParsing) {
61  visitor.visit(parser.output());
62 
63  return;
64  }
65 
66  parser.getInterpreter().setPredictionMode(PredictionMode.SLL);
67  parser.removeErrorListeners();
68  parser.setErrorHandler(new BailErrorStrategy());
69 
70  try {
71  visitor.visit(parser.output());
72  } catch (final RuntimeException exception) {
73  if(exception.getClass() == RuntimeException.class && exception.getCause() instanceof RecognitionException) {
74  tokens.seek(0);
75  parser.addErrorListener(ConsoleErrorListener.INSTANCE);
76  parser.setErrorHandler(new DefaultErrorStrategy());
77  parser.getInterpreter().setPredictionMode(PredictionMode.LL);
78  visitor.visit(parser.output());
79  }
80  }
81  }
82 }
it.unical.mat.parsers.asp.dlv2.DLV2Parser.Predicate_atomContext
Definition: DLV2Parser.java:364
it.unical.mat.parsers.asp.dlv2.DLV2Parser.LevelContext
Definition: DLV2Parser.java:199
it.unical.mat.parsers.asp.dlv2.DLV2Parser
Definition: DLV2Parser.java:13
it.unical.mat.parsers.asp.dlv2.DLV2Parser.Answer_setContext
Definition: DLV2Parser.java:88
it.unical.mat.parsers.asp.ASPDataCollection
Definition: ASPDataCollection.java:3
it.unical.mat.parsers.asp.dlv2.DLV2ParserBaseVisitorImplementation
Definition: DLV2ParserBaseVisitorImplementation.java:13
it.unical.mat.parsers.asp.dlv2.DLV2Lexer
Definition: DLV2Lexer.java:13
it.unical.mat.parsers.asp.dlv2.DLV2ParserBaseVisitor
Definition: DLV2ParserBaseVisitor.java:13