Example #1
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
Example #2
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
Example #3
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
Example #4
0
 def funcaoType(self, indice):
     if not self.existeToken(indice):
         Error.NaoFoiPossivelLerMaisToken(self.infoTokens[indice],"'reference type' or 'basic type'")
         return indice
     if self.ehUmBasicType(indice):
         if self.existeToken(indice + 1) and self.tokens[indice]  == TipoToken.SepAbreColchete.name:
             return self.referenceType(indice)
         return self.basicType(indice)
     return self.referenceType(indice)
Example #5
0
 def variableDeclarators(self, indice):
     indice = self.variableDeclarator(indice)
     if not self.existeToken(indice):
         return indice
     while self.tokens[indice] == TipoToken.SepVirgula.name:
         indice += 1
         if not self.existeToken(indice):
             Error.NaoFoiPossivelLerMaisToken(self.infoTokens[indice],"variable declarator")
             return indice
         indice = self.variableDeclarator(indice)
     return indice
Example #6
0
    def creator(self, indice):
        if not self.existeToken(indice):
            Error.NaoFoiPossivelLerMaisToken(self.infoTokens[indice],"Type")
            return indice

        if self.ehUmType(indice):
            if self.ehUmReferenceType(indice):
                indice = self.referenceType(indice)

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

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

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

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

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

            indice = self.newArrayDeclarator(indice)
            return indice
        Error.NaoFoiPossivelLerMaisToken(self.infoTokens[indice],"Type")
        return indice
Example #7
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
Example #8
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
Example #9
0
    def relationalExpression(self, indice):
        if not self.existeToken(indice):
            Error.NaoFoiPossivelLerMaisToken(self.infoTokens[indice],"additive expression")
            return indice
        indice = self.additiveExpression(indice)
        if not self.existeToken(indice):
            Error.EsperaTokenFimArquivo(self.infoTokens[indice],[TipoToken.OPMaior.name, TipoToken.OPMenorIgual.name ])
            return indice

        if self.tokens[indice] == TipoToken.OPMaior.name or self.tokens[indice] == TipoToken.OPMenorIgual.name: 
            indice += 1
            indice = self.additiveExpression(indice)
        elif self.tokens[indice] == TipoToken.PCInstanceOf.name:
            indice += 1
            indice = self.referenceType(indice)

        return indice
Example #10
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