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())
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)
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)
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])
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))
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)))