示例#1
0
    def createForLoop(self, index_id, lbound_exp, ubound_exp, stride_exp,
                      loop_body):
        '''
        Generate a for-loop statement based on the given loop structure information:
          for (index_id = lbound_exp; index_id <= ubound_exp; index_id = index_id + stride_exp)
            loop_body
        '''

        init_exp = None
        test_exp = None
        iter_exp = None
        if lbound_exp:
            init_exp = ast.BinOpExp(index_id.replicate(),
                                    lbound_exp.replicate(),
                                    ast.BinOpExp.EQ_ASGN)
        if ubound_exp:
            test_exp = ast.BinOpExp(index_id.replicate(),
                                    ubound_exp.replicate(), ast.BinOpExp.LE)
        if stride_exp:
            while isinstance(stride_exp, ast.ParenthExp):
                stride_exp = stride_exp.exp
            it = ast.BinOpExp(index_id.replicate(), stride_exp.replicate(),
                              ast.BinOpExp.ADD)
            iter_exp = ast.BinOpExp(index_id.replicate(), it,
                                    ast.BinOpExp.EQ_ASGN)
        if not isinstance(loop_body, ast.CompStmt):
            loop_body = ast.CompStmt([loop_body])
        return ast.ForStmt(init_exp, test_exp, iter_exp, loop_body.replicate())
示例#2
0
文件: ast_util.py 项目: zhjp0/Orio
    def createForLoop(self, id, lb, ub, st, bod):
        '''
        Generate a loop statement:
        for (id = lb; id <= ub; id = id + st)
          bod
        '''

        init = None
        test = None
        iter = None
        if lb:
            init = ast.BinOpExp(id.replicate(), lb.replicate(),
                                ast.BinOpExp.EQ_ASGN)
        if ub:
            test = ast.BinOpExp(id.replicate(), ub.replicate(),
                                ast.BinOpExp.LE)
        if st:
            i = ast.BinOpExp(id.replicate(), st.replicate(), ast.BinOpExp.ADD)
            iter = ast.BinOpExp(id.replicate(), i, ast.BinOpExp.EQ_ASGN)
        bod = bod.replicate()
        if not isinstance(bod, ast.CompStmt):
            bod = ast.CompStmt([bod])
        return ast.ForStmt(init, test, iter, bod)
示例#3
0
def p_iteration_statement(p):
    'iteration_statement : FOR LPAREN expression_opt SEMI expression_opt SEMI expression_opt RPAREN statement'
    p[0] = ast.ForStmt(p[3], p[5], p[7], p[9], p.lineno(1) + __start_line_no - 1)
示例#4
0
文件: code_parser.py 项目: phrb/Orio
def p_iteration_statement(p):
    "iteration_statement : FOR LPAREN expression_opt SEMI expression_opt SEMI expression_opt RPAREN statement"
    p[0] = ast.ForStmt(p[3], p[5], p[7], p[9])
示例#5
0
def p_stmt_for(p):
    'stmt : FOR LPAREN stmt_expr_opt SEMICOLON expr_opt SEMICOLON stmt_expr_opt RPAREN stmt'
    p[0] = ast.ForStmt(p[3], p[5], p[7], p[9], p.lineno(1))
示例#6
0
def p_iteration_statement(p):
    "iteration_statement : FOR LPAREN expression_opt SEMI expression_opt SEMI expression_opt RPAREN statement"
    p[0] = ast.ForStmt(p[3], p[5], p[7], p[9], getLineNumber(p.lineno(1)))