EmbASP-CSharp
ClingoParserBaseVisitorImplementation.cs
1 using System;
2 using Antlr4.Runtime;
3 using Antlr4.Runtime.Atn;
4 
6 {
8  {
9  private readonly IASPDataCollection answerSets;
10 
12  {
13  this.answerSets = answerSets;
14  }
15 
16  public override object VisitAnswer_set(ClingoParser.Answer_setContext context)
17  {
18  answerSets.AddAnswerSet();
19 
20  return VisitChildren(context);
21  }
22 
23  public override object VisitModel(ClingoParser.ModelContext context)
24  {
25  string cost = context.NEW_LINE().GetText().Trim();
26 
27  if (cost.Length > 1)
28  {
29  string[] tokens = cost.Split(' ');
30  int levels = tokens.Length - 1;
31 
32  for (int i = 1; i < tokens.Length; i++)
33  answerSets.StoreCost(levels--, Int32.Parse(tokens[i]));
34  }
35 
36  return VisitChildren(context);
37  }
38 
39  public override object VisitPredicate_atom(ClingoParser.Predicate_atomContext context)
40  {
41  answerSets.StoreAtom(context.GetText());
42 
43  return null;
44  }
45 
46  public static void Parse(IASPDataCollection answerSets, string atomsList, bool two_stageParsing)
47  {
48  CommonTokenStream tokens = new CommonTokenStream(new ClingoLexer(CharStreams.fromstring(atomsList)));
49  ClingoParser parser = new ClingoParser(tokens);
51 
52  if (!two_stageParsing)
53  {
54  visitor.Visit(parser.output());
55 
56  return;
57  }
58 
59  parser.Interpreter.PredictionMode = PredictionMode.SLL;
60 
61  parser.RemoveErrorListeners();
62 
63  parser.ErrorHandler = new BailErrorStrategy();
64 
65  try
66  {
67  visitor.Visit(parser.output());
68  }
69  catch (SystemException exception)
70  {
71  if (exception.GetBaseException() is RecognitionException)
72  {
73  tokens.Seek(0);
74  parser.AddErrorListener(ConsoleErrorListener<object>.Instance);
75 
76  parser.ErrorHandler = new DefaultErrorStrategy();
77  parser.Interpreter.PredictionMode = PredictionMode.LL;
78 
79  visitor.Visit(parser.output());
80  }
81  }
82  }
83  }
84 }
it.unical.mat.parsers.asp.clingo.ClingoParserBaseVisitorImplementation.VisitModel
override object VisitModel(ClingoParser.ModelContext context)
Visit a parse tree produced by ClingoParser.model.
Definition: ClingoParserBaseVisitorImplementation.cs:23
it.unical.mat.parsers.asp.clingo.ClingoParserBaseVisitorImplementation.VisitPredicate_atom
override object VisitPredicate_atom(ClingoParser.Predicate_atomContext context)
Visit a parse tree produced by ClingoParser.predicate_atom.
Definition: ClingoParserBaseVisitorImplementation.cs:39
ClingoParserBaseVisitor
This class provides an empty implementation of IClingoParserVisitor<Result>, which can be extended to...
Definition: ClingoParserBaseVisitor.cs:35
it.unical.mat.parsers.asp.clingo.ClingoParserBaseVisitorImplementation.VisitAnswer_set
override object VisitAnswer_set(ClingoParser.Answer_setContext context)
Visit a parse tree produced by ClingoParser.answer_set.
Definition: ClingoParserBaseVisitorImplementation.cs:16
it.unical.mat.parsers.asp.clingo.ClingoParserBaseVisitorImplementation
Definition: ClingoParserBaseVisitorImplementation.cs:7
it.unical.mat.parsers.asp.IASPDataCollection
Definition: IASPDataCollection.cs:3
it.unical.mat.parsers.asp.clingo
Definition: ClingoParserBaseVisitorImplementation.cs:5