It has been about 18 years since I used RecDescent, but looking at your grammar, it seems that the array reference is coming from the '@' in the Action of your expr rule coupled with the brackets in your term rule, which seems to be misplaced with the leading '|', so its regex may not be recognized as a regex, confusing RecDescent. What is the '|' supposed to be an alternative of, the operand rule parenthesized expression?
I liked RecDescent for its EBNF, because I had much previous experience with another recursive descent metacompiler, TREE META, but I found it far too slow for my design work. I ended up using Bison. I wonder if Damien has improved its speed by re-coding some of it in C since I last used it. I wish I had more time to work on it.