Der wrote:
Харошь гнать

Не видел я в своей жизни еще таких ситуаций, гдеб вместо гоуту пришлось бы использовать какие-то сверхсложные условия...
Мало значит ты видел вообще ситуаций... Я с головы придумывать не буду, но подобные ситуации бывают. Железно. И вообще: чтобы оценивать что есть гоуту для скрипта, надо почитать как скриптовый модуль работает... Не знаю, есть ли у тебя такой файлик, но вот цитата:
Quote:
Идея парсера
Собственно заключается в том, чтобы использовать Bison по максимуму. Единственное ограничение – Бизон рассчитан на написание компиляторов. То есть таких программ, в которых переданный скрипт просматривается целиком и притом всего один раз. У меня же интерпретатор. А в интерпретаторе, как известно, части скрипта могут вообще не выполняться (например, тело IF) или выполняться несколько раз (в случае цикла). Как я из этого выкручиваюсь?
Тупо. Бизон генерирует разборщик грамматики yyparse, который зависит от внешней функции yylex, сообщающей ему, какое именно слово требуется разобрать в дальнейшем. Так я в функции yylex вру что, например, в случае ложного условия IF тело до ENDIF пустое, а в случае цикла FOR a=1 to 10, тело цикла повторяется 10 раз.
Правда в этом случае пришлось функцию yylex сделать слишком «интеллектуальной»: она сама определяет, когда надо убрать строки, а когда наоборот. К счастью «добавление» лишних строк осуществляется простой установкой внутреннего указателя ScriptPos в соответствующую позицию (кстати, таким же образом реализован GoTo). А «удаление» строк сделано функциями SkipToEndIf, SkipToCR, SkipToElseOrEndif, SkipToWend и т.д. Их назначение ясно из названия.
Комментарии по тексту парсера находятся в myparser.h, по синтаксису в script.y.
Еще одно замечание. Главной частью парсера является класс TVariable, который, несмотря на название, хранит не только переменные, но и классы, массивы, а так же море внутренней информации используемой в основном внутри script.y
Так что как видишь, гоуту для скрипта не представляет в обработке каких-либо сложностей, не сложнее ифа.