Интерпретатор IF блоков - вот ведь задачка...
От: jit  
Дата: 28.12.05 20:12
Оценка:
Коллеги! Пишу простенький интерпретатор языка... Впрочем "язык" это слишком громко сказано — очень-очень простенькие скриптики. Тупо двигаемся по строкам файла и выполняем команды одну за другой... ОЧЕНЬ простой язык, в общем.

И столкнулся с проблемой. В моем "языке" есть конструкция IF-ENDIF. Когда интерпретатор доходит до инструкции IF- он проверяет условие, если истинно — идем дальше, если ложно — проскакиваем до ENDIF. Все как обычно. Никаких ELSE нет.

И я второй час не могу допетрить, как обрабатывать вложенные блоки этих IF'ов. Уверен, что решение очень простое и даже общеизвестное, помогите, а?

Пока придумал вот такой алгоритм:
— В переменной iNestLevel (int) храним текущую вложенность.
— Когда в коде встречается инструкция IF прибавляем к iNestLevel один, когда натыкаемся на ENDIF — отнимаем один.
— если мы встретили ложное условие в IF — мы "запоминаем" текущий iNestLevel в переменной iNestLevelToSkip (если она не 0)
— на каждой команде проверяем — если (iNestLevel > iNestLevelToSkip && iNestLevelToSkip>0 ) то команду пропускаем — переходим к следующей.
— когда доходим до ENDIF, после того как уменьшили iNestLevel, проверяем: если (iNestLevel==iNestLevelToSkip) то обнуляем iNestLevelToSkip.

будет такое работать? чуствую есть заковыка, а где — не пойму... Кофе и сигареты кончаются...

заранее снкс.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.