public final void para() throws RecognitionException
    {
        Token ref = null;
        Token id = null;
        
        AST ast1 = null, ast2 = null;
        
        try {
            // CPP.g:264:3: ( type (ref= '&' )? id= IDENTIFIER arrayDecl )
            // CPP.g:264:5: type (ref= '&' )? id= IDENTIFIER arrayDecl
            {
                this.pushFollow(FOLLOW_type_in_para1019);
                this.type();
                
                this.state._fsp--;
                if (this.state.failed) {
                    return;
                }
                if (this.state.backtracking == 0) {
                    ast1 = this.out;
                    this.out = null;
                }
                // CPP.g:265:5: (ref= '&' )?
                int alt16 = 2;
                int LA16_0 = this.input.LA(1);
                
                if ((LA16_0 == 44)) {
                    alt16 = 1;
                }
                switch (alt16)
                {
                    case 1:
                        // CPP.g:265:6: ref= '&'
                    {
                        ref = (Token) this.match(this.input, 44, FOLLOW_44_in_para1030);
                        if (this.state.failed) {
                            return;
                        }
                        
                    }
                        break;
                    
                }
                
                id = (Token) this.match(this.input, IDENTIFIER, FOLLOW_IDENTIFIER_in_para1040);
                if (this.state.failed) {
                    return;
                }
                this.pushFollow(FOLLOW_arrayDecl_in_para1043);
                this.arrayDecl();
                
                this.state._fsp--;
                if (this.state.failed) {
                    return;
                }
                if (this.state.backtracking == 0) {
                    ast2 = this.out;
                    this.out = null;
                }
                if (this.state.backtracking == 0) {
                    
                    if (!(ast2 instanceof EmptyExprListAST)) {
                        this.out = new ParaAST(id, new ArrayTypeAST((TypeAST) ast1, (ExprListAST) ast2), ref != null);
                    }
                    else {
                        this.out = new ParaAST(id, (TypeAST) ast1, ref != null);
                    }
                    
                }
                
            }
            
        }
        catch (RecognitionException re) {
            this.reportError(re);
            this.recover(this.input, re);
        } finally {
        }
        return;
    }