def test_disjunction(self): self.check_parser(DISJUNCTION_STR, DISJUNCTION_AST) # self.check_parser('%s or %s' % (CONJUNCTION_STR, operator_str_gen('<=')), # AST.Disjunction(CONJUNCTION_AST, operator_ast_gen(AST.Lte))) self.check_parser('%s or %s' % (DATE_STR, DATE_STR), AST.Disjunction(DATE_AST, DATE_AST))
LIST_STR = '[%s, %s]' % (FUNCTION_STR, CONTEXT_STR) LIST_AST = AST.List([FUNCTION_AST, CONTEXT_AST]) INSTANCE_OF_STR = '%s instance of ala.ma.kota' % LIST_STR # INSTANCE_OF_STR = '%s instance of ala.ma.kota' % LIST_STR INSTANCE_OF_AST = AST.InstanceOf(LIST_AST, AST.Type([AST.Name('ala.ma.kota')])) FILTER_EXPRESSION_STR = '%s [%s]' % (LIST_STR, INSTANCE_OF_STR) FILTER_EXPRESSION_AST = AST.FilterExpression(LIST_AST, INSTANCE_OF_AST) CONJUNCTION_STR = '%s and %s' % (operator_str_gen('='), INSTANCE_OF_STR) CONJUNCTION_AST = AST.Conjunction(operator_ast_gen(AST.Eq), INSTANCE_OF_AST) DISJUNCTION_STR = '%s or %s' % (CONJUNCTION_STR, operator_str_gen('<=')) DISJUNCTION_AST = AST.Disjunction(CONJUNCTION_AST, operator_ast_gen(AST.Lte)) QUANTIFIED_STR = 'some ala in %s satisfies %s' % (DISJUNCTION_STR, CONJUNCTION_STR) QUANTIFIED_AST = AST.QuantifiedExpr(True, [(AST.Name('ala'), DISJUNCTION_AST)], CONJUNCTION_AST) IF_STR = 'if %s then %s else %s' % (QUANTIFIED_STR, DISJUNCTION_STR, CONJUNCTION_STR) IF_AST = AST.If(QUANTIFIED_AST, DISJUNCTION_AST, CONJUNCTION_AST) FOR_STR = 'for ala in %s return %s' % (IF_STR, QUANTIFIED_STR) FOR_AST = AST.For([(AST.Name('ala'), IF_AST)], QUANTIFIED_AST) PATH_STR = '%s.ala' % DATE_STR PATH_AST = AST.Path(DATE_AST, AST.Name('ala')) INVOCATION_STR = '%s(%s, %s)' % (PATH_STR, FOR_STR, IF_STR) INVOCATION_AST = AST.Invocation(PATH_AST, [FOR_AST, IF_AST])
def p_disjunction(self, p): """disjunction : expression OR expression""" p[0] = AST.Disjunction(p[1], p[3])