Ejemplo n.º 1
0
    def arrayInitializer(self, indice):
        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepAbreChave.name)
            return indice
        if not self.tokens[indice] != TipoToken.SepAbreChave.name:
            Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepAbreChave.name, self.tokens[indice])
            return indice
        indice += 1
        indice = self.variableInitializer(indice)

        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepFechaChave.name)
            return indice

        while self.tokens[indice] == TipoToken.SepVirgula.name:
            indice += 1
            indice = self.variableInitializer(indice)
            if not self.existeToken(indice):
                Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepFechaChave.name)
                return indice

        if not self.tokens[indice] == TipoToken.SepFechaChave.name:
            Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepFechaChave.name, self.tokens[indice])
            return indice

        indice += 1
        return indice
Ejemplo n.º 2
0
    def classBody(self, indice):
        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepAbreChave.name) # Token Esperado
            return indice
        if not self.tokens[indice] == TipoToken.SepAbreChave.name:
            Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepAbreChave.name, self.tokens[indice])
            return indice + 1
        indice += 1

        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepAbreChave.name)
            return indice
        modif = [TipoToken.PCPublic.name, TipoToken.PCProtected.name, TipoToken.PCPrivate.name, TipoToken.PCStatic.name, TipoToken.PCAbstract.name]
        while self.existeToken(indice) and self.tokens[indice] != TipoToken.SepFechaChave.name:
            if self.tokens[indice] in modif:
                indice = self.modifiers(indice)
            else:
                Error.RecebeuTokenInesperado(self.infoTokens[indice],modif, self.tokens[indice])
                indice += 1
                continue
            indice = self.memberDecl(indice)
        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepFechaChave.name) 
            return indice   
        return indice + 1
Ejemplo n.º 3
0
    def primary(self, indice):
        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepAbreParentese.name)
            return indice

        if self.tokens[indice] == TipoToken.SepAbreParentese.name:      # parExpression
            indice = self.parExpression(indice)
            return indice

        if self.tokens[indice] == TipoToken.PCThis.name:          # This
            indice += 1
            if not self.existeToken(indice):
                return indice
            if self.tokens[indice] == TipoToken.SepAbreParentese.name:
                indice = self.arguments(indice)
                return indice
            return indice

        if self.tokens[indice] == TipoToken.PCSuper.name:                   # Super
            indice += 1
            if not self.existeToken(indice):
                Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepAbreParentese.name)
                return indice

            if self.tokens[indice] == TipoToken.SepAbreParentese.name:
                indice = self.arguments(indice)
                return indice

            if self.tokens[indice] == TipoToken.SepPonto.name:
                indice += 1
                if not self.tokens[indice] == TipoToken.Variavel.name:
                    Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.Variavel.name, self.tokens[indice])
                if not self.existeToken(indice):
                    return indice
                if self.tokens[indice] == TipoToken.SepAbreParentese.name:
                    indice = self.arguments(indice)
                return indice
            Error.RecebeuTokenInesperado(self.infoTokens[indice],"Separador ou argumentos", self.tokens[indice] )
            indice += 1
            return indice


        if(self.eUmLiteral(indice)):          # literal
            return self.literal(indice)

        if(self.tokens[indice] == TipoToken.PCNew.name):        # New 
            indice += 1
            return self.creator(indice)

        aux = indice
        indice = self.qualifiedIdentifier(indice)               # senao Qualidifiertify

        if not self.existeToken(indice):
            return indice

        if self.tokens[indice] == TipoToken.SepAbreParentese.name:
            indice = self.arguments(indice)
        if(aux == indice):
            indice += 1
        return indice
Ejemplo n.º 4
0
    def formalParameters(self, indice):
        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepAbreParentese.name)
            return indice
        if not self.tokens[indice] == TipoToken.SepAbreParentese.name:
            Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepAbreParentese.name, self.tokens[indice])
            return indice   
        indice += 1 
        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepFechaParentese.name)
            return indice
        if not self.tokens[indice] == TipoToken.SepFechaParentese.name:
            indice = self.formalParameter(indice)
            if not self.existeToken(indice):
                Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepFechaParentese.name)
                return indice

            while self.tokens[indice] == TipoToken.SepVirgula.name:
                indice += 1
                indice = self.formalParameter(indice)
                if not self.existeToken(indice):
                    Error.EsperaTokenFimArquivo(self.infoTokens[indice],"formalParameter")
                    return indice
                
        if self.tokens[indice] != TipoToken.SepFechaParentese.name:
            Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepFechaParentese.name, self.tokens[indice])
            return indice
        indice += 1
        return indice
