private Type compileArray(Type base) throws ParseException, IOException {
		// [
		while ((tokenizer.tokenType() == Tokenizer.SYMBOL) &&
			       (tokenizer.symbol() == '[')) {
			advance("program not ended");

			int length = compileConstValue().intValue();

			base = new ArrayType(base, length);

			// ]
			if ((tokenizer.tokenType() != Tokenizer.SYMBOL) ||
				    (tokenizer.symbol() != ']')) {
				throw new ParseException("] is excepted", tokenizer.lineNumber());
			}

			advance("program not ended");
		}

		// the next token after array
		return base;
	}