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)
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()
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()
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()
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)
def p_expression_value(p): '''expression : NUMBER''' p[0] = ast.Element(p[1])