final public Stat IfThenElse() throws ParseException {
		Block b, b2, b3 = null;
		Exp e, e2;
		List<Exp> el = null;
		List<Block> bl = null;
		jj_consume_token(IF);
		e = Exp();
		jj_consume_token(THEN);
		b = Block();
		label_2: while (true) {
			switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
			case ELSEIF:
				;
				break;
			default:
				jj_la1[8] = jj_gen;
				break label_2;
			}
			jj_consume_token(ELSEIF);
			e2 = Exp();
			jj_consume_token(THEN);
			b2 = Block();
			if (el == null)
				el = new ArrayList<Exp>();
			if (bl == null)
				bl = new ArrayList<Block>();
			el.add(e2);
			bl.add(b2);
		}
		switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
		case ELSE:
			jj_consume_token(ELSE);
			b3 = Block();
			break;
		default:
			jj_la1[9] = jj_gen;
			;
		}
		jj_consume_token(END);
		{
			if (true)
				return Stat.ifthenelse(e, b, el, bl, b3);
		}
		throw new Error("Missing return statement in function");
	}