def p_if_stmt(p): """ if_stmt : IF expr sep stmt_list_opt elseif_stmt END_STMT | IF LPAREN expr RPAREN stmt_list_opt elseif_stmt END_STMT """ if len(p) == 7: p[0] = node.if_stmt(cond_expr=p[2], then_stmt=p[4], else_stmt=p[5]) elif len(p) == 8: p[0] = node.if_stmt(cond_expr=p[3], then_stmt=p[5], else_stmt=p[6]) else: assert 0
def p_if_stmt(p): """ if_stmt : IF expr sep stmt_list_opt elseif_stmt END_STMT | IF expr error stmt_list_opt elseif_stmt END_STMT """ p[0] = node.if_stmt(cond_expr=p[2], then_stmt=p[4], else_stmt=p[5])
def p_elseif_stmt(p): """ elseif_stmt : | ELSE stmt_list_opt | ELSEIF expr sep stmt_list_opt elseif_stmt | ELSEIF LPAREN expr RPAREN stmt_list_opt elseif_stmt """ if len(p) == 1: p[0] = node.stmt_list() elif len(p) == 3: p[0] = p[2] elif len(p) == 6: p[0] = node.if_stmt(cond_expr=p[2], then_stmt=p[4], else_stmt=p[5]) elif len(p) == 7: p[0] = node.if_stmt(cond_expr=p[3], then_stmt=p[5], else_stmt=p[6]) else: assert 0
def p_case_list(p): """ case_list : | CASE expr sep stmt_list_opt case_list | OTHERWISE stmt_list """ if len(p) == 1: p[0] = node.stmt_list() elif len(p) == 3: assert isinstance(p[2],node.stmt_list) p[0] = p[2] elif len(p) == 6: p[0] = node.if_stmt(cond_expr=node.expr(op="==", args=node.expr_list([p[2]])), then_stmt=p[4], else_stmt=p[5]) p[0].cond_expr.args.append(None) # None will be replaced using backpatch() else: assert 0