Ejemplo n.º 5
0
    def referenceType(self, indice):
        if not self.existeToken(indice):
            Error.NaoFoiPossivelLerMaisToken(self.infoTokens[indice],"basic type or qualifedIdentifier")
            return indice

        if self.ehUmBasicType(indice):
            indice += 1
            
            if not self.existeToken(indice):
                Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepAbreColchete.name)
                return indice

            if self.tokens[indice] != TipoToken.SepAbreColchete.name:
                Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepAbreColchete.name, self.tokens[indice])
                return indice 

        else:
            indice = self.qualifiedIdentifier(indice)
            if not self.existeToken(indice):
                return indice

            if self.tokens[indice] != TipoToken.SepAbreColchete.name:
                return indice 
        
        while self.existeToken(indice) and self.tokens[indice] == TipoToken.SepAbreColchete.name:
            indice += 1
            if not self.existeToken(indice):
                Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepFechaColchete.name)
                return indice
            if self.tokens[indice] != TipoToken.SepFechaColchete.name:
                Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepFechaColchete.name, self.tokens[indice])
                return indice
            indice += 1
        return indice
Ejemplo n.º 6
0
    def classDeclaration(self, indice):     #
        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.PCClass.name) # Token Esperado
            return indice
        if not self.tokens[indice] == TipoToken.PCClass.name:
            Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.PCClass.name, self.tokens[indice])
            indice += 1
            return indice
        indice += 1

        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.Variavel.name) # Token Esperado
            return indice
        if not self.tokens[indice] == TipoToken.Variavel.name:
            Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.Variavel.name, self.tokens[indice])
            indice += 1
            return indice
        indice += 1

        if not self.existeToken(indice):
            Error.NaoFoiPossivelLerMaisToken(self.infoTokens[indice],"classBody") # Token Esperado
            return indice
        if self.tokens[indice] == TipoToken.PCExtends.name:
            indice += 1
            indice = self.qualifiedIdentifier(indice)
            
        if not self.existeToken(indice):
            Error.NaoFoiPossivelLerMaisToken(self.infoTokens[indice],"classBody") # Token Esperado
            return indice
        indice = self.classBody(indice)
        return indice
Ejemplo n.º 7
0
    def newArrayDeclarator(self, indice):
        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepAbreColchete.name)
            return indice

        if not self.tokens[indice] == TipoToken.SepAbreColchete.name:
            Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepAbreColchete.name, self.tokens[indice])
            return indice 

        indice += 1
        indice = self.expression(indice)

        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepAbreColchete.name)
            return indice
        if not self.tokens[indice] == TipoToken.SepFechaColchete.name:
            Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepFechaColchete.name, self.tokens[indice])
            return indice 

        indice += 1

        while self.existeToken(indice) and self.tokens[indice] == TipoToken.SepAbreColchete.name:
            indice += 1

            if not self.existeToken(indice):
                Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepAbreColchete.name)
                return indice

            if self.tokens[indice] == TipoToken.SepFechaColchete.name:
                indice += 1

                while self.existeToken(indice) and self.tokens[indice] == TipoToken.SepAbreColchete.name:
                    indice += 1
                    if not self.existeToken(indice):
                        Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepFechaColchete.name)
                        return indice
                    if not self.tokens[indice] == TipoToken.SepFechaColchete.name:
                        Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepFechaColchete.name, self.tokens[indice])
                        return indice
                    indice += 1
                return indice

            indice = self.expression(indice)
            if not self.existeToken(indice):
                Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepFechaColchete.name)
                return indice

            if self.tokens[indice]  != TipoToken.SepFechaColchete.name:
                Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepFechaColchete.name, self.tokens[indice])
                return indice

        indice += 1
        return indice
