Компилятор: перевод в сборку

Я написал интерпретатор для своего экспериментального языка и знаю, что хочу продолжить и написать для него небольшой компилятор. Вероятно, он возьмет исходный код, выполнит те же действия, что и интерпретатор (токенизатор, парсер), а затем переведет исходный код в сборку.

Теперь мои вопросы:

  • Могу ли я ожидать, что каждая команда на моем языке может быть переведена в соотношении 1: 1 в кучу инструкций по сборке? Я имею в виду, что мне придется полностью перебросить всю программу ввода или она просто переведена на сборку на каждую строку.

  • Какой ассемблер я должен использовать в качестве выходного формата?


person sub    schedule 10.04.2010    source источник
comment
Что касается второго вопроса: какова ваша целевая платформа?   -  person Thomas    schedule 10.04.2010
comment
stackoverflow.com/questions/1669/learning-to-write -a-compiler   -  person    schedule 10.04.2010


Ответы (3)


  1. Я интерпретирую ваш вопрос как вопрос, будет ли каждое выражение на вашем языке переведено в одни и те же строки ASM в любом контексте. Ответ: это зависит от вашего языка, но обычно нет. Существуют осложняющие проблемы, такие как распределение регистров, из-за которого вывод может отличаться от 1: 1, в зависимости от контекста. Вашему оператору может потребоваться несколько регистров, которые в одном контексте могут быть свободными, а в другом - занятыми (так что вы будете использовать стек).
  2. Зависит от платформы и ваших планов. Если вы хотите скомпилировать в нативную сборку для Windows, вашей целью должен быть язык ассемблера x86.
person Eli Bendersky    schedule 10.04.2010

Нет, этого нельзя ожидать. Если в вашем языке есть такие вещи, как eval (), это может показаться странным.

Как бэкэнд-ассемблер, nasm кажется наиболее популярным. ГАЗ возможен, но я обнаружил, что это немного неумолимо и неполно.

person Marco van de Voort    schedule 10.04.2010

Если вы абсолютно не настроены «изобретать велосипед», вы можете просто выпустить код C, а затем передать его существующему компилятору C, например gcc. Это будет намного проще, чем писать собственный сервер, и вы получите все оптимизации компилятора C и т. Д. Бесплатно.

person Paul R    schedule 10.04.2010
comment
Почему вы боитесь, что он предоставит достойную систему для Windows? Тогда совет GCC - хороший способ все испортить :-) - person Marco van de Voort; 11.04.2010