2010-04-10 2 views
3

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

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

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

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

+0

Что касается вас второй вопрос: какова ваша целевая платформа? – Thomas

+0

Windows сначала – sub

+0

http://stackoverflow.com/questions/1669/learning-to-write-a-compiler – 2010-04-10 10:27:03

ответ

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

Если вы не полностью настроены на «изобретать колесо», вы можете просто испустить код C, а затем передать это в существующий компилятор С, например. НКА. Это будет намного проще, чем писать собственный исходный код, и вы получите бесплатно все оптимизаторы компилятора C и т. Д.

+0

Почему вы боитесь, что он предоставит достойную систему для Windows? Консультирование GCC - это хороший способ погубить это :-) –

0

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

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

Смежные вопросы