$estadoAtual = $passosAutomato = $SimboloInicial;
$retorno['msg'] = 'Sentença não Reconhecida!';
for ($i = 0; $i < strlen($sentenca); $i++) {
    $letra = $sentenca[$i];
    if (is_object($DadosValorTerminalEstado)) {
        $estadosDestinos = $DadosValorTerminalEstado->{$letra}->{$estadoAtual};
    } else {
        $estadosDestinos = $DadosValorTerminalEstado[$letra]->{$estadoAtual};
    }
    if (Funcoes::temMaisDeUmEstadoDestino($estadosDestinos)) {
        $proximaLetra = '';
        $nextIndex = $i + 1;
        if (isset($sentenca[$nextIndex])) {
            $proximaLetra = $sentenca[$nextIndex];
        }
        $estadoDestino = Funcoes::getEstadoDestino($estadosDestinos, $letra, $proximaLetra, $estadoAtual);
    } else {
        $estadoDestino = $estadosDestinos;
    }
    if (empty($estadoDestino)) {
        $retorno['passosAutomato'] = $passosAutomato . '->(Não foi achado estado destino)';
        echo json_encode($retorno);
        exit;
    }
    $passosAutomato .= '->' . $estadoDestino;
    $estadoAtual = $estadoDestino;
    if ($i == $indexUltimaLetra) {
        if (!Funcoes::estadoIsFinal($estadoAtual, $SimbolosFinais)) {
            $retorno['passosAutomato'] = $passosAutomato . '(Não é estado final)';
            echo json_encode($retorno);
            exit;