Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Finite State machine на javascript (https://javascript.ru/forum/misc/45035-finite-state-machine-na-javascript.html)

danik.js 11.02.2014 19:33

Finite State machine на javascript
 
Пишу парсер (верней переписываю).
В 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());
};


Любые идеи и предложения приветствуются :)

Забыл сказать, должна быть еще возможность переключать состояния извне.

skrudjmakdak 12.02.2014 12:49

когда я учился еще в институте, то сначала мы изучали паскаль, с++. и иногда я тоже пользовался конструкцией гото, но были люди, которые твердили, что гото это говно еще то. когда я сел на js, то его первое время не хватало, потом привык. а сейчас я тоже противник гото, имхо с ним код становится запутанным..

а вот с этим примером конечно сложно разобраться с первого раза, как его применять) можно пример использования? и как это примерно выглядит на сях?

danik.js 12.02.2014 13:07

Цитата:

Сообщение от skrudjmakdak
имхо с ним код становится запутанным

Да пох какой становится код. Мне тут главное выжать максимум скорости. Запутанность не страшит, ибо ты и без гото не захочешь разбираться как работает парсер :)

А в обычном коде да, гото не нужен. Я честно говоря никогда не пользовался им в других языках)

Пример писать лень. Важно что парсер переключается из состояния в состояние.

Посмотрев на другие реализации, вижу что в js вариант с функциями самый используемый. Только функции должны быть опеределены как свойства объекта, и даже наверное самого парсера.


Часовой пояс GMT +3, время: 09:08.