====== Описание работы компилятора Блэкбокса ====== Компилятор Блэкбокса реализован на основе переносимого компилятора Оберона, который на английском описан в: * сообщении [[ftp://ftp.ethoberon.ethz.ch/Oberon/OberonV4/Docu/OP2.Paper.ps|Crelier R. OP2 : A portable Oberon-2 compiler. 1991.]] {{ :blackbox:crelier_1991.pdf |PDF }} * диссертации [[http://e-collection.library.ethz.ch/eserv/eth:39386/eth-39386-02.pdf|Crelier R. Separate compilation and module extension, 1994]] * публикации [[http://oberon2005.oberoncore.ru/paper/p_obesys.pdf|Brandis M.M., Crelier R., Franz M., Templ J. The Oberon System Family // SOFTWARE-PRACTICE AND EXPERIENCE. 1995. Vol. 25. P. 1331–1366.]] {{ :blackbox:the_oberon_system_family.pdf |версия 2}} Компилятор выполнен по трехфазной схеме, с возможностью смены кодогенератора под конкретную платформу без смены //парсера// и //AST-дерева//((AST --- abstract syntax tree (абстрактное синтаксическое дерево). Служит хранению текста программы в промежуточном состоянии между исходным текстом и машинным кодом. Это не байт-код. Исполнять нельзя. Но AST-дерево даёт гарантию, что код программы корректный (иначе нельзя получить такое дерево), и позволяет привести к машинному коду на нужной платформе, что сильно облегчает портирование программ)). Предполагается, что смена платформы происходит путем подмены модуля ''DevCompilerXxx'', который после успешного завершения процесса создания //AST-дерева// передает результат сменному бэкенду ''DevCPVxxx''. По модулям это расписано тут: [[blackbox:dev]]