EmbASP-Python
spd_grammar_visitor_implementation.py
1 from .SPDGrammarLexer import SPDGrammarLexer
2 from .SPDGrammarParser import SPDGrammarParser
3 from .SPDGrammarVisitor import SPDGrammarVisitor
4 from antlr4 import PredictionMode
5 from antlr4.CommonTokenStream import CommonTokenStream
6 from antlr4.error.ErrorListener import ConsoleErrorListener
7 from antlr4.error.Errors import RecognitionException
8 from antlr4.error.ErrorStrategy import BailErrorStrategy, DefaultErrorStrategy
9 from antlr4.InputStream import InputStream
10 
11 
13  ERROR_STATUS = -1
14  OK_STATUS = 1
15 
16  def __init__(self, actions):
17  self._actions = actions
18  self._errors = ""
19  self._status = 0
20 
21  def visitPair(self, ctx):
22  string = ctx.STRING().getText()
23  valueContext = ctx.value()
24 
25  if self._status == 0 and string == '"status"':
26  self._status = SPDGrammarVisitorImplementation.OK_STATUS if (
27  valueContext.getText() == '"ok"') else SPDGrammarVisitorImplementation.ERROR_STATUS
28  elif self._status == SPDGrammarVisitorImplementation.ERROR_STATUS:
29  if string == '"result"':
30  if isinstance(
31  valueContext,
33  valueContext,
35  return self.visitChildren(ctx)
36  else:
37  self._errors += SPDGrammarVisitorImplementation._trim(
38  valueContext.getText())
39  elif string == '"error"':
40  self._errors += SPDGrammarVisitorImplementation._trim(
41  valueContext.getText())
42  elif self._status == SPDGrammarVisitorImplementation.OK_STATUS:
43  if string == '"name"':
44  self._actions.store_action(
45  SPDGrammarVisitorImplementation._trim(
46  valueContext.getText()))
47  elif string == '"plan"' or string == '"result"':
48  return self.visitChildren(ctx)
49 
50  @staticmethod
51  def _trim(string):
52  return string[1:-1] if (string[0] ==
53  '"' and string[-1] == '"') else string
54 
55  @staticmethod
56  def parse(actions, spdOutput, two_stageParsing):
57  tokens = CommonTokenStream(SPDGrammarLexer(InputStream(spdOutput)))
58  parser = SPDGrammarParser(tokens)
59  visitor = SPDGrammarVisitorImplementation(actions)
60 
61  if not two_stageParsing:
62  visitor.visit(parser.json())
63 
64  return visitor._errors
65 
66  parser._interp.predictionMode = PredictionMode.SLL
67  parser.removeErrorListeners()
68  parser._errHandler = BailErrorStrategy()
69 
70  try:
71  visitor.visit(parser.json())
72  except RuntimeError as exception:
73  if isinstance(exception, RecognitionException):
74  tokens.seek(0)
75  parser.addErrorListener(ConsoleErrorListener.INSTANCE)
76  parser._errHandler = DefaultErrorStrategy()
77  parser._interp.predictionMode = PredictionMode.LL
78  visitor.visit(parser.json())
79 
80  return visitor._errors
parsers.pddl.solver_planning_domains.SPDGrammarParser.SPDGrammarParser.ArrayValueContext
Definition: SPDGrammarParser.py:401
parsers.pddl.solver_planning_domains.spd_grammar_visitor_implementation.SPDGrammarVisitorImplementation._status
_status
Definition: spd_grammar_visitor_implementation.py:19
parsers.pddl.solver_planning_domains.SPDGrammarLexer.SPDGrammarLexer
Definition: SPDGrammarLexer.py:42
parsers.pddl.solver_planning_domains.SPDGrammarParser.SPDGrammarParser.ObjectValueContext
Definition: SPDGrammarParser.py:336
parsers.pddl.solver_planning_domains.spd_grammar_visitor_implementation.SPDGrammarVisitorImplementation
Definition: spd_grammar_visitor_implementation.py:12
parsers.pddl.solver_planning_domains.SPDGrammarVisitor.SPDGrammarVisitor
Definition: SPDGrammarVisitor.py:6
parsers.pddl.solver_planning_domains.SPDGrammarParser.SPDGrammarParser
Definition: SPDGrammarParser.py:34
parsers.pddl.solver_planning_domains.spd_grammar_visitor_implementation.SPDGrammarVisitorImplementation._actions
_actions
Definition: spd_grammar_visitor_implementation.py:17
parsers.pddl.solver_planning_domains.spd_grammar_visitor_implementation.SPDGrammarVisitorImplementation._errors
_errors
Definition: spd_grammar_visitor_implementation.py:18