Промежуточный код

Тема в разделе "WASM.ZEN", создана пользователем Xerx, 14 авг 2007.

  1. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    Задался вопросом выбора промежуточного кода для компилятора. Не хочу формировать код сразу для процессоров x86. Компилятор разрабатывается из двух частей: непосредственно трансляция исходного кода в промежуточный, а вторавя часть - компиляция и линковка из промежуточного кода в исполняемый файл. Причем хочется использовать в качестве промежуточного кода какой-либо из используемых на различных платформах, чтобы не реализовывать его потом самому.

    И собственно сам вопрос: кто может привести существующие на данный момент (т.е. используемые) промежуточные коды (интересуют в основном трехадресные коды) с компиляторами, в которых они применяются? Нужно подробное описание, чтобы я мог на его основе во всем разобраться :derisive:

    Может очень размыто написал, но короче может быть еще менее понятно. Заранее спасибо за помощь в поиске!
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    зачем?
     
  3. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    А какое это имеет отношение к вопросу? Допустим, что просто хочу ;)
    Не верю, что таких компиляторов нет.
     
  4. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    gcc смотри
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
  6. fram

    fram New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2006
    Сообщения:
    24
    Java (на сайте вроде есть подробное описание)
     
  7. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    Xerx

    GIMPLE в gcc. Для Явы сталкивался с Jimple в Soot, но так и не смог эту кривую поделку ни к чему приспособить. У lcc вроде тоже что-то свое промежуточное было.
     
  8. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    infern0 и Stiver
    GIMPLE слишком высокоуровневый и очень сильно приспособленный к C++. Не подходит.

    IceStudent и fram
    MSIL еще хуже. Как-никак C# - это ООП по-умолчанию.
    О Java я знаю, но он мной даже не рассматривался по той же причине, что там используется трансляция в Forth, который тоже слишком высокоуровневый.

    У меня же пока функциональный (процедурный) ЯП. И выкручивание с переводом простого в общем-то кода в ТО, что предлагают GIMPLE и MSIL, необосновано. Скорее мне подойдет P-код того же Pascal, хотя он очень приспособлен к рекурсивному спуску и ограничен структурой языка.

    Еще предложения?
     
  9. CroX

    CroX New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2006
    Сообщения:
    37
    Xerx
    Какой еще Forth ?
    JVM дествительно основан на стеке, но никакого Форта там и близко нет.
     
  10. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    CroX
    Из Википедии: http://ru.wikipedia.org/wiki/Байт-код

    Я давно о этом слышал.
     
  11. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Xerx
    Кстати, паррот тоже весьма низкоуровнев.

    Ты даже не посмотрел спецификацию, а уже говоришь, что он высокоуровневый. Да и Форт используется только в специфичном случае, а не во всех JVM.
     
  12. CroX

    CroX New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2006
    Сообщения:
    37
    Xerx
    Кстати, Форт не такой уж и высокоуровневый язык.
     
  13. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    IceStudent
    Вот про попугая надо будет почитать поподробнее...

    Если ты про Forth, то смотри ниже.

    Тогда что используется в большинстве случаев?

    CroX
    Для меня (точнее, в моем случае), Forth высокоуровневый язык: встроенные ветвления, циклы, функции и т.д. Конечно можно извращаться и просто их не использовать, но тут будет множество проблем с реализацией.
     
  14. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Вот с этого и надо было начинать - с обозначения критериев поиска. Для кого-то си достаточно низкоуровневый, а для кого-то ассемблер - это слишком круто, подавайте машкоды.
     
  15. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    IceStudent
    Виноват, каюсь. Нужен уровень ассемблера.
     
  16. CroX

    CroX New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2006
    Сообщения:
    37
    Xerx
    IMHO, JVM и MSIL вполне соответствует этому уровню.