def __saltaestado(self, i): """ Troca o estado da análise de acordo com o :param i: caractere para testar """ if len(self.regras[self.estado][i]) > 1: raise ErroLexico('INDETERMINISMO NO ESTADO ' + str(self.estado)) elif len(self.regras[self.estado][i]) == 1: self.estado = self.regras[self.estado][i][0]
def __reconheceestado(self, i): """ Insere um estado reconhecido na tabela de símbolos :param i: caractere para testar """ if self.estado not in self.finais: print(self.finais) raise ErroLexico(3, i, self.linha, self.coluna) self.tabela.reconhece(self.estado, self.linha) self.estado = 0
def __testacaractere(self, i): """ Verifica se o caractere encontrado pode ser processado :param i: caractere para testar """ if i in self.regras[self.estado]: self.__caracterevalido(i) elif i in self.separadores: self.__reconheceestado(i) self.__novalinha(i) else: raise ErroLexico(1, i, self.linha, self.coluna)
def __caracterevalido(self, i): """ Verifica se um caractere pertencente à linguagem é válido dado o estado atual da análise. Tokens que também são separadores fazem parte do alfabeto da linguagem. :param i: caractere para testar """ if self.regras[self.estado][i]: self.__saltaestado(i) elif i in self.separadoresTokens: self.__reconheceseparadorespecial(i) else: raise ErroLexico(2, i, self.linha, self.coluna)
def __reconheceestado(self, i): """ Insere um estado reconhecido na tabela de símbolos :param i: caractere para testar """ if self.estado not in self.finais: print(self.finais) raise ErroLexico(3, i, self.linha, self.coluna) if i == '\n': self.tabela.reconhece('$',self.linha, '$') a = ''.join(self.token) self.tabela.reconhece(self.estado, self.linha, a) self.estado = 0 self.token.clear()