Алгоритм преобразования текста с языка EXPRESS-X на язык EXPRESS
В этом приложении представлено преобразование совокупности объявлений образов в совокупность объявлений объектов на языке EXPRESS, обеспечивающую представление результатов выполнения операторов языка EXPRESS-X. Данное преобразование представлено в форме алгоритма, принимающего текст объявления образа в качестве входного параметра и производящего в результате своей работы текст объявления объекта. Данный алгоритм представлен здесь только с целью спецификации языка EXPRESS-X и не предусматривает какой-либо конкретной реализации.
Предполагается, что преобразованные объекты существуют в схеме с уникальными именами, с которой все необходимые внешние объявления связаны с помощью интерфейсов.
Описание алгоритма
a) Если объявление образа представляет зависимый образ (т.е. не определяет никаких атрибутов образа), то пропустить данное объявление.
b) Заменить ключевое слово VIEW на ENTITY.
c) Удалить элементы языка FROM, WHERE, IDENTIFIED_BY и ORDERED_BY. Элементы WHERE удалить только в заголовке, но не удалять в ограничениях.
d) Удалить ключевое слово SELECT.
e) Если объявление образа содержит разделы, то полностью удалить все разделы, кроме объявления первого раздела; удалить ключевое слово PARTITION и идентификатор раздела (если он имеется) из объявления первого раздела.
f) Удалить оператор присваивания и следующее за ним выражение у каждого атрибута образа.
g) Заменить ключевое слово END_VIEW на END_ENTITY.
Примеры |
1 Следующее объявление образа: |
VIEW a ABSTRACT SUPERTYPE; |
PARTITION one; |
FROM b: one; с: two; |
WHERE cond1; |
cond2; |
SELECT |
x : attr1 := expression1; |
у : attr2 := expression2; |
PARTITION two; |
FROM d: two; e: three; |
WHERE cond3; |
cond4; |
SELECT |
x : attr1 := expression3; |
у : attr2 := expression4; |
END_VIEW; |
преобразуется в следующее объявление объекта на языке EXPRESS: |
ENTITY a ABSTRACT SUPERTYPE; |
х : attr1; |
у : attr2; |
END_ENTITY; |
2 Следующее объявление образа: |
VIEW b SUBTYPE OF (a); |
PARTITION one; |
WHERE cond5; |
SELECT |
z : attr3 := expression5; |
PARTITION two; |
WHERE cond6; |
SELECT |
z : attr3 := expression6; |
WHERE |
WR2 : rule_expression2; |
END_VIEW; |
преобразуется в следующее объявление объекта на языке EXPRESS: |
ENTITY b SUBTYPE OF (a); |
z : attr3; |
WHERE |
WR2 : rule_expression2; |
END_ENTITY; |