Upload
lephuc
View
221
Download
0
Embed Size (px)
Citation preview
IX Simpósio Brasileiro de Linguagens de Programação
24
��������� ������� �� �� ����� ���� ���� ��� �������� ����� � ���� �� ��������� ��� � ���� ���
����� ������� ������� ��� ������� ���� �� ��� �� ����������� �������� � ���� �� ������� �����������
� �� �� ���������� ������������ � ���������� ���������� ���� � ������������ ���� �� �
��� ������ ��� � ��������� ���� ���� ��������� ���� ����� �� ���� �����������������
����� ������ ��� ������� ����� ������ ��� ��� ��������� ��� �� ���������
�� ������� ������������ ����� ��� ��������� �� �������� ����� ������� ��� ������
��� �� �������� ��� ���� �� ���� ������� �� ���� ����� ����� � � ��������� ���� ���������
�������� ��� ���������� ����� ���� ����� ������������� ���� ������� ��� ��� ���������
�� �������� ����� �� ��������������� �� �������� ����� ����������� ����� �� ��������� ���� �
����� ����� ����� ��� ����� ������ ��� � ��������� ��� �������������� �� ���� ����� ����� ��
������� ���� ���� ����������� � ����� �������� ����� ������������ �������� ���� �������� ��
���������� ��� �������� �� ������ �� � �������� ����� �� ������������ ��� ���� ��� �����
���� ������ ��� ������� �� ���� ������ ��������������� �� ����� � ��������� ��� ��������
������� �� ��������� ���� � ����� ��������� ������� ���������� �� �������� ��������
� ��������� ��� ������� ������� ��� ���������� �� �������� ������ �� ���� ������� ���
������� �� �������� ������ ���� ��������������� �� ��������� ���� ����������� � ��������� ���
�� ������������ ���� ���� ����������� ��� ��� ��� �������� ������������� �� �������� ��
���������������� ����� ��� ������������ �� ������� �� ������ �� � �������� �� ������� �
��������� ��� �������� ������� ���� ��� �������
� � ��������� ���� ������������ �������� ������ �� �������� ������� �� ���
���������������� ����� �� ��������� ���� � ����� � ����� ������� � �������� ��������� ����
��� ��������� ���� ���������� ��������� �� �������� ������ ��������� ���� ������������ �����
�������� �������� �� ������� ��� ����������� ���� �� ������� ���������� �� ���� ����� �����
����� ��������� ���� ������� ������� ���� ��� ���� ��� ��������� ��� � �������� �� �����
������ ��������� ���� ��� �� ������� ������ ��������� ���� ���� ��������� ��������� ���� ����
��������� ���� ����������� �� ����� �� ������������� �� ��� ����������������
������� ���� ����� �� ��������� ���� ������������� � �������� �� ������� ��������� ���
�� ������� ��� �� ��������� ��� ������ ���� ������� �� ��� ����� ��������������������
���� ��� ����� ��������� �� ��������� ��� �� �� ��������� � ��� ������ ���� ��������� �
���� �� ��������� � ������� ���� �� ��������� ��� ����������� ������� �� ��������� ���� ������
���� � �� ������� �� ��������� ���� �� ��������� ��� �� ��������� ��� ������ ��� ��� ���
��� �� ��� ��������� ����������� ���� ��������� �� ����� �� ������ ����� � ���� ���������
������� �� �� ���� ��������� � ��������� ��� �������� � ���� ����� �� �������� ����
������ ��� � ��������� ������� ����� ������� � ��� ������ �� ����� ��� ��� ������� � ����
�� �������� �� ����� ����� ��� �������� � ����� ������� � �������� ������ �� ���
������� ���� � ����� ��������� �� ��������� ���� � ��������� �� ����
� �������� ����� �� ������������ ��� �� ������ � ���� ��� �������� ������ ���
�������� ������ �� �������� � ��� ������� �� ���� � ������ ������ ��������������� �
�������� ��� ����� ��������������� �� �������� ������ ����������� �� ������ � ������ ����
��������� � �������� ������ ��� ������� �� ����� ������ ���� ��������� ���� ����
������������ � ���� �������� ���� ��� ��� � �������� �� �������� ������������ ��� �� ����
���� �� �������� �� ������������ ���� ���������� �� ������������ ��� ��� �������� � ���������
����� �� ���������
� ������� �� ����� �������� ����� �������� ������ �� ����������� ������������ ��
��������� ����� ���������� ����� ������������� ���� ���� ����� ��������� ���� ������������
�� ������� ��� �� ��������� ���� ���������������������� � ��������� ���� ���������� ���
����� ������������ � ��������� ���� �� ����������� ������������� ��� ������������������
�� �������� �� ��������� ���� �������������� � ������������������� ����������� ��
��������� ����� � ������� ���������������� � ���� ���������� ������ ��� ��������� ��� ��
Technical Session 1 - Program Transformation
25
�������� ������
����� ������ ������� ������������� ������ �����
�
�������� ������
����� �������������� ������ �����
������ ������ ���������������� ����������
��
������ �� � ������� ��� �� ������������ ����
������� �� ����������������� � ��������� ��� ���������� ���� ��� ��� ��������� �����
�� ������������ ���� �� ��� ���� ���� ���������� ��� ����� �� �������������� �������
��� ��� ������ ���� �� ���� ����������� ���� ���� ��� �� ���� �� �� ���� ���������
���� ��� �� �������� � ������ � ����� � ��������� ���� ����������� ����������
������� ��� ���� ������������ ���� ��� ��������� ��� ����� �������� ��������� ��
��������� � ���� ��� ���������� ��������� ���� �������� �� ��������� ���� ���������� ���
�������� ���� ���������� �� ��������� � ���������� �� �������� ���� �� �� ������
������� ��� ������ ����� �������� �� ���� ���� ���� ������ � �������� ����������� �������
��� �������� �� �������� �� �������� ��������� �� ���� ����� ���� ������ ���� ������������
���������������� ��� ������� ��������������
�� � ������������������
��� ����������������������� ���
�������������������� ��� ����������������� � �������������������
���������������� ��� ���� �������������
����������������� ��� ���� ���������� ���������������������
�����������
��������������� ��� ���� ����������
����� ��� �������� �������������
� ������ ����� ��� ������������� �����
���������� ��� ���������� � ������ ����� � ����������
���������� ��� ������������������������ � �����������
�������������� � � ����
������ ����� ��� �����������������������
������ �� ����������� �������� �� ��������� ���� � ������� �����
�� ������������ �� ��������� ����
� �������� �������� ���������� ��� �������� �� ������������ �������� ��� ��������� ���� ��
���������� ����� ���� ��� ����� �� ���� ��� ��������� ���� ������� ���������� ���� �� �������� �
��������� ��� ���������� �� ��� ����� ���� ��� ���� ��� �������� � ������ �� ����� ���� � ���������
�������� ���� ��� ��� ����� ��������� ���� ���� ��� ����� ���� �� ��� ���� ��������
��� � ����� ����� ���� ���������� � ��� �� ����� �� ���������� �� ��� ����������� �
��������������� �� ������ � �� ����������� �������� ����� �������� ���� �� ��������� ����������
�� � ��������� ���� �� �� �� ���� ����������� ���� ���� ��� � ���� �� ��� ������� �� ��
���� ����� ���� ������� ���� ��� � ���� �� �� ��������� ���� ������������ �������� �
��������� ��� �� ��������� ���� ������������ ��� �������� ���� ��������� ����� ���� �� ��������
��� ����� ��� �������� � ������ ���� �������� �� ��� �����
IX Simpósio Brasileiro de Linguagens de Programação
26
�������� �����
����� �� ������� �������������� �� ���
�
�������� �������
����� ����
������ �� � ���� ������� �� ������� ��� �� ���� �� ���� ����� �� � ������������� �������� ��� �� � ������ ��������� ������ � ��� ��������� ��� �� ���� ����� ���
����� �������� ���������� �� ��������� �� ��������� ��� ���������� ���� ��� �����
����������� ��� ���������� ��������������� ����� ��� ���������� ����� �����������
������������ �� �������������� ��������� ��� ����� � ����� ��� ���������� ����� �� ������
����� ����� �� ��������� ���� ���������� ������������� �� ����� ���� ������� ��������
���������� �� ���� ���� ������� ������� �������� ���������� ��� ���� ���� �� �����������
� � ����� ������ ���� ������ ��������� ����� ���� ��������������� �������� ��������� ��
��������� � ����� �� ������������ ���� ���������� ����������� �� �������� ������ ����
���� �������� �� ����� �� ������ ���� ��������� ���� � ����� ������� �� ��������� ��
����� �� ������������� ���� ������ �������� ������� ���� ���� ����� ����� �� ����
����������� ���� ������������������ �������� ����� ������ ��� ������ ��� � ����
������������������ �������� � ��� ���� �� ������� �� ������ ��� � ������� �� ����
�������� �� ���� ������
�� �������� ������� �� ��� ��������������� ����� �� ��������� ��������� ����������
������� ����� ���� � ������� ����� �� ������������ ��� �� ���� ���� ������ �������� �������
���� ��������� ��� �� ����� ���� ������ �� ���������������� �� ��������� �������� ������� ����
��������� �� �������� ������� � ���� ������� ����� ������ ������������ ���� ��������
������ ����������������� �� �������� ����� ���� ���� ������� � ���� �������������� ��
������� ����� ������� � ��������� ��� �� ����� ����� ����� �� ��������� ��� �� ����� ����� ��
�������� ������� �� ������������ ��� ����� ���� ��� �������� � ����� �������� ������� �
������� ����������� �� ������ � ���������� ���� ������� ����
�� ����� ��������� ���� � ������� ����� ��� �������� ��������� � ��������� ��� ��
����� �� ������������ ��� ����� ����� ��� �������� �� �������� ������ �� �������� ������ ��
�������� �� ����� �������� ������������� � ��������� �� ������ ��� �������� �� ��������
����� ���� �������� ����� ����� ������ ����������� ��� ��������� ��� �� ����� �� ����� ��
���������������� �� ����� ������ � ������������ ��� ������� ����� �������� �� �������� ������
��� �������� ���� ��� ���� ���� ������ ������� ���� ��������� ���� � ������� ����������
�� �������� ������� �� ������ �� � ��������� ���� �� ���� ����� ��� �� ���� ����������
�������� �����
����� �������������������� �� ���
�
�������� �������
����� ��������� �� ���
������ ��� ����������������� �����
������� ������ ������������
������ ��
��
������ �� ������������ ��� ��� ���� � ������ ���� ����������
Technical Session 1 - Program Transformation
27
�� �� ������� �� ����� ���� ����
�� ������������ ��� ����� �� ���� � ���� ��� �� ����� ��� ������� ��� ��� ������� �� �������
���������� � ��������� ���� ���� ��� ��������� ��� ����������� ��� ������ �� ������� �� �����
�� ����� � ������������ ��� ����� ����������� ��� ������ � ����������� ��� ����� ���������
�� ���� ��� ��� ��������� �� ����� ��� �������� �� �������� ����� ���� �������� ��������
��� ��������� ������������ ���� ��� ��������� ���� ���� �� ����� ���� �� ������ ��� �����
��� ��������� � �� ������� �������� �� ��������� ������ �� ����������� ��������� � ������ ���
�� ������������ ���� ���������� ��� ������ ��� ��������� � �� ������ ������� �� ���������
������� ����������� ��� �� ������� �� ����� ���� ����� � ������������ ��� ������ ����������
���� �������� � �������� ���� �� ������ ����� ��� ���������� �������� �� ��������
� �������� ���� ��� �������� ������� ��������� ���� ��������� �� ������� �� ����
������ ���� ���� ���������� ��� ��������� �������� ���� ��������� ��� �� ������� �� ������
��� ��������� �� ������������� ������������ ������ �� ����������� ������������ �� ����
������ ���� � ���� ����� �� ���� ��������� ����� � ���� �������� � ���� �������� ������������
���� � ������� ��� ��� ������ ��� ���� ���� ���������� � ��������� ���� ��������� ��� ��
��������������� �� �������� ������������� � ������ ��� �� ������ ���� ������������� � �
������ �� ���� ��������� ������ ���� ������������ �� ����� � � � ����� ������ � � ����� �� �
������ ���� ����������� �� ����� � �� � ����� ������ � �������� �� ����� �� ������ �� �����
� �� ��������� ������ � ������� �� ����� �� �����
���� ������� ���������
� �������� ��������� ��� ��������� �� ������� �� ���� ��������� � �������� �� ���
���������� �������� ��� ��������� ���� �� ����������� � �������� ������ ��� ����� ��� �������
�� ��� ��������� ��� �� ������ �� ���������� ����� �� ������� ���� ������ � ��������� ���
�������������� �� ������ �� �� ���� �������� ���������� ���� ���� ���������� �� ���� ��
�������� ����� � ���� ���� ������ � ��������������� ��������
�������������� ��� � � � ������������������� �����������������
������������������ ��� ������ ������������������� ����
��������������� ��� ��������� ��� �����������������
������ �� ���� ������� �� �� �������� ������
�� ���� ��� �� ��� �������� �� ������ �������� ��� �� ���������� ���� ��� ����� �����
���� � ����������� ���� ���������� � ��������� ��� ������ ����������� ������� �� �����
��������� ��� ����������� �� ���� �� ��� ������� � ����������� ��� ����������� ��
���� �� �� ���� �� ����� �� ���� ����������� ����� ��� �� ������ �� ����� ��������
����� �� ���� ��� ����� ���� ������� ��������� ������� ��� ���������� ������ ����� ������ ����
������ �� ������� �������� � ������ � ��������� ����� ��������� ���� � � ��������� ��� �����
�� �����
���� ��� ������������� � ���������������������
� ���������������������
�������������� ��� ����������
���������� ��� ��������������� ���������������������
������ �� ����� ��������� ���� ���� �� �������������� �� ����������
� ������ � ��������� ��� ������������ ��� ��� ������� � ���� ������� �� ����� �
�������� ����� ���� ����� ��� �� �������� ����� ��� ������� �� ���� � ������ ������ �
IX Simpósio Brasileiro de Linguagens de Programação
28
����� �� ��������� � �������� ������� ������ � ��������� �������� ���� ��� ������� ����� �
�������� �������� �� �������� ����� � ������ �� ������� ����� ���� � ��������� �� ��������
�� ���� ��� ��� ���� ������������ ��� �� ����� ���� ������� ���� � �������� ��� ��� ������ �� ����
����������
�������� �����
����
������������������
���������������������
��
����� �� ��������� �������� � ���� �
�������� �������
����� �������
��� �����
������ ����������������� �������������������������� ���������
��
������ �� ��� ������������ ��� ���� ��� ����� �� ������� ����������
���� ������ �� �������
���� ���������� � �������� �� ��������� ��� �� ���������� ���� ��� ����� ����� ���� �
����������� �������� �� ������ �� �������� ������������ �� ������ �� � ����� ��������
� ���������� � �� ����� �� �������� ����� ������������ ������ ����� ���������� ����� ���
�������� �� ��� ���������� ��� �� �� ��������� ������� ���������������� ����������� ��������
���� � ����� �� ����� ���� ������������� ��� �� ���������������� �� ����� ������ � ������ ��� �����
���� ���� ������ ��������
���������� �� ���� ��� �����
�������������� �� ���������� �� ���� ��������� ���
������ �� ������ �� ��������
� ����� �� ���� ��� ��� � ���� ���������� �� ������� �� ����� �� ����� ���
��������� ���� �� ���� ���������� ���� �������� �� �������� ������� ��� �� ���� ���
��������� �� ���� ���� �� ��������� � ����� �� ������ �� ����� �������� ��� ���
�� ��������� ���� ��������� �� ���� ��� ����� � ���� �� ��� ������ ����� � ����� ��� ���
��������� �� ���� �������������� � � ���� �� ��� ����������� ������������ �� ���
��������� �������� ��� ��� ��������� �� ���� ����������� ����������������� �����
���� � �� ��������������� �� ������ � ��������� ������������ �� ����� �� ��������� ����
��� ���� �� ������ ��� � ����� �������� ��� ���� �� ��������� ������� ��� ��������� ��
���� ���������� �� �� ����� ��� ������ ��� ��������� ���������������
���� �������� �
� � ������ �� ���� ���� ����� ��� ������������ ��� ����� ���������� ����� �������� ����
�������� ��� ���� ����� �������� �� ������� �� ���������� ���������� �� ���������� ��
������� ���������� ���� ���� ������ ���� ������ �� ����� �� ���������� ������ ������� � �������
������� �� ��������� ������ �������� ������� ��� ������� �� ��������� �� �� ���������� ���
����� � ���� �� ��������� ��� �� ������ � � ������ �� ����� ���� ������ ���������� ������� ��
Technical Session 1 - Program Transformation
29
������� �� � � �����
���� �� � � �����
��� �� � � �����
�� �� � � ���������������
��� �� � � �����������������
���� ����� �� ����� �����������
���� ������������������ �� ������������������� �����������
������ ��� ������� ������� �� � �
����������� ��� � �������� ���� ����� � ��������� �� �������� ����� ���������� ��� �����
���� � ������ ��� ������������ � � �� ����� ��������� � �� �������� � ��� ������� ��������� ����
����� �� ���������� ������ �� � � �� � ������ ��� �������� �� ������� �� ����� � � � � � ��������
� ������ ���� � �� �������� � ��
���� � ������� �� ����� �� ��������� ����� ��� ������� �� �������� � �� �����
��������� �� �������� ������ ���� ���� �� ��� ��������������� ��� ��������� ���
�������� ��� �� ��������� �� ������ �� ������ ����������� �� ���������� ���� ������ � ����
����� � ������� ���� ����� �� ������������ �� ������� ���� �������������� ������ ��
����� ����������� ��������� ��������� � ���������� ����� ���� ��� ��� ���� ���� � �� ��� ��
������ � ����������� �� �������������� ���� �� ��� �� ������ ������ ����� ���� �������
������ �� ������� ���� ������ ��� �������� ��� ������������ ���� �� ����������� ����� � ����
�� ���� � ������� � ���� �� ���� �� ���� ������������� ����� ����� ���� �������������
��� ��� ��� ���� � �� � ���� ���� �� ������������ � � �� � ���� ����� � ����� ���������������
���� � ���� �� ��� ������� ���� ������� �� ���� ����� ���� ����� ������ � �������� � � ��
����� �� ����� �� �� ������ � ���� �������� ���� � ������ ��� ����������� ��� ����� � ����� �
� ��� ���
� ���� �� ������� � ��������� ��� �� ����� �� ���������������� �� ����������� ���������
� ������ ������� �� � � ���� ����� ��������� �� � �� �������������� �� ����� �� �����
���������� � �� ���������� �� ��� � � ������ �� �������� ���� ��������� ���� ���������
�� ������� �� ������������ ��� �� ��������� �� ��� � � ��� ���� � �� ��� ����� ����� ��
��������� ��������� � ����� �� ������������ �� ���� ����� ���������� ����� ���� ��������� ��
� ���������� �� ��� � � ������������ ��� � �������� �� ���������� �� ������ �� ������
���� ����� ����� ��� ����������� ����� �� ������� ������������ ���� �� �������� ���������
���������� �� ���� �� ������� �� ������� ���� ���� ��������� �� � � ���� ���� ����� �������
� ����� �� �������� ������������ ������� �� �����
� ����� �������������� �� �������� � ������� �� ������ �� ������ � ���� ������
�������� ��� �� ��� ��� ���� ���� �� �� � ������������ � � � ������ ���� ���� �� ���������
� � ���������� ���� ���������� �� ������� �� ������������ ��� � �� ����� ���������� �������
�������� ������ � ���� ���� ������������� ��� ���� ���� � ������ �� ������ � ������ �������
�� � ���� � ������������ ��� �� ������ ��
���� ������ �� ����
��� ������������ ��� ���� ������� �� �� ����� ��������� ���������� ���� �� ��������� ����
����� ��� �������� �� ����� �� �� �������� ���� ����� ��� ��������� ���� �� ����
���������������� �� ��� ��������� ��� �� �������� ��� ������ �� ������ ��� � ���������
����� ��� ������ �� ����� ���� ������� � ����� �� ������������ ���� ����������� ���� �
��������� ���� �� ��������� ����� ������ ��� �������������������� ���� ���� �������� ��
�������� ���� ��� ���� ��������� ����������������
� ������ ��� �� ����� �� �������������� ���������� �� � � ��������� �� ��� ���� ����
IX Simpósio Brasileiro de Linguagens de Programação
30
���� �� �������� ������� �� �������� ��� ������ ��� ����� �� � �������� �� � � ���� �����
� ���� �� �� ������������ �� �������� � ���������� � � �� ���� � ������������ ������
���� ��� �� ������� � � � � ��� ��� �� � ������������ ������� ������ �� �������� �� ���
������ ��� ���� �� ������ �� �������� �������� � �������� ���� � �� � ���� �� ������ �� ���
����� � ���������� ��� � ������ ��� � �� � � � � �������� � ������ ���� � �� �������� � � ��
����� �� �� ��������� ������ � ��������� ��� ����� ��������� �� ����� �� ������� � � ������
�� � ��� �������� �� �� ������������ �� ������ ���� ��� �� ������ ���� ����� �� ��
�������� ������ � ������ ����� �� �������� �� ��� ������� ���������������� ���� ���� ����
����� ����� �� � ������� �� ����� ��� �� ��� ���
� � � � ��� ��
� � � ��� ������
� � �� � � ��� ��
� � � � ��� �������
���� ������ ���� ����� � ������������� ��� ������ �� ������ ���� ������ ���������
�� ��������������� �� ������ � �� ������ �� ��� ����� ���������� � �������� ��� �� ���
����� ���� �������� �� �������� ��� �� ������� ����� ������ � ��������� ��� �� ����� �� ����
�������� ���� ��� ����� ���� ��� ������� �� ������������� ���� ���� ��� �� ��� �����
�� ���� � ���� ����� ���� �� ������ �� ��� �������� � ��������� �������� ���� �������
���� ������� � ���������������� �������������� �� ��������� � ��������� �� �������� �����
�� ������������ ���� ���������� � ����� ������� ��� ���� � �������� ����� ��� �������� ��
����� ������� � ���� ���� ��������������� ��� ���� ��� �������� �� ���� ��������� �����
������ �� �������� �� ��������� ���� �� ���������� ����� � ��� ��� ��������� ��� �� �������
����� ��������� ����� ������������� ��� ��������������������� ����� ������� �� ����� ����
������������������ � ����������������� ����������������
� � � � � ������������������� � � � �����������������
� � � � � ����������������������� ���
���� �������� � ���� �� ������ ���� ���������� �� ������ ��� ������� � ��� �� ��
������ ��� � ��������� ���� ��� � ��������� ��� ����� ���� �� ���� �������������������
��� ���� ������� ��� � ������������� ����� ������� �� ��� ����������� �� ��������� ����
�� ����� ���� ����� ������������ ��� ��� � � �������� ��� � ������� ����� ��� ����
�������� ����� ����������� ���� ������� � ���� ���� ���������������� ���� ��������� ���
�� ����� ���������� � ����� ��� ��
� � � � � ����������������
� � ���� �� � � � ����������������������� ��������
� � � � � ��
� � � � � �� � �������������������� ��
������ �� ���������� �� ��������� ���� �� ���������� ����� ���������� � ���� �� ��� ���
���������� ��� ��������� ��� �� ������� ���� � ������ �� �������� ����� �� ���������������
��������� ��� ��������� �������� ���������� � ����� ��� ���� ������� ���� �������� �
��������� ����� ��������� ��� �� ������� ������� ����� �������������������� ��� �������� ���
���� ����� ���� ��������� �� ���� ��������� � � � ���� ������� ���� ���� ��������� � ��� ��
������� �������� �� ����� ��� ���� � ���� ��������� � � � ���� ����� ��������� � ������� �����
��������������� ���������� ���� ������� ���� ���� ����������������� � ��������� ����
���� ���������������������
Technical Session 1 - Program Transformation
31
� �� � ������ ��� � � � ���������������������� � � � ���� � � � � � � � ��������� ��������� � � � ������������������
� � ����� � ���������������� ���� � � � ��������������������� ���� ��������
���� � ��������� ������� �� ��������������� �� �������� ��� ��������� ���������
���������� � ����� ������ ���� �������� � ���� �� ���������� �� ������ ��� ���� ���
���� � ���� �� ��� ��������� ��� �������� �� ����� �� ���� �� ��������� ��� ��� ��� ��������
����� ������ � ����� ������ ������ � ����� �� ������� �������� � ���� � ��������� ���
�������� �������� �������� �� ������������ ���� �� ������ ��� � ����� �� ��������
��� ��������� ��� ������ ���� ���� ����������������� �� ������� �� ������� �������
����������� ���� ���������� �� � ���� �� ������������ ���� � ���������� ���������
� � � � ��� ������ ������ ���� �� ��� ��������� ����� ���������� ���� ������� ���� ����
����������� � ��� � �������� ��������������� �� ������ � ���� ��������� ����� �� �����
� � � � � � ��
� � ����� � � � ����������
� � � � ���� � � � � � � � �����������
� � ������� � � � � ��������������������� ��������
� � ����� ������ ��������� ������ ������ � ������� �������� � ���� ��
���������� ���� ���� ������������������� ������� ���� ���� �������������������
��� ���� ��� �������� ������ �� ��������� ���� �� ���� ���������������� ��
������������������
� � � � �� � � � �����������������
� � � � �� � � � �����������������������������
� � � � �� � � � ������������������
� � � � �� � � � �����������������������������
� � � � � � � � � ��������������������� � � � � ���������������������
� � � � � � � � � � ���������������������������
� �������� ����� �� ��������������� ������ ������ ��� ��������� ��� �� �������� ��
����� �� ������ � ���� �� ��� ��������� ����� ����� ������ ���������� � ����� �� ���� ��������
�� � ���� ���� ����� ��������� �� ����������������� � ���� ���� ��������� ���� �� ��������� �
�������� �� �������� ����� � ��������� � �������� �� �������� �������� � ����� ������� ��
��� ��� ���� � �������� ������� �� ��� ��������������� ��� ��� ������ ��� ���� ������ ���
��������� ��� �� ������ �������� � ��������� ��� �� ����� ������ �� ����� ���������� ��� ����
��������� �� ������������ ����
� � �� � � � �����������������
� � �� � � � ���������������������������� ���
� �������� ������� ������ ���� ��������� ���� �� ��������� � �������� �� � ���������
���� ��� ���� �������� ��� �� ����� �������� �� ����� ��� ���� ������� � ������� ��������� ����
���� ������� ������������ � ����� ��������� �� ������ ��� ��������� ���
��������� ��� ������ ���� ���� ���������������� �� ����� ��� � ������� � ��� ���� �� ����
��������� � � � ���� ������� ���� ���� ����� � �� ���� ���������������� ����� �� � � ����
���� ���� ���� ����������� ����� ������ � ������� ��������� ��� �� �������� �� ��������
������� �� ��������
IX Simpósio Brasileiro de Linguagens de Programação
32
� � � � � � ���� � � � � � � ������ � � � �����������
� � � � � �� � ���������������������������
���� � ��������� ��� �� ������� �� �������� ������� ���� ������ ����������� ����
����� ���������� ��� ����� ��������� ���� ����������� � ��������� ��� ���� ����� ��� �
������� ���� �������������� ����� ���� �� ��������� � � � ���� ������� ���� ���� ����� ���
���� ��������� � � � ������� ���� ���� ���������� � ������ �� ����� ����� ��� ����
���� ���� ������� ������� ���� �������������� ����� ������ � �������� ����� �� � ����
����� ���� � ���� �� ������������������� ����� �� �������� ���� ������� � ����� �� ��
������� �� ����������� ��������� �� �������� ������� � ������������ ���� �������� �� ���
������������ ���� ����� ��� �� �������� ���� �������� � � �� � ������� ������������� ���
�������� �� ��������� ��� �� ����� ���� �� �������� �� ����� � ���� ���� �� ����� ���� ���
����� �� ����� �� ����
� � � � ����� �� ��� ������������ � � � � ������� � � � � � ���� � � � � � � ������ � � � �����������
� � � � ��� � � � � �����������������������������
� ����� �� ������� �������� �� �������� ������� ������ ������ � ����������
������� ���������� ����� ������ ���� ������� ������ ���������� � ����� ���������
���� ����� ���� ������� ��� ���� ������� � ���� �� ������������������� ���� ��� ����������
� ���������� �� ��������� ������� �� ������ ��� ��� ��� ���������� ������ ���� ����
���������� ������ �� ��� ��������� ��� �� �������� �������� �� �� ������������� � ����
���� ����� ���������� ����� ����� �� ���� ���� �� ��������� ����
� � � � � ��� �����������
� � � � ������ � ���� ����������������
� � � � � ��� ����������� � � ��� ������������ � � ��� �����������
� � � � � ��� ����������������
� ���������� �� ��������� ������ �� ������������ ��� ���� ��� � ������� ����� �������
� ����� �� ����� �� ��������� ���� ����������� �� ������ ��� �� ������ ��� ��������� ���
������ ���� ���� ������ ����� �� �� �������������������� � � �� ���������� ���� ����
����������� � ���� ���� �� ��������� ��� ����� ����� �� ���� ���� �� ��� �� ���� ��
��������������� �� ������ �� � ����� �� �� �� � ��������� ���� ��� ���� �� ������ ��� �
����� ��� ������ ���� ���� ����������������� ����� ����� � ����� �� ����� ���� ���������
� ������������ ���� ���� �������� � ��������������� �� ������ �� ������� ������� �� ����� ��
��� � ��������� ��� ����������� �������������������� ����� ����� � ���������� �� ���������
������ �� ��� ��������� ��� ����������� ���� ������ �� � ��������� ���� ���� � ���� ���� ��
���������� ����� ������� ��� �������������������� ����� ����� �� ����� �� ����������
��������� ���� ���� ��������� ��� �������� ������� � ������������ ���� ����� ��� � ���� ����
���� ���� ���������� ���������� ��� ���� �������� �������� ����� ���� ���� ������� �
����� �� ��� � � ���� ���� �� ����� ������ �������
� � � � � ����������� � ��� �����������
� � � � ��� ��������������� ������
� ���� �� ����������� ��� ����� ������� �� ������ � ������������ ��� �� ������ � �����
������� � ������� ������� ���������� � �������� ����������� �� ������ ���������� �������
���������� � ���� �� ��������������� � ������������� �� ����� ������ �� �����������
���� ���� �������� �� ������ ���� �������� �������� ������������ ��� ����� �� ���������� � ��
�������� ������ �������� ���� ������������� ��� ����� � �������� ��� �� ����� ��������� ��
���� ��� �� ���� ����� ��������
Technical Session 1 - Program Transformation
33
����� ����������� �� �������� ������ ���� �������� ������ �� ����� ���� ����
��� ����������� �� ����� ������ ��� ��������� ��� ���� �� ��������� �� �������� ����
����� �� �� ����� ����������� ��� �������� ������ ��� ��������� ���� ��������� ����
���������������� �� �������� �� ���� �������� �� ��� ��������� ���� �� ������ ��� ���
�������� ����������� ��� ������ ��� ��������� ��� �� ���� ���� ����� � ����� �� ���� ��
������� � ������� �� ����� �������� ������� �� ���� ��������� ����� ���� ��������� �� ������ ����
��� ���� ���� ���� ���� ������� ����� ������ � �������� ������ ������� ������� ����� ��
����� �� ��������
���� ��� ��������� ������� ����� �� ����� ������������ ��� �������� � ��������
������� ���� ������ ��� ������� �� �������� ����� ����������� ������ ���������� � ����
������� ������� �������� �� �������� ������� ������� ��� ���������� �� ������ � ������
������ � ���� �� �������� � ����� ��������� ������� � ����������������� ����� � ����
�� ������� �� ����� �� ������� � � ���� �� ������� ��������� �� ����������� ���� ������
������ ����� ����������� ����� �������� �� ����� �� ������ ���������� � ���� ���� ���
��������� �����
�� ��������� ������������
������� ������� ���������� � ����������� ���� ���������� ������������ ���� �� ����������
����� ���� ���� ���� ��������� � ������� � � ����� ��������� ���������� ����� �� �����
������� � ������� �� ��������� � � ������������ ���� ���� ��������� �������� �� ��������� ��
�������� � ����������� ���� � �������� ����� ������ ���������� ���� ����� ������� �� �����
���� ��������� ����������� ���� ��� � ��������� ���� ������� ��� ������������ ���
���������� �� ��������� ������� ���� ��� ������� ���������� �� ������� �� ������ ��� ����
������� ���� �� ��������� �������� ��� ������������ ���� �������� ������ ���������� ����� ��
�������� �������� ���������� � ���������������
� �������� �������� ��� ���� � �� ����� ��� ��� ������ ��������� ��� �����
����� ���� ����������� ������������ ���� �� ��������� ������� �� ����������� � ����������
�� ��������� ������� ���� �������� ���� �� ����� �� �������������� ��� ���
������������ ��� ���������� ���� � ��������� ������ ������������ �� ������ �� ������ ������
��� � ��������� �� �������� ������ ���� ������������ ���� ������ � ���� ���� ���������
�� ��������������� ������� �� ����������� � ���������� �� ����� �������� �� ���������� ��
����� ������ ���� ������ �� ������� �� ����� ����������� � ������������� � ��� � �����
����������� � ��������� ����������� ��� ��������� �� ���� ��� ���
�� ����������� � ��������� �������
� ��������� ���� �������� ������ ��� ���� ��� �� ����� ������� �� ������� ����������
� ��������� ��� ���� ������� ����������� �������� ������������� ����� ����� � ����������
���� �� ����������� � ������� ������������ ���� ��� ������� ������� ���� ���������� �
������� ��� ������ �� �� ������� �� ����� ���� �� ����������� ������������ �� ���� �
��� ������������ ��� ���� ������� �� �������� � ��������� ���������� � ����� �� ���������
���������� �� �������� ������ ��� ��� ������������ ���� � ������� �� ����� �������� �����
�������� ��� ��� ������������ � ������� ����������� �� ��������� �� ����� ���� ������ ��
������� ����� �� ����� ������������ �� �������� � ������� �� �������� ����� ���� �������� �
��������� ���������� ��� ��������� ��������
� ��������� ��� �� ���������� ���� ��� ����� ����� ���� � ����������� ���� �����
�� ���� ��� �� �� �������� ����� ��� ������������ ����� � ��� ������� � ����������� �� �����
�� �������� ������� ���� ����� ���� ����������� �� ����� ������������ �� ����� ���� ���
��������� ����� ��� ������� ��������� ���� ���� ����������������������� � ������ ����
IX Simpósio Brasileiro de Linguagens de Programação
34
��� �� ��� ��������� ��� �� �������� � ��� �� ��� ��������� �� ���� ��� �������� ���������
���� ����� �� ����������� ��� �� ������� �� ������ ���������� �� �������� ����� ����
���� �������� ���� ��������� ��� ������� ����� ������� ���� ���������� ��� �������� ���� �
��������� ��� ����� ������ ��� ��� ��������� ��� �� �������� �� ���� ������� � ������� ��
����� ����� ������ ����� ��� ������������ ���� ���������� �� ����� ������������� �� ����
� ��������� ���� �������� ������ ������� ��� ���� �������� ������� ���� ���������� �����
������������� �� �������� ������
�� �������� ������� ������������ ���� ��� �������� �� �������� ����� ���� ����
����� ����������� ������ ��� �� ������� �� ������ ���� �������� �� ����������� �� ����������
�� ����� �� ��� ��������� ����� ������ ������ � ���� �� ��������� ��� ������� ��� � ���������
���� ���� �� ���������� ��� ���� ������� ����� ����� ��������� � ������������� ��� �� ������
�� ��������� �� ������������ ���� ���� ��� �������� �� �������� ������ ����� �� �������
��������� � ���� �� ����������
����� ����� �������� ��� ����� �� ����������� � ������ ��� �� �������� �� ���� ����
���������� �� ������������ ���� � ���������� ��� ��������� ���� ����� ������������ ��� �
�������� �������� � ��� ����� �������� �� ����� ����� ��� ������ � ������ ��� �� ��������
�� ��������������� �� ��������� ������ ��� ������ ������
�� � �������������
������������ �� ��������� � �������� ������ ����� ���� ���������� � ���������� �������
������� ������ ��� ����������� ��������� ��� �������� � �������� ���� �������
������������
�������� ��� ������ � �� ��� ������ �� ������� ��������������� �� �������� ����������
� ������� ���������� � ������� ���������������� ���������� �� � ����� �� � ���������
���������� �� ���������� �� ��������� ����� �������� ���� �������
������ �� ��� �������� � � ������� ����� ���� �� ����� �� ��������������� ��������� ��
� ���� �� ��� �������� �� �������� �������� ����� ������ ����� ������ � ��� �������
��������� �� ������� ���� �������� �� ������� � � ��� ������� ��� �������� ������� ���
����������� ��������� ������� ��� ��� ������ ���� ������ ��� ��� ��������
��������� �� ��� ������� �� ������� �� ������������� ������ ���� ������������ ��� �����
��������� ��������� ������� ��������������
������� �� ��� ������ �� ������� � �������� ��� ���������� ���� ���������������� �� � ����
�� � ��������� ���������� �� ���������� �� ���������� ���� ����� �������� �������� �
��� �������
������� ��� ��������� ��� ������ � �� ������� ��� ��� ������ �� ������� ����� � ���� ���������
������ ������� �� � ���� �� �� ��������� ���������� �� ���������� �� ��������� �����
�������� ��� �� ������� � ��� �������
����� �� ��� ��� �� �������� ������������ ������� ������� ���������������� �� ��������
���� �� ��� � �� ������ � ���� �������� �� ������� ���������� ��� ���������������
������� ������������� ����� ������ ��� ����� � ����������� ��� �
����� �� ��� ��� �� �������� ���������������� ������� ������� ���� ���������������
�� ����������� �� ��� ������ � �� ������ � ������������� ���������� �� ����������
������������ ����� �������� �������� ��������
Technical Session 1 - Program Transformation
35
������ �� ��� ����������� �� ������� ��� ��� ����������� �������� ������ ��� ��������
���������� ��������� ������� ������� ���������� �� ��������� ���������� �� �������
��� ��� ����������� ��������
������ �� ��� �������� �� ������� ���� ��� ��������� ���� ���������� ������������ �����
�� � ���� �� ��� ��������� ���������� �� ���������� �� ���������� ���� ����� ��������
����� � ����� � ��� �������
������� �� ������� ������������ ��������� ��� ������ �� �������� ����� ������ �����
������ ������� � ������ �������
�������� ��� ���� ��� ��� ������� �� ������� ��� ���� �������� ������������� � �������
�������
��������� � �� ������� ��� ��� ������� �� ������� ������������� ����� � ������� ����
�������� ��� ���� ��� ��� �� ����������� �� ��� � �� ���� ��������� �� �������
�������� ������������ �������� ��������� ��� � ������������ ����� �������� ������
� ��������� ��� �
����� �� ��� ��������� � � ������� ������� ��� ��������� ���� �������� ��� ��
������������� ���� �� ��������� ����� �� � ����� �� �� ��������� ���������� �� �������
���� �� ���������� ���� ����� �������� ��� �� ��������
������� �� ������� ����������� ���� �������������� ������������� ������ �� ��������
�������� ������������� ��������������
������� �� ������� ����������� ��������������� ����������� ��� ������� ���������� ��
�������� �� ����������������� ����� �� �������� ��������
������ � � ��� ������ �� ������� ������ ��� �� �������� �� ������������ ���� �� � ���� �� ��
��������� ���������� �� ���������� �� ���������� ���� ������ � ��� �������
IX Simpósio Brasileiro de Linguagens de Programação
36
Geracao Automatica de Montadores para Modelos deArquiteturas Escritos em ArchC
Alexandro Baldassin� , Paulo C. Centoducatte�
�Instituto de Computacao – Universidade Estadual de CampinasAv. Albert Einstein, 1251 – 13084-971 Campinas, SP
���������������������������������� ���������������������
Abstract. We present in this paper an automatic assembler generator tool forarchitecture models written using the ArchC language. We have introduced toArchC constructions to describe the assembly language, such as symbol deni-tion, instruction syntax and encoding, and synthetic instructions. Our generatortool creates the target dependent les needed to retarget the GNU assembler.We’ve generated assemblers for the MIPS-I and SPARC-V8 architectures usingour tool, and the results obtained are equivalent to those obtained from the na-tive gas assemblers for both architectures.
Resumo. Apresentamos neste artigo uma ferramenta para geracao automaticade montadores para arquiteturas modeladas usando a linguagem ArchC. Adi-cionamos a ArchC construcoes para a descricao da linguagem de montagem,como a denicao de sımbolos, sintaxe e codicacao de instrucoes, e a denicaode instrucoes sinteticas. Nossa ferramenta geradora cria os arquivos dependen-tes de arquitetura necessarios para redirecionar o montador GNU as. Geramosmontadores para as arquiteturas MIPS-I e SPARC-V8 usando nossa ferramenta,e obtivemos resultados equivalentes aos montadores nativos gas para ambas ar-quiteturas.
1. Introducao
Com o avanco da tecnologia, o uso mais difundido de SoC’s (System on a Chip) e oaumento da complexidade, projetistas de sistemas dedicados enfrentam cada vez maisdiculdades para a nalizacao de projetos em tempo habil. A alta complexidade de taissistemas e a grande variedade de conguracoes possıveis podem tornar a escolha do sis-tema ideal demorada, prolongando o tempo de projeto e consequentemente seu ingressono mercado. Em especial, no processo de escolha de um certo processador, o projetistanecessita de um conjunto basico de ferramentas que lhe permita analisar questoes comodesempenho, potencia dissipada, ou ainda area de silıcio ocupada. Exemplos de ferra-mentas importantes nessa fase de avaliacao do projeto incluem compiladores, montadorese simuladores de instrucoes.
Nesse contexto, uma linguagem de descricao de arquitetura (ADL - Architec-ture Description Language) permite que processadores sejam modelados em nıveis altosde abstracao, e que um conjunto de ferramentas especıcas para o modelo descrito seja
Technical Session 1 - Program Transformation
37
gerado automaticamente. Dessa forma o projetista pode utilizar, por exemplo, o mon-tador gerado para escrever trechos de codigo que queira testar, e analisar rapidamente aeciencia de sua execucao atraves do simulador, tambem gerado automaticamente. Casonecessite que algumas instrucoes sejam alteradas, o trabalho se resume a alterar o modelopara o processador, e todo o conjunto de ferramentas pode novamente ser gerado de formaautomatica.
Este artigo apresenta uma abordagem para geracao automatica de montado-res a partir de modelos de arquiteturas escritos na ADL ArchC 1 [Rigo, 2004], tendocomo alvo arquiteturas RISC 32-bit. Mostramos como os aspectos importantes para ageracao automatica de um montador sao descritos em ArchC, o processo de geracaoautomatica de montadores baseado no redirecionamento do montador GNU Assembler(���) [Elsner et al., 1993], e alguns experimentos que efetuamos com modelos para asarquiteturas MIPS-I e SPARC-V8. Os resultados mostram que os montadores geradospossuem a mesma expressividade dos montadores nativos ��� para ambas arquiteturas,gerando codigos objeto identicos.
A secao 2 deste artigo apresenta trabalhos relacionados que envolvem a geracao demontadores a partir de modelos de arquiteturas. A secao 3 apresenta as construcoes for-necidas por ArchC para a modelagem do conjunto de instrucoes, enquanto que a secao 4descreve nossa abordagem para a geracao automatica de montadores. Finalmente apre-sentamos alguns resultados que obtivemos experimentalmente com modelos para as ar-quiteturas MIPS-I e SPARC-V8 na secao 5.
2. Trabalhos relacionados
A grande maioria dos trabalhos publicados relativos ao redirecionamento automatico deferramentas se referem a backends de compiladores e simuladores de instrucoes. Noentanto, os ultimos anos tem mostrado um aumento no numero de trabalhos relativos aoredirecionamento de outras ferramentas, como montadores, depuradores e linkeditores.Apresentamos nessa secao as principais contribuicoes envolvendo a geracao automaticade montadores baseados em modelos de arquiteturas.
Uma das primeiras ferramentas a gerar montadores a partir de modelos escritosem uma ADL se deve a um grupo da Cadence Design Systems [Hartoog et al., 1997]. Omontador gerado nao contava com muitas sosticacoes, sendo executado de forma in-terpretada, sem suporte a diretivas de montagem e ao uso de rotulos para enderecos. Aferramenta desenvolvida pela Cadence gerava montadores a partir de modelos de arqui-teturas escritos em nML [Freericks, 1993] [Fauth et al., 1995], que e uma ADL voltada adescricao do ISA (Instruction Set Architecture). Os recursos da linguagem importantespara a geracao de montadores se resumem aos comandos ������, para denicao da sin-taxe de operandos ou instrucoes, e �����, para denicao do codigo binario equivalente.Nao ha nenhuma construcao na linguagem que permita a descricao direta de sımbolospara a linguagem de montagem e nem para a denicao de pseudo instrucoes.
O pacote de ferramentas conhecido como New Jersey Machine-Code Toolkit(NJMCT) [Ramsey and Fernandez, 1994] [Ramsey and Fernandez, 1995] consegue ge-rar rotinas para a codicacao e decodicacao de instrucoes. NJMCT deu origem a
1O endereco na WWW do projeto ArchC e www.archc.org