public final void arrayElement() throws RecognitionException
    {
        Token id = null;
        
        AST ast1 = null, ast2 = null, ast3 = null;
        
        try {
            // CPP.g:797:3: (id= IDENTIFIER '[' expr ']' index )
            // CPP.g:797:5: id= IDENTIFIER '[' expr ']' index
            {
                id = (Token) this.match(this.input, IDENTIFIER, FOLLOW_IDENTIFIER_in_arrayElement3618);
                if (this.state.failed) {
                    return;
                }
                this.match(this.input, 25, FOLLOW_25_in_arrayElement3625);
                if (this.state.failed) {
                    return;
                }
                this.pushFollow(FOLLOW_expr_in_arrayElement3632);
                this.expr();
                
                this.state._fsp--;
                if (this.state.failed) {
                    return;
                }
                if (this.state.backtracking == 0) {
                    ast1 = this.out;
                    this.out = null;
                }
                this.match(this.input, 26, FOLLOW_26_in_arrayElement3640);
                if (this.state.failed) {
                    return;
                }
                this.pushFollow(FOLLOW_index_in_arrayElement3647);
                this.index();
                
                this.state._fsp--;
                if (this.state.failed) {
                    return;
                }
                if (this.state.backtracking == 0) {
                    ast2 = this.out;
                    this.out = null;
                }
                if (this.state.backtracking == 0) {
                    
                    ast3 = new ExprListAST((ExprAST) ast1, (ExprListAST) ast2);
                    this.out = new EleExprAST(id, (ExprListAST) ast3);
                    
                }
                
            }
            
        }
        catch (RecognitionException re) {
            this.reportError(re);
            this.recover(this.input, re);
        } finally {
        }
        return;
    }