Сообщения о трансляторе переехали в отдельный блог.
Две недели назад добавил в транслятор Оберона возможность генерации Java кода, что является очередным шагом на пути по созданию многоцелевого транслятора. Работа далека от завершения - сейчас проходят лишь простые тесты. Еще предстоит доработать генерацию для возможности полной самотрансляции.
Модуль генерации Java был переделан из генератора C кода. Это позволило провести работу в полуавтоматическом режиме во время почти отдыха, но привело к наличию артефактов, специфичных для Си и не характерных для Java. Для упрощения генерации был создан модуль AstTransform, преобразовывающий переменные параметры, безымянные и локальные записи, и локальные подпрограммы в более близкий к Java Оберон-код.
Модуль Оберона отображается на класс в Java. Процедуры - статические методы. Процедурные переменные - это экземпляры - воплощения абстрактного класса с единственным виртуальным методом. Переменные примитивных типов, участвующих как фактические параметры-переменные преобразовываются в одноэлементные массивы. Локальные и безымянные записи становятся именованными статическими внутренними классами. Для присваивания значения записей генерируются соответствующие методы. CHAR и BYTE превращаются в byte, при вычислениях с которыми производятся преобразования, нацеленные на преодоления наличия знака у Java-byte.
Ништяк! Так держать))
ОтветитьУдалить