EmbASP-Python
dlv2_parser_visitor_implementation.py
1 from .DLV2Lexer import DLV2Lexer
2 from .DLV2Parser import DLV2Parser
3 from .DLV2ParserVisitor import DLV2ParserVisitor
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  def __init__(self, answerSets):
14  self._answerSets = answerSets
15  self._costs = None
16 
17  def visitAnswer_set(self, ctx):
18  self._answerSets.add_answer_set()
19 
20  if ctx.cost() is not None and not ctx.cost().isEmpty():
21  self._costs = {}
22  firstCost = ctx.cost().COST_LABEL(
23  ).getText().split(' ')[1].split('@')
24 
25  self._costs[firstCost[1]] = firstCost[0]
26 
27  if self._costs is not None:
28  for level, cost in self._costs.items():
29  self._answerSets.store_cost(level, cost)
30 
31  return self.visitChildren(ctx)
32 
33  def visitLevel(self, ctx):
34  level = ctx.INTEGER(1).getText()
35  cost = ctx.INTEGER(0).getText()
36 
37  self._costs[level] = cost
38  self._answerSets.store_cost(level, cost)
39 
40  def visitPredicate_atom(self, ctx):
41  self._answerSets.store_atom(ctx.getText())
42 
43  @staticmethod
44  def parse(answerSets, dlv2Output, two_stageParsing):
45  tokens = CommonTokenStream(DLV2Lexer(InputStream(dlv2Output)))
46  parser = DLV2Parser(tokens)
47  visitor = DLV2ParserVisitorImplementation(answerSets)
48 
49  if not two_stageParsing:
50  visitor.visit(parser.output())
51 
52  return
53 
54  parser._interp.predictionMode = PredictionMode.SLL
55  parser.removeErrorListeners()
56  parser._errHandler = BailErrorStrategy()
57 
58  try:
59  visitor.visit(parser.output())
60  except RuntimeError as exception:
61  if isinstance(exception, RecognitionException):
62  tokens.seek(0)
63  parser.addErrorListener(ConsoleErrorListener.INSTANCE)
64  parser._errHandler = DefaultErrorStrategy()
65  parser._interp.predictionMode = PredictionMode.LL
66  visitor.visit(parser.output())
parsers.asp.dlv2.dlv2_parser_visitor_implementation.DLV2ParserVisitorImplementation
Definition: dlv2_parser_visitor_implementation.py:12
parsers.asp.dlv2.DLV2ParserVisitor.DLV2ParserVisitor
Definition: DLV2ParserVisitor.py:6
parsers.asp.dlv2.dlv2_parser_visitor_implementation.DLV2ParserVisitorImplementation._costs
_costs
Definition: dlv2_parser_visitor_implementation.py:15
parsers.asp.dlv2.DLV2Lexer.DLV2Lexer
Definition: DLV2Lexer.py:59
parsers.asp.dlv2.dlv2_parser_visitor_implementation.DLV2ParserVisitorImplementation._answerSets
_answerSets
Definition: dlv2_parser_visitor_implementation.py:14
parsers.asp.dlv2.DLV2Parser.DLV2Parser
Definition: DLV2Parser.py:38