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
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
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
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
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
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
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
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
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
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
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
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
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
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
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")
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
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
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
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
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