EmbASP-CSharp
SPDGrammarBaseVisitorImplementation.cs
1 using System;
2 using Antlr4.Runtime;
3 using Antlr4.Runtime.Atn;
4 
6 {
8  {
9  private const int OK_STATUS = 1;
10  private const int ERROR_STATUS = -1;
11  private int status;
12  private readonly IPDDLDataCollection actions;
13  private string errors = "";
14 
16  {
17  this.actions = actions;
18  }
19 
20  public override object VisitPair(SPDGrammarParser.PairContext context)
21  {
22  SPDGrammarParser.ValueContext valueContext = context.value();
23  string @string = context.STRING().GetText();
24 
25  if (status == 0 && @string.Equals("\"status\"", StringComparison.CurrentCultureIgnoreCase))
26  status = valueContext.GetText().Equals("\"ok\"", StringComparison.CurrentCultureIgnoreCase) ? OK_STATUS : ERROR_STATUS;
27  else if (status == ERROR_STATUS)
28  {
29  if (@string.Equals("\"result\"", StringComparison.CurrentCultureIgnoreCase))
30  {
31  if (valueContext is SPDGrammarParser.ArrayValueContext || valueContext is SPDGrammarParser.ObjectValueContext)
32  return VisitChildren(context);
33  else
34  errors += Trim(valueContext.GetText());
35  }
36  else if (@string.Equals("\"error\"", StringComparison.CurrentCultureIgnoreCase))
37  errors += Trim(valueContext.GetText());
38  }
39  else if (status == OK_STATUS)
40  {
41  if (@string.Equals("\"name\"", StringComparison.CurrentCultureIgnoreCase))
42  actions.StoreAction(Trim(valueContext.GetText()));
43  else if (@string.Equals("\"plan\"", StringComparison.CurrentCultureIgnoreCase) || @string.Equals("\"result\"", StringComparison.CurrentCultureIgnoreCase))
44  return VisitChildren(context);
45  }
46 
47  return null;
48  }
49 
50  private static string Trim(string @string)
51  {
52  return (@string[0] == '"' && @string[@string.Length - 1] == '"') ? @string.Substring(1, @string.Length - 2) : @string;
53  }
54 
55  public static string Parse(IPDDLDataCollection actions, string spdOutput, bool two_stageParsing)
56  {
57  CommonTokenStream tokens = new CommonTokenStream(new SPDGrammarLexer(CharStreams.fromstring(spdOutput)));
58  SPDGrammarParser parser = new SPDGrammarParser(tokens);
59  SPDGrammarBaseVisitorImplementation visitor = new SPDGrammarBaseVisitorImplementation(actions);
60 
61  if (!two_stageParsing)
62  {
63  visitor.Visit(parser.json());
64 
65  return visitor.errors;
66  }
67 
68  parser.Interpreter.PredictionMode = PredictionMode.SLL;
69 
70  parser.RemoveErrorListeners();
71 
72  parser.ErrorHandler = new BailErrorStrategy();
73 
74  try
75  {
76  visitor.Visit(parser.json());
77  }
78  catch (SystemException exception)
79  {
80  if (exception.GetBaseException() is RecognitionException)
81  {
82  tokens.Seek(0);
83  parser.AddErrorListener(ConsoleErrorListener<object>.Instance);
84 
85  parser.ErrorHandler = new DefaultErrorStrategy();
86  parser.Interpreter.PredictionMode = PredictionMode.LL;
87 
88  visitor.Visit(parser.json());
89  }
90  }
91 
92  return visitor.errors;
93  }
94  }
95 }
SPDGrammarBaseVisitor
This class provides an empty implementation of ISPDGrammarVisitor<Result>, which can be extended to c...
Definition: SPDGrammarBaseVisitor.cs:35
it.unical.mat.parsers.pddl.solver_planning_domains.SPDGrammarBaseVisitorImplementation.VisitPair
override object VisitPair(SPDGrammarParser.PairContext context)
Visit a parse tree produced by SPDGrammarParser.pair.
Definition: SPDGrammarBaseVisitorImplementation.cs:20
it.unical.mat.parsers.pddl.solver_planning_domains
Definition: SPDGrammarBaseVisitorImplementation.cs:5
it.unical.mat.parsers.pddl.IPDDLDataCollection
Definition: IPDDLDataCollection.cs:3
it.unical.mat.parsers.pddl.solver_planning_domains.SPDGrammarBaseVisitorImplementation
Definition: SPDGrammarBaseVisitorImplementation.cs:7