code: Expr array() {
  		if (peek().sym != Sym.LBRACK) {
  			return atom();
  		}
  		
  		move();
  		if (peek().sym == Sym.RBRACK) {
  			move();
  			return new Array(ExprList.NULL_EXPR_ARRAY, location);
  		}
  		ExprList exprList = exprList();
  		if (exprList.length() == 1 && peek().sym == Sym.RANGE) {
  			move();
  			Expr end = expr();
  			match(Sym.RBRACK);
  			return new RangeArray(exprList.getExprArray()[0], end, location);
  		}
  		
  		match(Sym.RBRACK);
  		return new Array(exprList.getExprArray(), location);
  	}
docs: array : '[' exprList ? | range ? ']'
  exprList : expr (',' expr)*
  range : expr .. expr