def parse_min_max(assignment): assert isinstance(assignment.value, expression.BinOp) and assignment.value.op in (nmlop.MIN, nmlop.MAX) # min(a, b) ==> a < b ? a : b. # max(a, b) ==> a > b ? a : b. action6.free_parameters.save() action_list = [] expr1 = parse_subexpression(assignment.value.expr1, action_list) expr2 = parse_subexpression(assignment.value.expr2, action_list) guard = expression.BinOp(nmlop.CMP_LT if assignment.value.op == nmlop.MIN else nmlop.CMP_GT, expr1, expr2) action_list.extend( parse_actionD(ParameterAssignment(assignment.param, expression.TernaryOp(guard, expr1, expr2, None))) ) action6.free_parameters.restore() return action_list
def p_ternary_op(self, t): "expression : expression TERNARY_OPEN expression COLON expression" t[0] = expression.TernaryOp(t[1], t[3], t[5], t[1].pos)