No, we wouldn't want that. BOTH syntaxes would work. You need to add the following rule to expression_term to enable this, though:
    |   field=identifier LSQUARE e=expression RSQUARE  { $ret = factory.function("ARRAY_ELEM", Collections.<ParseNode>singletonList(e));}

This will allow an array element reference anywhere in the grammar where an expression_term is allowed. This includes within the SELECT, WHERE, GROUP BY, HAVING, and ORDER BY. It would also allow expressions (or literals, of course) for the array subscript. By declaring through our annotations that the second argument to the ARRAY_ELEM function is an INTEGER, you'd get the type checking for free. See my blog [here](http://phoenix-hbase.blogspot.com/2013/04/how-to-add-your-own-built-in-function.html) for how to add this built-in function and it's annotation.

For example, these would all work
    SELECT a_double_array[1] FROM table_with_array;
    SELECT ARRAY_ELEM(a_double_array, 1) FROM table_with_array;
    SELECT * FROM table_with_array WHERE a_double_array[1] < 5.0;
    SELECT * FROM table_with_array WHERE a_double_array[1] < 5.0 GROUP BY a_double_array[a_index + 1]

It'd be perhaps a bit cleaner if you had a factory.arrayElemRef(ParseNode e) function that you'd call from PHoenixSQL.g that would just create a function parse node as shown above.