public final void var() throws RecognitionException
    {
        Token id = null;
        
        AST ast1 = null, ast2 = null, ast3 = null;
        
        try {
            // CPP.g:104:3: (id= IDENTIFIER arrayDecl ( initializer )? )
            // CPP.g:104:5: id= IDENTIFIER arrayDecl ( initializer )?
            {
                if (this.state.backtracking == 0) {
                    ast1 = this.in;
                }
                id = (Token) this.match(this.input, IDENTIFIER, FOLLOW_IDENTIFIER_in_var314);
                if (this.state.failed) {
                    return;
                }
                this.pushFollow(FOLLOW_arrayDecl_in_var321);
                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)) {
                        ast1 = new ArrayTypeAST((TypeAST) ast1, (ExprListAST) ast2);
                    }
                    
                }
                // CPP.g:110:5: ( initializer )?
                int alt5 = 2;
                int LA5_0 = this.input.LA(1);
                
                if ((LA5_0 == 27)) {
                    alt5 = 1;
                }
                switch (alt5)
                {
                    case 1:
                        // CPP.g:0:0: initializer
                    {
                        this.pushFollow(FOLLOW_initializer_in_var335);
                        this.initializer();
                        
                        this.state._fsp--;
                        if (this.state.failed) {
                            return;
                        }
                        
                    }
                        break;
                    
                }
                
                if (this.state.backtracking == 0) {
                    ast3 = this.out;
                    this.out = null;
                }
                if (this.state.backtracking == 0) {
                    this.out = new VarDeclAST(id, (TypeAST) ast1, (InitializerAST) ast3);
                }
                
            }
            
        }
        catch (RecognitionException re) {
            this.reportError(re);
            this.recover(this.input, re);
        } finally {
        }
        return;
    }