Ejemplo n.º 8
0
    def arguments(self, indice):    #
        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepAbreParentese.name)
            return indice
        if not self.tokens[indice] == TipoToken.SepAbreParentese.name:
            Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepAbreParentese.name, self.tokens[indice])
            return indice
        indice += 1
        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepFechaParentese.name)
            return indice
        if not self.tokens[indice] == TipoToken.SepFechaParentese.name:
            indice = self.expression(indice)
            if not self.existeToken(indice):
                Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepVirgula.name)
                return indice
            while self.tokens[indice] == TipoToken.SepVirgula.name:
                indice += 1
                indice = self.expression(indice)
                if not self.existeToken(indice):
                    Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepVirgula.name)
                    return indice

        indice += 1
        return indice
Ejemplo n.º 9
0
    def selector(self, indice): #
        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepPonto.name)
            return indice
        if self.tokens[indice] == TipoToken.SepPonto.name:
            indice += 1
            indice = self.qualifiedIdentifier(indice)

            if not self.existeToken(indice):
                return indice

            if self.tokens[indice] == TipoToken.SepAbreParentese.name:
                indice = self.arguments(indice)
            return indice

        if self.tokens[indice] == TipoToken.SepAbreColchete.name:
            indice += 1
            indice = self.expression(indice)

            if not self.existeToken(indice):
                Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepAbreColchete.name)
                return indice

            if not self.tokens[indice] == TipoToken.SepFechaColchete.name:
                Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepFechaColchete.name, self.tokens[indice])
                return indice
            indice += 1
            return indice
        return indice
Ejemplo n.º 10
0
 def basicType(self, indice):
     if not self.existeToken(indice):
         Error.EsperaTokenFimArquivo(self.infoTokens[indice],[TipoToken.PCBoolean.name, TipoToken.PCChar.name, TipoToken.PCInt.name])
         return indice
     if not self.ehUmBasicType(indice):
         Error.RecebeuTokenInesperado(self.infoTokens[indice],[TipoToken.PCBoolean.name, TipoToken.PCChar.name, TipoToken.PCInt.name], self.tokens[indice])
         return indice
     indice += 1
     return indice
Ejemplo n.º 11
0
 def qualifiedIdentifier(self, indice):  #
     if not self.existeToken(indice):
         return indice
     while self.existeToken(indice) and self.tokens[indice] == TipoToken.Variavel.name:
         indice += 1
         if not self.existeToken(indice):
             return indice
         if self.tokens[indice] == TipoToken.SepPonto.name:
             indice += 1
         else:
             return indice
     if not self.existeToken(indice):
         Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.Variavel.name)
         return indice
     Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.Variavel.name, self.tokens[indice])
     if not self.existeToken(indice + 1):
         return indice
     return indice
Ejemplo n.º 12
0
    def parExpression(self, indice):
        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepAbreParentese.name)
            return indice
        if self.tokens[indice] != TipoToken.SepAbreParentese.name:
            Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepAbreParentese.name, self.tokens[indice])
            return indice

        indice += 1
        indice = self.expression(indice)
        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepFechaParentese.name)
            return indice

        if self.tokens[indice] != TipoToken.SepFechaParentese.name:
            Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepFechaParentese.name, self.tokens[indice])
            return indice

        indice += 1
        return indice
Ejemplo n.º 13
0
 def formalParameter(self, indice):
     if not self.existeToken(indice):
         Error.NaoFoiPossivelLerMaisToken(self.infoTokens[indice],"Type")
         return indice
     indice = self.funcaoType(indice)
     if not self.existeToken(indice):
         Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.Variavel.name, self.tokens[indice])
         return indice
     if self.tokens[indice] != TipoToken.Variavel.name:
         Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.Variavel.name, self.tokens[indice])
         return indice
     indice += 1
     return indice
