Пишу интерпретатор игровых скриптов для своей программы , возникла проблема во внутреннем представлении исходного кода скрипта. Исходники скриптов конвертируются в постфиксную нотацию, и в сохраняются в виде текста. Например выражение v=(3+4)/d будет преобразовано в: Add_Stack 3 Add_Stack 4 SUM Add_Stack @d DIV Get_Stack @V Теперь нужно этот исходник проиграть. У меня вопрос, есть ли открытые форматы виртуальных машин и байт-кода, на основе которых можно создать собственные разработки. Очень не хочется изобретать свой велосипед.. 1) Нужно описание какого нибудь байт-кода, его бинарный формат. 2) Описание виртуальной машины его исполняющей.
Есть. Здесь: http://s0m.narod.ru/neos0m.html Но на Delphi, под GPL и ориентировано в основном на задачи автоматизации. Документации по внутренним форматам пока что никакой, если не считать комментарии в тексте - не писал за ненадобностью. И там не "польская нотация", а обычная префиксная - <имя команды> <параметр1> <параметр2> ..., потому что на использование живыми людьми рассчитывалось.
А в какой последовательности должна проходить разработка интерпретатора? Мне кажется, что сначала надо разработать Виртуальную Машину, ассемблер к ней, а потом уже делать транслятор из скриптового языка, в такой последовательности: 1 - спроектировать архитектуру ВМ. 2 - разработать виртуальный ассемблер под эту ВМ. 3 - разработать бинарный формат для хранения скомпилированного ВМ ассемблера. 4 - написать компилятор из ВМ ассемблера в бинарный формат байт-кода. 5 - написать транслятор скриптового языка в виртуальный ассемблер ВM. При этом, любые изменения в структуре языка, не будут затрагивать ВМ. Что скорее всего уменьшит сложность разработки, и упростит оптимизацию кода
Marcus То, что ты описываешь - уже не интерпретатор Это или шитый код (типа Forth) или P-код, что более общий случай.
Ну в общем случае, ВМ - это стековый интерпретатор. Компиляция в байт-код, для ускорения скорости работы, например так реализовано в Lua, а этот язык наиболее часто используют в игровых движках.
Вот нашел неплохой формат байт-кода от виртуальной машины LLVM http://llvm.org/releases/1.4/docs/BytecodeFormat.html