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()); }; Любые идеи и предложения приветствуются :) Забыл сказать, должна быть еще возможность переключать состояния извне. |
когда я учился еще в институте, то сначала мы изучали паскаль, с++. и иногда я тоже пользовался конструкцией гото, но были люди, которые твердили, что гото это говно еще то. когда я сел на js, то его первое время не хватало, потом привык. а сейчас я тоже противник гото, имхо с ним код становится запутанным..
а вот с этим примером конечно сложно разобраться с первого раза, как его применять) можно пример использования? и как это примерно выглядит на сях? |
Цитата:
А в обычном коде да, гото не нужен. Я честно говоря никогда не пользовался им в других языках) Пример писать лень. Важно что парсер переключается из состояния в состояние. Посмотрев на другие реализации, вижу что в js вариант с функциями самый используемый. Только функции должны быть опеределены как свойства объекта, и даже наверное самого парсера. |
Часовой пояс GMT +3, время: 09:08. |