def direct_declarator()

in BaseTools/Source/Python/Eot/CParser3/CParser.py [0:0]


    def direct_declarator(self, ):

        direct_declarator_StartIndex = self.input.index()
        try:
            try:
                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 23):
                    return

                # C.g:303:2: ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ )
                alt34 = 2
                LA34_0 = self.input.LA(1)

                if (LA34_0 == IDENTIFIER) :
                    alt34 = 1
                elif (LA34_0 == 62) :
                    alt34 = 2
                else:
                    if self.backtracking > 0:
                        self.failed = True
                        return

                    nvae = NoViableAltException("302:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ );", 34, 0, self.input)

                    raise nvae

                if alt34 == 1:
                    # C.g:303:4: IDENTIFIER ( declarator_suffix )*
                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_direct_declarator819)
                    if self.failed:
                        return
                    # C.g:303:15: ( declarator_suffix )*
                    while True: #loop31
                        alt31 = 2
                        LA31_0 = self.input.LA(1)

                        if (LA31_0 == 62) :
                            LA31 = self.input.LA(2)
                            if LA31 == 63:
                                LA31_30 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == 58:
                                LA31_31 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == 66:
                                LA31_32 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == 59:
                                LA31_33 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == 60:
                                LA31_34 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == IDENTIFIER:
                                LA31_35 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == 29 or LA31 == 30 or LA31 == 31 or LA31 == 32 or LA31 == 33:
                                LA31_37 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == 34:
                                LA31_38 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == 35:
                                LA31_39 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == 36:
                                LA31_40 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == 37:
                                LA31_41 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == 38:
                                LA31_42 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == 39:
                                LA31_43 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == 40:
                                LA31_44 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == 41:
                                LA31_45 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == 42:
                                LA31_46 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == 45 or LA31 == 46:
                                LA31_47 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == 48:
                                LA31_48 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == 49 or LA31 == 50 or LA31 == 51 or LA31 == 52 or LA31 == 53 or LA31 == 54 or LA31 == 55 or LA31 == 56 or LA31 == 57 or LA31 == 61:
                                LA31_49 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1



                        elif (LA31_0 == 64) :
                            LA31 = self.input.LA(2)
                            if LA31 == 65:
                                LA31_51 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == 62:
                                LA31_52 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == IDENTIFIER:
                                LA31_53 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == HEX_LITERAL:
                                LA31_54 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == OCTAL_LITERAL:
                                LA31_55 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == DECIMAL_LITERAL:
                                LA31_56 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == CHARACTER_LITERAL:
                                LA31_57 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == STRING_LITERAL:
                                LA31_58 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == FLOATING_POINT_LITERAL:
                                LA31_59 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == 72:
                                LA31_60 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == 73:
                                LA31_61 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == 66 or LA31 == 68 or LA31 == 69 or LA31 == 77 or LA31 == 78 or LA31 == 79:
                                LA31_62 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1


                            elif LA31 == 74:
                                LA31_63 = self.input.LA(3)

                                if (self.synpred67()) :
                                    alt31 = 1





                        if alt31 == 1:
                            # C.g:0:0: declarator_suffix
                            self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator821)
                            self.declarator_suffix()
                            self.following.pop()
                            if self.failed:
                                return


                        else:
                            break #loop31




                elif alt34 == 2:
                    # C.g:304:4: '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+
                    self.match(self.input, 62, self.FOLLOW_62_in_direct_declarator827)
                    if self.failed:
                        return
                    # C.g:304:8: ( 'EFIAPI' )?
                    alt32 = 2
                    LA32_0 = self.input.LA(1)

                    if (LA32_0 == 58) :
                        LA32_1 = self.input.LA(2)

                        if (self.synpred69()) :
                            alt32 = 1
                    if alt32 == 1:
                        # C.g:304:9: 'EFIAPI'
                        self.match(self.input, 58, self.FOLLOW_58_in_direct_declarator830)
                        if self.failed:
                            return



                    self.following.append(self.FOLLOW_declarator_in_direct_declarator834)
                    self.declarator()
                    self.following.pop()
                    if self.failed:
                        return
                    self.match(self.input, 63, self.FOLLOW_63_in_direct_declarator836)
                    if self.failed:
                        return
                    # C.g:304:35: ( declarator_suffix )+
                    cnt33 = 0
                    while True: #loop33
                        alt33 = 2
                        LA33_0 = self.input.LA(1)

                        if (LA33_0 == 62) :
                            LA33 = self.input.LA(2)
                            if LA33 == 63:
                                LA33_30 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == 58:
                                LA33_31 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == 66:
                                LA33_32 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == 59:
                                LA33_33 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == 60:
                                LA33_34 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == IDENTIFIER:
                                LA33_35 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == 29 or LA33 == 30 or LA33 == 31 or LA33 == 32 or LA33 == 33:
                                LA33_37 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == 34:
                                LA33_38 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == 35:
                                LA33_39 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == 36:
                                LA33_40 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == 37:
                                LA33_41 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == 38:
                                LA33_42 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == 39:
                                LA33_43 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == 40:
                                LA33_44 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == 41:
                                LA33_45 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == 42:
                                LA33_46 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == 45 or LA33 == 46:
                                LA33_47 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == 48:
                                LA33_48 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == 49 or LA33 == 50 or LA33 == 51 or LA33 == 52 or LA33 == 53 or LA33 == 54 or LA33 == 55 or LA33 == 56 or LA33 == 57 or LA33 == 61:
                                LA33_49 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1



                        elif (LA33_0 == 64) :
                            LA33 = self.input.LA(2)
                            if LA33 == 65:
                                LA33_51 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == 62:
                                LA33_52 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == IDENTIFIER:
                                LA33_53 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == HEX_LITERAL:
                                LA33_54 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == OCTAL_LITERAL:
                                LA33_55 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == DECIMAL_LITERAL:
                                LA33_56 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == CHARACTER_LITERAL:
                                LA33_57 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == STRING_LITERAL:
                                LA33_58 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == FLOATING_POINT_LITERAL:
                                LA33_59 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == 72:
                                LA33_60 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == 73:
                                LA33_61 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == 66 or LA33 == 68 or LA33 == 69 or LA33 == 77 or LA33 == 78 or LA33 == 79:
                                LA33_62 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1


                            elif LA33 == 74:
                                LA33_63 = self.input.LA(3)

                                if (self.synpred70()) :
                                    alt33 = 1





                        if alt33 == 1:
                            # C.g:0:0: declarator_suffix
                            self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator838)
                            self.declarator_suffix()
                            self.following.pop()
                            if self.failed:
                                return


                        else:
                            if cnt33 >= 1:
                                break #loop33

                            if self.backtracking > 0:
                                self.failed = True
                                return

                            eee = EarlyExitException(33, self.input)
                            raise eee

                        cnt33 += 1





            except RecognitionException as re:
                self.reportError(re)
                self.recover(self.input, re)
        finally:
            if self.backtracking > 0:
                self.memoize(self.input, 23, direct_declarator_StartIndex)

            pass

        return