3 using Antlr4.Runtime.Atn;
9 private const int OK_STATUS = 1;
10 private const int ERROR_STATUS = -1;
13 private string errors =
"";
17 this.actions = actions;
20 public override object VisitPair(SPDGrammarParser.PairContext context)
22 SPDGrammarParser.ValueContext valueContext = context.value();
23 string @
string = context.STRING().GetText();
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)
29 if (@
string.Equals(
"\"result\"", StringComparison.CurrentCultureIgnoreCase))
31 if (valueContext is SPDGrammarParser.ArrayValueContext || valueContext is SPDGrammarParser.ObjectValueContext)
32 return VisitChildren(context);
34 errors += Trim(valueContext.GetText());
36 else if (@
string.Equals(
"\"error\"", StringComparison.CurrentCultureIgnoreCase))
37 errors += Trim(valueContext.GetText());
39 else if (status == OK_STATUS)
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);
50 private static string Trim(
string @
string)
52 return (@
string[0] ==
'"' && @
string[@
string.Length - 1] ==
'"') ? @
string.Substring(1, @
string.Length - 2) : @string;
55 public static string Parse(
IPDDLDataCollection actions,
string spdOutput,
bool two_stageParsing)
57 CommonTokenStream tokens =
new CommonTokenStream(
new SPDGrammarLexer(CharStreams.fromstring(spdOutput)));
58 SPDGrammarParser parser =
new SPDGrammarParser(tokens);
59 SPDGrammarBaseVisitorImplementation visitor =
new SPDGrammarBaseVisitorImplementation(actions);
61 if (!two_stageParsing)
63 visitor.Visit(parser.json());
65 return visitor.errors;
68 parser.Interpreter.PredictionMode = PredictionMode.SLL;
70 parser.RemoveErrorListeners();
72 parser.ErrorHandler =
new BailErrorStrategy();
76 visitor.Visit(parser.json());
78 catch (SystemException exception)
80 if (exception.GetBaseException() is RecognitionException)
83 parser.AddErrorListener(ConsoleErrorListener<object>.Instance);
85 parser.ErrorHandler =
new DefaultErrorStrategy();
86 parser.Interpreter.PredictionMode = PredictionMode.LL;
88 visitor.Visit(parser.json());
92 return visitor.errors;