Здравствуйте, compiler-dev, Вы писали:
AVC>>Взял за основу lcc, но без документации.
CD>На основе открытого кода lcc?
Верно.
Взял отсюда:
http://www.cs.princeton.edu/software/lcc/
Скачал версию lcc (тогда это, помнится, была версия 4.1),
а также описание интерфейса кодогенератора:
http://storage.webhop.net/documents/interface4.pdf
Ознакомился с этим документом, а также с примитивным backend-ом bytecode.c.
Стал мастерить кодогенератор на основе обхода синтаксического дерева.
Но у процессора было довольно много форматов инструкций (только для ALU — восемь).
Я почувствовал легкую тоску.
Затем догадался использовать YACC для автоматизации скучной части работы (lcc не использует YACC для парсинга).
Оказалось, что использование LR-парсеров для кодогенерации не новость.
В конце 70-х и начале 80-х на эту тему был ряд публикаций Грехема и Гленвилла.
(В дебрях "Красного дракона" есть страничка, посвященная этому способу.)
На самом деле, для lcc также лучше использовать md-файл.
Когда у меня появилось больше времени и информации, я так и стал делать.
Достаточно сделать один, остальные можно делать, опираясь на первый, как на шаблон.
CD>md-файл — это кто?
Machine description: описание машины.
Подобные файлы (к сожалению, совершенно разных форматов) создаются для разных переносимых компиляторов.
В частности, для gcc и lcc.
CD>А с помощью чего?
Для каждого компилятора есть свое магическое средство.
Например, для компилятора lcc это программа lburg.
C>"Machine Description" — описание вычислительной модели процессора. Вот,
C>например, для i386:
C>http://gcc.gnu.org/viewcvs/trunk/gcc/config/i386/i386.md?view=markup
Он внутрях Лисп что ли использует?
Здравствуйте, Mamut, Вы писали:
C>>"Machine Description" — описание вычислительной модели процессора. Вот,
C>>например, для i386:
C>>http://gcc.gnu.org/viewcvs/trunk/gcc/config/i386/i386.md?view=markup
M> Он внутрях Лисп что ли использует?
GCC использует RTL, который — действительно вариация на тему Лиспа.
Наверное, здесь есть какая-то связь со Столлманом: emacs ведь тоже на основе Лиспа...
Mamut wrote:
> C>"Machine Description" — описание вычислительной модели процессора. Вот,
> C>например, для i386:
> C>http://gcc.gnu.org/viewcvs/trunk/gcc/config/i386/i386.md?view=markup
> Он внутрях Лисп что ли использует?
Надо учитывать
кто писал gcc
Это не совсем Lisp (точнее совсем не Lisp), просто похож внешне стилем
задания деревьев.
Posted via RSDN NNTP Server 2.0