Внезапно, в соседней теме:
in4 писал(а):
Интересна задача [книга-игра] и ее реализация на Форте.
Не будем рассматривать вопрос реальной потребности в такой реализации.
Допустим: "патамучта нада!"
Конечно, ввиду того, что это "далеко не ОС", реализация, очевидно, будет по варианту (1), но для примера сойдет.
На что это похоже (совсем из другой игры)?
Т.е. опять - интерпретатор.
Насколько он похож на интерпретатор FORTH?
Данные:
ПОТОК - с одной стороны проще (вместо слов - почти одни литеры, редко числа), с другой сложнее (набор команд зависит от состояния).
ЗНАЧЕНИЕ - здесь, скорее всего, не только команда но и значения всех текущих переменных (множество жетонов, маркеров, позиция на поле, записи).
СТЕК - команды с параметрами есть, значит, он нужен. С другой стороны, т.к. в алгоритме есть возможность отката вычислений, то стек нужен еще раз.
СЛОВАРЬ - в рассматриваемой книге-игре, очевидно словарем будут наборы команд и параграфов, хотя, конечно нужны и более простые "чисто игровые" слова (кубик, выбор, схватка...).
Процедуры:
ОК - выдача не только самого "Ok", но и текста параграфа. И, самое главное, подстройка под состояние набора допустимых команд.
СИМВОЛ - По условным составляющим: EXPECT - можно допустить разные варианты для разных состояний (просто команда, команда с числом, выбор варианта...); WORD - рудиментарен (все делает EXPECT); FIND - самое важное для него проверка допустимости команд (делать словари для каждого отдельного состояния, наверное, геморройно, скорее - матрица допустимости); NUMBER - тоже рудиментарный (часть EXPECT?).
ВЫПОЛНИТЬ - в смысле текущий параграф СЛОВАРЯ с введенным ЗНАЧЕНИЕМ, что бы это ни значило...
КОМПИЛИРОВАТЬ - отсутствует, разве что пытаться хранить в СЛОВАРЕ, а не в ЗНАЧЕНИИ текущее состояние.
СЛЕДУЮЩИЙ - настраиваемое, в зависимости от цикла, переход либо к следующему параграфу, либо к текущей точке возврата...
А теперь представим, что подходящего FORTH у программиста пока нет. И если его писать с нуля, не имеет ли смысл включить некоторые из перечисленных механизмов в параллель его внутренним структурам сразу, чтобы потом не реализовывать их "поверх"?