Maquina AFND-E

by Klawztro

HTML

<!-- MAQUINA AFND-E -->

JavaScript

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

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


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


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




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

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

// <--------------------------------------------------------------------->
function eclose(state) {
    var state_list = [],
        exist_in_list = false;
    
    state_list.push(state);
    while (typeof state.E !== 'undefined' && exist_in_list === false) {
        exist_in_list = hasObject(state_list,state.E,'__constructor__');
        if (exist_in_list === false) {
            state_list.push(state.E);
            state = state.E;
        }
    }
    return state_list;
}
// <--------------------------------------------------------------------->

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 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(word,state_list) {
    var letter = word.shift(),
        valid_word,
        apply_func_list = [],
        cont = 0,
        e_close_result_list = [],
        size = state_list.length;
        
    for (; cont < size; cont++) {
        if (typeof state_list[cont][letter] !== 'undefined') {
            apply_func_list =...