EmbASP-Java
ClingoParserBaseVisitorImplementation.java
1 package it.unical.mat.parsers.asp.clingo;
2 
3 import it.unical.mat.parsers.asp.ASPDataCollection;
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 final ASPDataCollection answerSets;
14 
16  this.answerSets = answerSets;
17  }
18 
19  @Override
20  public Void visitAnswer_set(ClingoParser.Answer_setContext ctx) {
21  answerSets.addAnswerSet();
22 
23  return visitChildren(ctx);
24  }
25 
26  @Override
27  public Void visitModel(ClingoParser.ModelContext ctx) {
28  final String cost = ctx.NEW_LINE().getText().trim();
29 
30  if(cost.length() > 1) {
31  final String[] tokens = cost.split(" ");
32  int levels = tokens.length - 1;
33 
34  for(int i = 1; i < tokens.length; i++)
35  answerSets.storeCost(levels--, Integer.parseInt(tokens[i]));
36  }
37 
38  return visitChildren(ctx);
39  }
40 
41  @Override
42  public Void visitPredicate_atom(ClingoParser.Predicate_atomContext ctx) {
43  answerSets.storeAtom(ctx.getText());
44 
45  return null;
46  }
47 
48  public static void parse(final ASPDataCollection answerSets, final String atomsList, final boolean two_stageParsing) {
49  final CommonTokenStream tokens = new CommonTokenStream(new ClingoLexer(CharStreams.fromString(atomsList)));
50  final ClingoParser parser = new ClingoParser(tokens);
52 
53  if(!two_stageParsing) {
54  visitor.visit(parser.output());
55 
56  return;
57  }
58 
59  parser.getInterpreter().setPredictionMode(PredictionMode.SLL);
60  parser.removeErrorListeners();
61  parser.setErrorHandler(new BailErrorStrategy());
62 
63  try {
64  visitor.visit(parser.output());
65  } catch (final RuntimeException exception) {
66  if(exception.getClass() == RuntimeException.class && exception.getCause() instanceof RecognitionException) {
67  tokens.seek(0);
68  parser.addErrorListener(ConsoleErrorListener.INSTANCE);
69  parser.setErrorHandler(new DefaultErrorStrategy());
70  parser.getInterpreter().setPredictionMode(PredictionMode.LL);
71  visitor.visit(parser.output());
72  }
73  }
74  }
75 }
it.unical.mat.parsers.asp.clingo.ClingoParser
Definition: ClingoParser.java:13
it.unical.mat.parsers.asp.clingo.ClingoParser.Predicate_atomContext
Definition: ClingoParser.java:231
it.unical.mat.parsers.asp.ASPDataCollection
Definition: ASPDataCollection.java:3
it.unical.mat.parsers.asp.clingo.ClingoLexer
Definition: ClingoLexer.java:13
it.unical.mat.parsers.asp.clingo.ClingoParserBaseVisitor
Definition: ClingoParserBaseVisitor.java:13
it.unical.mat.parsers.asp.clingo.ClingoParser.ModelContext
Definition: ClingoParser.java:124
it.unical.mat.parsers.asp.clingo.ClingoParserBaseVisitorImplementation
Definition: ClingoParserBaseVisitorImplementation.java:12
it.unical.mat.parsers.asp.clingo.ClingoParser.Answer_setContext
Definition: ClingoParser.java:85