private VariableType variable() {
		int linum = getLineNumber();
		String name = getIdentifer().getName();
		VariableType type;
				
		Variable v = env.find(name);
		if(v == null) {
			throw new RuntimeException("Line\t\t\t\t" + linum + " : Undefined Variable " + name);
		} else if(v.getType() == VariableType.PROCEDURE) {
			throw new RuntimeException("Line\t\t\t\t" + linum + " : Referencing Procedure as variable : " + name);
		}
		
		type = v.getType();
		
		if(!testToken(TokenType.SLBRACKET)) {
			return type;
		}
		
		//process array
		
		linum = getLineNumber();
		if(!v.getType().isArray()) {
			throw new RuntimeException("Line\t\t\t\t" + linum + " : " + name + " is not array");
		}
		
		if(whenToken(TokenType.SLBRACKET)) {
			VariableType itype = expression();
			if(itype != VariableType.INTEGER) 
				throw new RuntimeException("Line\t\t\t\t" + linum + " : Array index must be integer : " + name);
			expectToken(TokenType.SRBRACKET);
		}
		return v.getType().arrayOf();
	}