private BigInteger compileConstValue() throws ParseException, IOException {
		BigInteger val = BigInteger.ZERO;
		BigInteger tmp;
		char lastOperator = '+';

		do {
			switch (tokenizer.tokenType()) {
				case Tokenizer.IDENTIFIER:

					ConstExpression constExpr =
						Consts.fromName(tokenizer.getIdentifier());
					tmp = constExpr.value();

					break;

				case Tokenizer.INT_CONST:
					tmp = tokenizer.bigIntVal();

					break;

				default:
					throw new ParseException("const or number is expected" +
					                         tokenizer.symbol(),
					                         tokenizer.lineNumber());
			}

			switch (lastOperator) {
				case '+':
					val = val.add(tmp);

					break;

				case '-':
					val = val.subtract(tmp);

					break;
			}

			advance("program not ended");

			if ((tokenizer.tokenType() != Tokenizer.SYMBOL) ||
				    ((tokenizer.symbol() != '+') &&
				    (tokenizer.symbol() != '-'))) {
				break;
			}

			lastOperator = tokenizer.symbol();
			advance("program not ended");
		} while (true);

		return val;
	}