Ejemplo n.º 14
0
    def memberDecl(self, indice):
        if not self.existeToken(indice):
            Error.NaoFoiPossivelLerMaisToken(self.infoTokens[indice],"memberDecl")
            return indice

        if self.tokens[indice] == TipoToken.Variavel.name:  # CONSTRUTOR
            indice += 1
            if self.existeToken(indice) and self.tokens[indice] == TipoToken.SepAbreParentese.name:
                indice += 1
                indice = self.formalParameters(indice)
                indice = self.block(indice)
                return indice

        if self.tokens[indice] == TipoToken.PCVoid.name:
            indice += 1
            if not self.existeToken(indice):
                Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.Variavel.name)
                return indice
        else:
            indice = self.funcaoType(indice)
            if not self.existeToken(indice):                
                Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.Variavel.name)
                return indice
            if self.tokens[indice] == TipoToken.Variavel.name: # FIELD
                aux = indice + 1
                if self.existeToken(aux) and self.tokens[aux] != TipoToken.SepAbreParentese.name:
                    indice = self.variableDeclarators(indice)
                    if not self.existeToken(indice):
                        Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepPontoEVirgula.name)
                        return indice
                    if self.tokens[indice] != TipoToken.SepPontoEVirgula.name:
                        Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepPontoEVirgula.name, self.tokens[indice])
                        return indice
                    indice += 1
                    return indice

        # METHOD
        if self.tokens[indice] == TipoToken.Variavel.name:
            indice += 1
            indice = self.formalParameters(indice)

        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepPontoEVirgula.name)
            return indice
        if self.tokens[indice] == TipoToken.SepPontoEVirgula.name:
            indice += 1
            return indice 
        indice = self.block(indice)
        return indice
Ejemplo n.º 15
0
    def compilationUnit(self):  #
        indice = 0;
        if not self.existeToken(indice):
            return indice
        
        if self.tokens[indice] == TipoToken.PCPackage.name:
            indice += 1
            indice = self.qualifiedIdentifier(indice)
            if not self.existeToken(indice):
                Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepPontoEVirgula.name) # Token Esperado
                return indice
            if self.tokens[indice] == TipoToken.SepPontoEVirgula.name:
                indice += 1
            else:
                Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepPontoEVirgula.name, self.tokens[indice])
        
        if not self.existeToken(indice):
            return indice

        while self.existeToken(indice) and self.tokens[indice] == TipoToken.PCImport.name:
            indice += 1
            indice = self.qualifiedIdentifier(indice)
            if not self.existeToken(indice):
                Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepPontoEVirgula.name) # Token Esperado
                return indice
            if self.tokens[indice] == TipoToken.SepPontoEVirgula.name:
                indice += 1
            else:
                Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepPontoEVirgula.name, self.tokens[indice])

        while self.existeToken(indice):
            indice = self.typeDeclaration(indice)

        if not self.existeToken(indice):
            return indice
        Error.EsperaTokenFimArquivo(self.infoTokens[indice],"ao finalizar o arquivo")
Ejemplo n.º 16
0
    def variableDeclarator(self, indice):
        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.Variavel.name)
            return indice
        if self.tokens[indice] != TipoToken.Variavel.name:
            Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.Variavel.name, self.tokens[indice])
            return indice
        indice += 1
        if not self.existeToken(indice):
            return indice

        if self.tokens[indice] == TipoToken.OPRecebe.name:
            indice += 1
            indice = self.variableInitializer(indice)

        return indice 
Ejemplo n.º 17
0
 def localVariableDeclarationStatement(self, indice):
     if not self.existeToken(indice):
         Error.NaoFoiPossivelLerMaisToken(self.infoTokens[indice],"type")
         return indice
     indice = self.funcaoType(indice)
     if not self.existeToken(indice):
         Error.NaoFoiPossivelLerMaisToken(self.infoTokens[indice],"variable declarators")
         return indice
     indice = self.variableDeclarators(indice) 
     if not self.existeToken(indice):
         Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepPontoEVirgula.name)
         return indice
     if self.tokens[indice] != TipoToken.SepPontoEVirgula.name:
         Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepPontoEVirgula.name, self.tokens[indice])            
         return indice
     indice += 1
     return indice
Ejemplo n.º 18
0
    def block(self, indice):
        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepAbreChave.name)
            return indice
        if not self.tokens[indice] == TipoToken.SepAbreChave.name:
            Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepAbreChave.name, self.tokens[indice])
            return indice
        indice += 1
        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepFechaChave.name)
            return indice

        while not self.tokens[indice] == TipoToken.SepFechaChave.name:
            indice = self.blockStatement(indice)
            if not self.existeToken(indice):
                Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepFechaChave.name)
                return indice
        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepFechaChave.name)
            return indice
        indice += 1
        return indice
