public TinyELStatement parseFor() {
		accept(TinyELToken.FOR);

		accept(TinyELToken.LPAREN);
		String type = exprParser.type();
		String varName = exprParser.name().toString();

		if (lexer.token() == TinyELToken.COLON) {
			lexer.nextToken();
			TinyELForEachStatement stmt = new TinyELForEachStatement();
			stmt.setType(type);
			stmt.setVariant(varName);
			stmt.setTargetExpr(exprParser.expr());

			accept(TinyELToken.RPAREN);

			statementListBody(stmt.getStatementList());

			return stmt;
		}

		TinyELForStatement stmt = new TinyELForStatement();
		stmt.setType(type);
		accept(TinyELToken.EQ);
		{
			TinyELVariantDeclareItem var = new TinyELVariantDeclareItem(varName);
			var.setInitValue(exprParser.expr());
			stmt.getVariants().add(var);
		}

		while (lexer.token() == TinyELToken.COMMA) {
			lexer.nextToken();

			if (lexer.token() != TinyELToken.IDENTIFIER) {
				throw new ELException("parse error : " + lexer.token());
			}

			varName = lexer.stringVal();
			lexer.nextToken();

			TinyELVariantDeclareItem var = new TinyELVariantDeclareItem(varName);
			stmt.getVariants().add(var);

			if (lexer.token() == TinyELToken.EQ) {
				lexer.nextToken();
				var.setInitValue(exprParser.expr());
			}
		}

		accept(TinyELToken.SEMI);

		if (lexer.token() != TinyELToken.SEMI) {
			stmt.setCondition(exprParser.expr());
		}
		accept(TinyELToken.SEMI);

		if (lexer.token() != TinyELToken.RPAREN) {
			stmt.setPostExpr(exprParser.expr());
		}
		accept(TinyELToken.RPAREN);

		statementListBody(stmt.getStatementList());

		return stmt;
	}