Задался вопросом выбора промежуточного кода для компилятора. Не хочу формировать код сразу для процессоров x86. Компилятор разрабатывается из двух частей: непосредственно трансляция исходного кода в промежуточный, а вторавя часть - компиляция и линковка из промежуточного кода в исполняемый файл. Причем хочется использовать в качестве промежуточного кода какой-либо из используемых на различных платформах, чтобы не реализовывать его потом самому. И собственно сам вопрос: кто может привести существующие на данный момент (т.е. используемые) промежуточные коды (интересуют в основном трехадресные коды) с компиляторами, в которых они применяются? Нужно подробное описание, чтобы я мог на его основе во всем разобраться Может очень размыто написал, но короче может быть еще менее понятно. Заранее спасибо за помощь в поиске!
А какое это имеет отношение к вопросу? Допустим, что просто хочу Не верю, что таких компиляторов нет.
Xerx GIMPLE в gcc. Для Явы сталкивался с Jimple в Soot, но так и не смог эту кривую поделку ни к чему приспособить. У lcc вроде тоже что-то свое промежуточное было.
infern0 и Stiver GIMPLE слишком высокоуровневый и очень сильно приспособленный к C++. Не подходит. IceStudent и fram MSIL еще хуже. Как-никак C# - это ООП по-умолчанию. О Java я знаю, но он мной даже не рассматривался по той же причине, что там используется трансляция в Forth, который тоже слишком высокоуровневый. У меня же пока функциональный (процедурный) ЯП. И выкручивание с переводом простого в общем-то кода в ТО, что предлагают GIMPLE и MSIL, необосновано. Скорее мне подойдет P-код того же Pascal, хотя он очень приспособлен к рекурсивному спуску и ограничен структурой языка. Еще предложения?
Xerx Кстати, паррот тоже весьма низкоуровнев. Ты даже не посмотрел спецификацию, а уже говоришь, что он высокоуровневый. Да и Форт используется только в специфичном случае, а не во всех JVM.
IceStudent Вот про попугая надо будет почитать поподробнее... Если ты про Forth, то смотри ниже. Тогда что используется в большинстве случаев? CroX Для меня (точнее, в моем случае), Forth высокоуровневый язык: встроенные ветвления, циклы, функции и т.д. Конечно можно извращаться и просто их не использовать, но тут будет множество проблем с реализацией.
Вот с этого и надо было начинать - с обозначения критериев поиска. Для кого-то си достаточно низкоуровневый, а для кого-то ассемблер - это слишком круто, подавайте машкоды.