Как написать свой интерпретатор?

Тема в разделе "WASM.BEGINNERS", создана пользователем searkand, 7 янв 2011.

  1. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.250
    вот это смешно канеш...

    по сабжу: смотрите нереальную кучу открытых продуктов: Ruby, Python, NewLisp, LibJIT, Mono, Parrot, LLVM и много других... и их "интерпретаторы компилирующего типа"))))
     
  2. searkand

    searkand New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2010
    Сообщения:
    27
    Rel
    скачивал пару раз. проблема в том что это уже не мелкие языки и разобраться в их исходниках довольно затрднительно. а меня вот интересует почти простейшая реализация любого языка
     
  3. searkand

    searkand New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2010
    Сообщения:
    27
    Скажите есть ли у интерпретируемых языков доступ к устройствам?
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.250
    возьми урезанные версии этих языков: tinypy, mirb, tinyrb... или языки для гейм-скриптинга: GameMonkey, Angel Script, DMDScript, они существенно проще... насчет компиляторов можешь посмотреть yasm из ассемблеров, компилятор языка D (у Digital Mars вроде открытый) - си/джава подобный язык...

    в теории да... как сделаете интерпретатор - так и будет... у руби вроде был экстеншн для этого...
     
  5. searkand

    searkand New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2010
    Сообщения:
    27
    вот еще вопрос. (для тех кто проочитал мое первое сообщение в этой теме)
    вот если я создал язык который переводится в промежуточный язык а потом в ассамблер. то по идее с помощью 'вставок' асм. кода в этот язык я смогу пользоваться богатством языка ассамблера?
     
  6. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.250
    да... сишные асм-вставки так и сделаны...
     
  7. searkand

    searkand New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2010
    Сообщения:
    27
    Rel
    спасибо. помог разобраться. буду доделывать свои компилятор. через такие вставки и буду общаться с системой.
     
  8. searkand

    searkand New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2010
    Сообщения:
    27
    в уроках для дZенствующих было описано как скомпилить пустую com программу размером в два байта (CD 20). exe программа может быть скомпилированна таким образом? и как скомпилировать без debug.exe?
     
  9. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.250
    exe - это формат PE... там должны быть всякие заголовки, секции, стабы и тд... погугли по словам "минимальный exe-файл", видел целую статью об этом где-то...
     
  10. searkand

    searkand New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2010
    Сообщения:
    27
    Rel
    почитал про него статьи. сложная структура у него.
    думаю вот этот вариант мне подойдет лучше всего. и естественно вопрос: как будет происходить этот процесс?(так же как в уроках дZенствующего). пытался открыть com файл(2 байта) в своей программе но получил крякозябры.
     
  11. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    searkand
    ты сначала напиши компилятор в свой байткод и его интерпретатор, а потом уже думай про форматы файлов - это самая простая часть задачи.
     
  12. searkand

    searkand New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2010
    Сообщения:
    27
    Voodoo
    уже написал такую штуку. скрипт -> байт код -> asm файл -> obj файл -> exe файл
     
  13. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    а переложить три последние стадии на, скажем, fasm религия позволит?
     
  14. Monogen

    Monogen New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2008
    Сообщения:
    90
    searkand
    Что-то я уже ничего не понимаю. Вы хотели писать интерпретатор. Теперь у вас получается компилятор. В таком случае проще сделать так: ваш язык -> fasm -> obj -> exe. И никакой байт код тут уже не нужен. Почитайте все-таки книжки, которые я упомянул: вам яснее все станет. Начните со Свердлова. У него там рассмотрен простой компилятор с простейшего подмножества Оберона в байт-код виртуальной машины. Приведен код компилятора и виртуальной машины на C++, Паскале, Обероне, C#, Java. Изложен минимум теории. Почитайте: самое-то для вас.
     
  15. searkand

    searkand New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2010
    Сообщения:
    27
    Monogen
    я сам себя обманул.
     
  16. J0E

    J0E New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2008
    Сообщения:
    621
    Адрес:
    Panama
    Без внешнего ассемблера можно обойтись используя asmjit
     
  17. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.250
    J0E
    о, кстати да... первый раз слышу о нем... надо будет посмотреть детально...
     
  18. searkand

    searkand New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2010
    Сообщения:
    27
    пока почитаю книги которые мне посоветовали а если будут еще вопросы то спрошу. спасибо тем кто помог
     
  19. searkand

    searkand New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2010
    Сообщения:
    27
    Всем привет! я вернулся прочитав несколько интересных книг. Ну так вот я написал свои интерпретатор и виртуальную машину которая имитирует реальный процессор. Возник только один вопрос: Как использовать процессор из своей проги? знаю вопрос некорректный просто по другому сформулировать не получилось.
     
  20. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    searkand
    в смысле? как сделать жит?