Внутреннее представление программы в интерпретаторе?

Тема в разделе "WASM.A&O", создана пользователем Marcus, 15 авг 2006.

  1. Marcus

    Marcus New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2006
    Сообщения:
    8
    Пишу интерпретатор игровых скриптов для своей программы , возникла проблема во внутреннем представлении исходного кода скрипта.
    Исходники скриптов конвертируются в постфиксную нотацию, и в сохраняются в виде текста.

    Например выражение v=(3+4)/d будет преобразовано в:

    Add_Stack 3
    Add_Stack 4
    SUM
    Add_Stack @d
    DIV
    Get_Stack @V

    Теперь нужно этот исходник проиграть. У меня вопрос, есть ли открытые форматы виртуальных машин и байт-кода, на основе которых можно создать собственные разработки. Очень не хочется изобретать свой велосипед..

    1) Нужно описание какого нибудь байт-кода, его бинарный формат.

    2) Описание виртуальной машины его исполняющей.
     
  2. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    http://www.wasm.ru/docs/7/vmspec.zip :))
     
  3. Marcus

    Marcus New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2006
    Сообщения:
    8
    Cпасибо, про java уже читал, тут http://www.uni-vologda.ac.ru/java/jvm/3-doc.htm на русском
     
  4. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Есть. Здесь:
    http://s0m.narod.ru/neos0m.html
    Но на Delphi, под GPL и ориентировано в основном на задачи автоматизации. Документации по внутренним форматам пока что никакой, если не считать комментарии в тексте - не писал за ненадобностью. И там не "польская нотация", а обычная префиксная - <имя команды> <параметр1> <параметр2> ..., потому что на использование живыми людьми рассчитывалось.
     
  5. Marcus

    Marcus New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2006
    Сообщения:
    8
    А в какой последовательности должна проходить разработка интерпретатора?
    Мне кажется, что сначала надо разработать Виртуальную Машину, ассемблер к ней,
    а потом уже делать транслятор из скриптового языка, в такой последовательности:

    1 - спроектировать архитектуру ВМ.
    2 - разработать виртуальный ассемблер под эту ВМ.
    3 - разработать бинарный формат для хранения скомпилированного ВМ ассемблера.
    4 - написать компилятор из ВМ ассемблера в бинарный формат байт-кода.
    5 - написать транслятор скриптового языка в виртуальный ассемблер ВM.

    При этом, любые изменения в структуре языка, не будут затрагивать ВМ.
    Что скорее всего уменьшит сложность разработки, и упростит оптимизацию кода
     
  6. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Marcus
    То, что ты описываешь - уже не интерпретатор :)
    Это или шитый код (типа Forth) или P-код, что более общий случай.
     
  7. Marcus

    Marcus New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2006
    Сообщения:
    8
    Ну в общем случае, ВМ - это стековый интерпретатор. Компиляция в байт-код, для ускорения скорости работы, например так реализовано в Lua, а этот язык наиболее часто используют в игровых движках.
     
  8. Marcus

    Marcus New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2006
    Сообщения:
    8
    Вот нашел неплохой формат байт-кода от виртуальной машины LLVM

    http://llvm.org/releases/1.4/docs/BytecodeFormat.html