В общем, создалось у меня впечатление, что некоторых разработчиков Форт отпугивает своей "непонятностью" там, где её на самом деле нет. Постараюсь рассмотреть реализацию JBForth на низком уровне без "ужасов высокоуровневой терминологии". Потом можете перекинуть это в Wiki или даже перевести на английский
Начнём с того, что у JBForth и нынешнего калькулятора статсов l2j - много общего в базовой реализации.
Основной цикл - сниятие из массива/списка очередного объекта и выполнение его метода.
Форт-слово представляет собой массив объектов - наследников Word. Каждое из которых имеет метод .exec(), который и выполняет нужные операции. Для низкоуровневых слов, написанных на Java, это непосредственный набор инструкций. Например, умножение:
code java
public class mul extends Word
{
public void exec(JBForth jbf)
{
jbf.st.set(jbf.st.pop_i() * jbf.st.top_i());
}
}
Здесь:
jbf - объект Форта, передаваемый выполняемому слову. Их может быть много - у каждого активного объекта игры, например.
jbf.st - стек Форта.
jbf.st.pop_i() - функция, снимающая и преобразующая к целому виду число со стека
jbf.st.top_i() - число на вершине стека, без снятия
jbf.st.set(N) - подменить число на вершине стека на N.
Как видим, всё просто.
При исполнении Форт берёт объекты Word из списка один за другим и делает exec(), пока список не кончится.
Слова высокого уровня содержат в себе пролог и список слов, который должен исполняться.
Трансляция исходного текста на Форте тоже очень примитивна.
Есть два режима трансляции - непосредственное исполнение и компилляция. Различает их Форт тупой булевой переменной.
Берём из входного потока слово, ограниченное пробелом. Пытаемся найти его в словаре (словарь - это хешмап, в котором по имени прописаны все объекты Word в системе). Не находим - пробуем рассмотреть его как число, как строку, как подгружаемый файл, если ничего не прошло - выдаём ошибку.
Если находим, то смотрим на наше состояние. Если режим исполнения - делаем WordHashMap<наше слово,Word>.exec().
Режим компилляции - добавлем этот объект в формирующийся список слов.
Всё.
Задавайте вопросы