Esempio n. 1
0
    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)
Esempio n. 4
0
    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)
Esempio n. 5
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)
        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()