Beispiel #1
0
 def p_statement_6(self, p):
     """ statement : MINIMIZE LBRACE RBRACE DOT
                   | MAXIMIZE LBRACE RBRACE DOT
                   | MINIMIZE LBRACE min_elem_list RBRACE DOT 
                   | MAXIMIZE LBRACE max_elem_list RBRACE DOT 
     """
     # create preference statement
     s = ast.PStatement()
     self.p_statements += 1
     s.number = self.p_statements
     s.name = MINIMIZE_NAME
     s.type = MINIMIZE_TYPE
     s.elements = p[3] if len(p) == 6 else []
     s.body = None
     self.list.append((PREFERENCE, s))  # appends to self.list
     # restart element
     self.element = ast.Element()
     # error if not in base
     if self.program != BASE:
         self.__syntax_error(p, 1, len(p) - 1, ERROR_PREFERENCE)
     # add optimize statement
     s = ast.OStatement()
     s.name = MINIMIZE_NAME
     s.body = None
     self.list.append((OPTIMIZE, s))  # appends to self.list
     # error if there is also a preference specification
     self.__handle_clingo_statements(False, p, 1, len(p) - 1)
Beispiel #2
0
 def __parse_file(self, filename):
     # set variables
     self.filename = filename
     self.program = BASE
     self.element = ast.Element()
     self.position = utils.ProgramPosition(self.filename, 1, 1)
     # add #program base to list
     self.list.append((PROGRAM, self.base))
     # prepare lexer
     self.lexer.new_file(filename)
     # handle file descriptor, and parse
     fd = sys.stdin if filename == STDIN else open(filename)
     self.parser.parse(fd.read(), self.lexer.lexer)  # parses into self.list
     fd.close()
Beispiel #3
0
 def p_elem_list(self, p):
     """ elem_list : elem_list SEM elem body
                   |               elem body
     """
     # set self.element values & append to elem_list
     if len(p) == 5:
         self.element.sets = p[3][0]
         self.element.cond = p[3][1]
         self.element.body = p[4]
         p[0] = p[1] + [self.element]
     else:
         self.element.sets = p[1][0]
         self.element.cond = p[1][1]
         self.element.body = p[2]
         p[0] = [self.element]
     # restart element
     self.element = ast.Element()
Beispiel #4
0
 def p_max_elem_list(self, p):
     """ max_elem_list : max_elem_list SEM max_weighted_body
                       |                   max_weighted_body
     """
     # set self.element values & append to elem_list
     if len(p) == 4:
         self.element.sets = [[p[3]]]
         self.element.cond = []
         self.element.body = None
         p[0] = p[1] + [self.element]
     else:
         self.element.sets = [[p[1]]]
         self.element.cond = []
         self.element.body = None
         p[0] = [self.element]
     # restart element
     self.element = ast.Element()
Beispiel #5
0
 def p_statement_1(self, p):
     """ statement : PREFERENCE LPAREN term COMMA term RPAREN \
                     LBRACE elem_list RBRACE body DOT
                   | PREFERENCE LPAREN term COMMA term RPAREN \
                     LBRACE           RBRACE body DOT
     """
     # create preference statement
     s = ast.PStatement()
     self.p_statements += 1
     s.number = self.p_statements
     s.name = p[3]
     s.type = p[5]
     s.elements = p[8] if len(p) == 12 else []
     s.body = p[len(p) - 2]
     self.list.append((PREFERENCE, s))  # appends to self.list
     # restart element
     self.element = ast.Element()
     # error if not in base
     if self.program != BASE:
         self.__syntax_error(p, 1, len(p) - 1, ERROR_PREFERENCE)
     # error if there is also a clingo statement
     self.__handle_clingo_statements(True, p, 1, len(p) - 1)
Beispiel #6
0
def p_expression_value(p):
    '''expression : NUMBER'''
    p[0] = ast.Element(p[1])