示例#1
0
文件: actionD.py 项目: OpenTTD/nml
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
示例#2
0
 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)