Компилятор: перевод на сборку - PullRequest
4 голосов
/ 10 апреля 2010

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

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

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

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

Ответы [ 3 ]

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

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

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

0 голосов
/ 10 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...