Ejemplo n.º 19
0
    def statement(self, indice):
        if not self.existeToken(indice):
            Error.NaoFoiPossivelLerMaisToken(self.infoTokens[indice],"statement")
            return indice

        if self.tokens[indice] == TipoToken.SepAbreChave.name:           # block
            indice = self.block(indice)
            return indice

        '''if self.tokens[indice] == TipoToken.Variavel.name:               # <identifier>
            if not self.tokens[indice] == TipoToken.SepDoisPontos.name:
                Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepDoisPontos.name, self.tokens[indice])
                return indice
            indice += 1
            return self.statement(indice)'''

        if self.tokens[indice] == TipoToken.PCIf.name:                 # if
            indice += 1
            indice = self.parExpression(indice)
            indice += 1
            indice = self.statement(indice)
            if not self.existeToken(indice):
                return indice

            if self.tokens[indice] == TipoToken.PCElse.name:
                indice += 1
                return self.statement(indice)

            return indice

        if self.tokens[indice] == TipoToken.PCWhile.name:              # while
            indice += 1
            indice = self.parExpression(indice)
            indice += 1
            indice = self.statement(indice)
            return indice

        if self.tokens[indice] == TipoToken.PCReturn.name:             # return
            indice += 1
            if not self.existeToken(indice):
                Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepPontoEVirgula.name)
                return indice
            if self.tokens[indice] != TipoToken.SepPontoEVirgula.name:
                indice = self.expression(indice)
                if not self.existeToken(indice):
                    Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepPontoEVirgula.name)
                    return indice
                if self.tokens[indice] != TipoToken.SepPontoEVirgula.name:
                    Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepPontoEVirgula.name, self.tokens[indice])
                    return indice
                indice += 1
            return indice

        if self.tokens[indice] == TipoToken.SepPontoEVirgula.name:
            indice += 1
            return indice
        indice = self.statementExpression(indice)
        if not self.existeToken(indice):
            Error.NaoFoiPossivelLerMaisToken(self.infoTokens[indice],TipoToken.SepPontoEVirgula.name)
            return indice
        if self.tokens[indice] != TipoToken.SepPontoEVirgula.name:     # ;
            Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepPontoEVirgula.name, self.tokens[indice])
            return indice
        indice += 1
        return indice
Ejemplo n.º 20
0
    def simpleUnaryExpression(self, indice):
        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.OPNao.name)
            return indice

        if self.tokens[indice] == TipoToken.OPNao.name:
            indice += 1
            return self.unaryExpression(indice)

        if self.tokens[indice] == TipoToken.SepAbreParentese.name:
            indice += 1

            if not self.existeToken(indice):
                Error.EsperaTokenFimArquivo(self.infoTokens[indice],"simpleUnaryExpression")
                return indice

            if self.ehUmBasicType(indice) :
                aux = self.basicType(indice)

                if not self.existeToken(indice):
                    Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepFechaParentese.name)
                    return indice

                if self.tokens[indice] == TipoToken.SepAbreColchete.name:
                    indice = self.referenceType(indice)

                    if not self.existeToken(indice):
                        Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepFechaParentese.name)
                        return indice

                    if self.tokens[indice] != TipoToken.SepFechaParentese.name :
                        Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepFechaParentese.name, self.tokens[indice])

                    indice += 1
                    return self.simpleUnaryExpression(indice)
                
                else:
                    indice = aux
                    if not self.existeToken(indice):
                        Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepFechaParentese.name)
                        return indice

                    if(self.tokens[indice] != TipoToken.SepFechaParentese.name):
                        Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepFechaParentese.name, self.tokens[indice])
                    indice += 1
                    return self.unaryExpression(indice)

            elif self.ehUmReferenceType(indice):
                
                indice = self.referenceType(indice)
                if not self.existeToken(indice):
                    Error.EsperaTokenFimArquivo(self.infoTokens[indice],TipoToken.SepFechaParentese.name)
                    return indice

                if self.tokens[indice] != TipoToken.SepFechaParentese :
                    Error.RecebeuTokenInesperado(self.infoTokens[indice],TipoToken.SepFechaParentese.name, self.tokens[indice])
                indice += 1
                return self.simpleUnaryExpression(indice)
            else:
                indice += 1
                return self.postfixExpression(indice)

        indice = self.postfixExpression(indice)
        return indice