logo
Bolshakov_Poyasnitelnaya_zapiska

2.2.2.1.7 Генерация кода на целевом языке

При генерации кода разработчику доступно дерево разбора (абстрактное синтаксическое дерево), поэтому используемый алгоритм генерации кода на языке С основывается на обходе дерева в глубину и генерации кода для каждого узла дерева. Стоит отметить, что для разработки собственного генератора в Eclipse возможно использовать не только императивный язык (Java), но также язык-надстройку Xtend [45]. Данный язык обладает большой библиотекой расширений Java, специализированной для генерации кода.

Таблица 2.3 – API компонента TypeSystem

Метод компонента TypeSystem

Назначение метода

useCloneAsType(TypeInstance)

создание типа и установление выбранного объекта как представителя типа во внутренних ресурсах файловой системы

declareSubtype(Type1,Type2)

установить Type1 как подтип типа Type2

useFixedType(Class1, Type1)

становить для объектов типа Class1 внутреннее представление типа Type1

useTypeOfFeature(Class1, Class1_feature1)

установить правила для вывода типа экземпляров класса Class1 как типа его свойства Class1_feature1

ensureOrderedCompatibility(Class1, Class1_feature1, Class1_feature2)

установить правило, ограничивающее свойства Class1_feature2 быть типов равным или ниже по иерархии чем Class1_feature1

ensureUnorderedCompatibility(Class1, Class1_feature1, Class1_feature2)

установить правило, ограничивающее Class1_feature2 быть типом, равным или ниже по иерархии чем Class1_feature1 или наоборот (чтобы была возможность вывести общий тип двух свойств, это например нельзя сделать для типов String и Integer, но возможно для Integer и Double).

computeCommonType(Class1, Class1_feature1, Class1_feature2)

собственно вычислить тип экземпляра объекта класса Class1 как супер-тип объектов классов его свойств Class1_feature1 и Class1_feature2