AFND-E TO AFND/AFD

Converte uma máquina AFND-E para uma máquina AFND ou AFD.

by Klawztro

JavaScript

var q0 = {},
    q1 = {},
    q2 = {},
    qf = {};

q0.__constructor__ = 'q0';
q0.a = [q1,q0];
q0.b = [q0];


q1.__constructor__ = 'q1';
q1.a = [q2];
//q1.b = [q1];


q2.__constructor__ = 'q2';
q2.b = [qf];

qf.__constructor__ = 'qf';
qf.final = true;

//Definindo funções vazias.
q0.E = q1;
q1.E = q2;

// <--------------------------------------------------------------------->
function hasObject(collection,obj,identifier) {
    var size = collection.length,
        cont = 0;
    
    for(; cont < size; cont++) {
        if (collection[cont][identifier] === obj[identifier]) {
            return true;
        }
    }
    return false;
}

function collectionHasProperty(collection,property) {
    var size = collection.length,
        cont = 0;
    
    for (; cont < size; cont++) {
        if (collection[cont].hasOwnProperty(property)) {
            return true;
        }
    }
    return false;    
}

function hasProperty(obj,property) {
    if (obj.hasOwnProperty(property)) {
        return true;
    }
    return false;
}

// <--------------------------------------------------------------------->
function arrayUnique(_array,identifier) {
    var new_array = [],
        cont = 0,
        exist_in_array = false,
        size = _array.length;

    for (; cont < size; cont++) {      
        exist_in_array = hasObject(new_array,_array[cont],identifier);
        if (exist_in_array === false) {
            new_array.push(_array[cont]);
        }
    }
    return new_array;
}
// <--------------------------------------------------------------------->

function iterate(lista_letras,estado_inicial) {
    var nova_maquina = [],
        state_name_counter = 0,
        final_state_name_counter = 0,
        test_list = [];

    nova_maquina[0] = { estado :  estado_inicial, nome : 'q' + state_name_counter };    
    test_list = addTests(test_list,nova_maquina[0].estado,lista_letras);
    state_name_counter++;
    for (var cont = 0; cont < test_list.length; cont++) {
        
    ...