nextupprevious

Next:1.11 Терминология
Up:1 Язык программирования Zonnon
Previous:1.9 Программные единицы


1.10 Отражение

Иногда желательно получить доступ к информации о конструкциях и их атрибутах (например, модификаторах) исходной Zonnon программы. Чтобы сделать это возможным, компилятор может производить XML определение выделенных свойств каждой отдельно транслируемой единицы исходного текста. В дальнейшем к нему может иметь доступ исполняемая программ, используя предопределенную процедуру getAttribute. Параметр construct является именем любой единицы языка Zonnon, включая программные единицы, типы, константы, переменные, объекты, процедуры, параметры, блоки и знаки операций.

К значениям атрибутов можно получать доступ, используя два вида getAttribute:

getAttribute(construct, var string);

или

string := getAttribute (construct);

Информация возвращается в виде отдельной строки, возможно содержащей несколько значений атрибутов.
 

1.10.1. Схема XML


Следующий список определений XML схемы используется для описания информации, полученной из программы:
 

1.10.1.1. Права доступа


<access>public</access>
<access>private</access>
 

1.10.1.2 Объекты


<object>ref</object>
<object>value</object>
 

1.10.1.3. Параметры процедуры (вид подстановки параметра):


<parameter>var</parameter>
<parameter>value</parameter>
 

1.10.1.4. Неизменяемость процедуры и переменной:


<immutable>open</immutable>
<immutable>sealed</immutable>
 

1.10.1.5. Приоритет операции


<priority>3</priority>
 

1.10.1.6. Тела блоков и процедур


<behaviour>passive</behaviour> //neither locked nor concurrent
<behaviour>locked</behaviour>
<behaviour>concurrent</behaviour>
 

1.10.1.7. Ширина типа, переменной и константы


<width>64</width>
 

1.10.1.8. Мощность перечисления


<ordinal>7</ordinal>
 

1.10.2. Пример: программное отражение и информация

 

definition d;

procedure p1 (var x: integer {32});

procedure p2 { sealed };

var v: integer {64};

type T = ( one, two, three );

end d.

 

object o implements d;

procedure p1 (var x: integer {32}) implements d.p1;

var attrs1, attrs2, attrs3, attrs4, attrs5, attrs6: string;

begin { locked }

attrs1 := getAttribute(d);

attrs2 := getAttribute(d.v);

attrs3 := getAttribute(p1.x);

attrs4 := getAttribute(d.T);

attrs5 := getAttribute(p1);

attrs6 := getAttribute(d.p2);

end p1;

begin

end o.


Когда данная программа исполняется, она производит сообщения о своей форме через информацию отражения следующим образом:

attrs1(d) contains:
"<attributes> <access>public</access> </attributes>"

attrs2(d.v) contains:
"<attributes> <access>public</access> <implement>open</implement>
<width>64</width> </attributes>"

attrs3(p1.x) contains:
"<attributes> <parameter>var</parameter> <width>32</width> </attributes>"

attrs4(d.T) contains:
"<attributes> <access>public</access> <width>32</width> <ordinal>3</ordinal>
</attributes>"

attrs5(p1) contains:
"<attributes> <access>public</access> <implement>sealed</implement>
<behaviour>locked</behaviour> </attributes>"
attrs6(d.p2) contains:
"<attributes> <access>public</access> <implement>sealed</implement>
<behaviour>passive</behaviour> </attributes>"
 
 
 

Next:1.11 Терминология
Up:1 Язык программирования Zonnon
Previous:1.9 Программные единицы


© В.Н. Касьянов, Е.В.Касьянова,2004