Пишу парсер (верней переписываю).
В C++ конечный автомат реализуется эффективно с использованием GOTO.
В JS умники решили что GOTO в языке не нужен. Вопрос: как должен выглядеть эффективный конечный автомат. Чтоб в нем потери на сам каркас были минимальные.
Сейчас парсер работает так:
function Parser() {}
Parser.prototype.parse = function() {
    var state = state1;
    function state1() {
        // переключаем состояние
        state = state2;
        return true;
    }
    
    function state2() {
        // останавливаем цикл
        return false;
    }
    
    while(state());
};
Любые идеи и предложения приветствуются 
Забыл сказать, должна быть еще возможность переключать состояния извне.