IX Simpósio Brasileiro de Linguagens de Programação · IX Simpósio Brasileiro de Linguagens de...

14
IX Simpósio Brasileiro de Linguagens de Programação 24 �������� �������� ���������������������������� �������������������������� ���� ���������� ���� ������������ ��������

Transcript of IX Simpósio Brasileiro de Linguagens de Programação · IX Simpósio Brasileiro de Linguagens de...

Page 1: IX Simpósio Brasileiro de Linguagens de Programação · IX Simpósio Brasileiro de Linguagens de Programação 24

IX Simpósio Brasileiro de Linguagens de Programação

24

��������� ������� �� �� ����� ���� ���� ��� �������� ����� � ���� �� ��������� ��� � ���� ���

����� ������� ������� ��� ������� ���� �� ��� �� ����������� �������� � ���� �� ������� �����������

� �� �� ���������� ������������ � ���������� ���������� ���� � ������������ ���� �� �

��� ������ ��� � ��������� ���� ���� ��������� ���� ����� �� ���� �����������������

����� ������ ��� ������� ����� ������ ��� ��� ��������� ��� �� ���������

�� ������� ������������ ����� ��� ��������� �� �������� ����� ������� ��� ������

��� �� �������� ��� ���� �� ���� ������� �� ���� ����� ����� � � ��������� ���� ���������

�������� ��� ���������� ����� ���� ����� ������������� ���� ������� ��� ��� ���������

�� �������� ����� �� ��������������� �� �������� ����� ����������� ����� �� ��������� ���� �

����� ����� ����� ��� ����� ������ ��� � ��������� ��� �������������� �� ���� ����� ����� ��

������� ���� ���� ����������� � ����� �������� ����� ������������ �������� ���� �������� ��

���������� ��� �������� �� ������ �� � �������� ����� �� ������������ ��� ���� ��� �����

���� ������ ��� ������� �� ���� ������ ��������������� �� ����� � ��������� ��� ��������

������� �� ��������� ���� � ����� ��������� ������� ���������� �� �������� ��������

� ��������� ��� ������� ������� ��� ���������� �� �������� ������ �� ���� ������� ���

������� �� �������� ������ ���� ��������������� �� ��������� ���� ����������� � ��������� ���

�� ������������ ���� ���� ����������� ��� ��� ��� �������� ������������� �� �������� ��

���������������� ����� ��� ������������ �� ������� �� ������ �� � �������� �� ������� �

��������� ��� �������� ������� ���� ��� �������

� � ��������� ���� ������������ �������� ������ �� �������� ������� �� ���

���������������� ����� �� ��������� ���� � ����� � ����� ������� � �������� ��������� ����

��� ��������� ���� ���������� ��������� �� �������� ������ ��������� ���� ������������ �����

�������� �������� �� ������� ��� ����������� ���� �� ������� ���������� �� ���� ����� �����

����� ��������� ���� ������� ������� ���� ��� ���� ��� ��������� ��� � �������� �� �����

������ ��������� ���� ��� �� ������� ������ ��������� ���� ���� ��������� ��������� ���� ����

��������� ���� ����������� �� ����� �� ������������� �� ��� ����������������

������� ���� ����� �� ��������� ���� ������������� � �������� �� ������� ��������� ���

�� ������� ��� �� ��������� ��� ������ ���� ������� �� ��� ����� ��������������������

���� ��� ����� ��������� �� ��������� ��� �� �� ��������� � ��� ������ ���� ��������� �

���� �� ��������� � ������� ���� �� ��������� ��� ����������� ������� �� ��������� ���� ������

���� � �� ������� �� ��������� ���� �� ��������� ��� �� ��������� ��� ������ ��� ��� ���

��� �� ��� ��������� ����������� ���� ��������� �� ����� �� ������ ����� � ���� ���������

������� �� �� ���� ��������� � ��������� ��� �������� � ���� ����� �� �������� ����

������ ��� � ��������� ������� ����� ������� � ��� ������ �� ����� ��� ��� ������� � ����

�� �������� �� ����� ����� ��� �������� � ����� ������� � �������� ������ �� ���

������� ���� � ����� ��������� �� ��������� ���� � ��������� �� ����

� �������� ����� �� ������������ ��� �� ������ � ���� ��� �������� ������ ���

�������� ������ �� �������� � ��� ������� �� ���� � ������ ������ ��������������� �

�������� ��� ����� ��������������� �� �������� ������ ����������� �� ������ � ������ ����

��������� � �������� ������ ��� ������� �� ����� ������ ���� ��������� ���� ����

������������ � ���� �������� ���� ��� ��� � �������� �� �������� ������������ ��� �� ����

���� �� �������� �� ������������ ���� ���������� �� ������������ ��� ��� �������� � ���������

����� �� ���������

� ������� �� ����� �������� ����� �������� ������ �� ����������� ������������ ��

��������� ����� ���������� ����� ������������� ���� ���� ����� ��������� ���� ������������

�� ������� ��� �� ��������� ���� ���������������������� � ��������� ���� ���������� ���

����� ������������ � ��������� ���� �� ����������� ������������� ��� ������������������

�� �������� �� ��������� ���� �������������� � ������������������� ����������� ��

��������� ����� � ������� ���������������� � ���� ���������� ������ ��� ��������� ��� ��

Page 2: IX Simpósio Brasileiro de Linguagens de Programação · IX Simpósio Brasileiro de Linguagens de Programação 24

Technical Session 1 - Program Transformation

25

�������� ������

����� ������ ������� ������������� ������ �����

�������� ������

����� �������������� ������ �����

������ ������ ���������������� ����������

��

������ �� � ������� ��� �� ������������ ����

������� �� ����������������� � ��������� ��� ���������� ���� ��� ��� ��������� �����

�� ������������ ���� �� ��� ���� ���� ���������� ��� ����� �� �������������� �������

��� ��� ������ ���� �� ���� ����������� ���� ���� ��� �� ���� �� �� ���� ���������

���� ��� �� �������� � ������ � ����� � ��������� ���� ����������� ����������

������� ��� ���� ������������ ���� ��� ��������� ��� ����� �������� ��������� ��

��������� � ���� ��� ���������� ��������� ���� �������� �� ��������� ���� ���������� ���

�������� ���� ���������� �� ��������� � ���������� �� �������� ���� �� �� ������

������� ��� ������ ����� �������� �� ���� ���� ���� ������ � �������� ����������� �������

��� �������� �� �������� �� �������� ��������� �� ���� ����� ���� ������ ���� ������������

���������������� ��� ������� ��������������

�� � ������������������

��� ����������������������� ���

�������������������� ��� ����������������� � �������������������

���������������� ��� ���� �������������

����������������� ��� ���� ���������� ���������������������

�����������

��������������� ��� ���� ����������

����� ��� �������� �������������

� ������ ����� ��� ������������� �����

���������� ��� ���������� � ������ ����� � ����������

���������� ��� ������������������������ � �����������

�������������� � � ����

������ ����� ��� �����������������������

������ �� ����������� �������� �� ��������� ���� � ������� �����

�� ������������ �� ��������� ����

� �������� �������� ���������� ��� �������� �� ������������ �������� ��� ��������� ���� ��

���������� ����� ���� ��� ����� �� ���� ��� ��������� ���� ������� ���������� ���� �� �������� �

��������� ��� ���������� �� ��� ����� ���� ��� ���� ��� �������� � ������ �� ����� ���� � ���������

�������� ���� ��� ��� ����� ��������� ���� ���� ��� ����� ���� �� ��� ���� ��������

��� � ����� ����� ���� ���������� � ��� �� ����� �� ���������� �� ��� ����������� �

��������������� �� ������ � �� ����������� �������� ����� �������� ���� �� ��������� ����������

�� � ��������� ���� �� �� �� ���� ����������� ���� ���� ��� � ���� �� ��� ������� �� ��

���� ����� ���� ������� ���� ��� � ���� �� �� ��������� ���� ������������ �������� �

��������� ��� �� ��������� ���� ������������ ��� �������� ���� ��������� ����� ���� �� ��������

��� ����� ��� �������� � ������ ���� �������� �� ��� �����

Page 3: IX Simpósio Brasileiro de Linguagens de Programação · IX Simpósio Brasileiro de Linguagens de Programação 24

IX Simpósio Brasileiro de Linguagens de Programação

26

�������� �����

����� �� ������� �������������� �� ���

�������� �������

����� ����

������ �� � ���� ������� �� ������� ��� �� ���� �� ���� ����� �� � ������������� �������� ��� �� � ������ ��������� ������ � ��� ��������� ��� �� ���� ����� ���

����� �������� ���������� �� ��������� �� ��������� ��� ���������� ���� ��� �����

����������� ��� ���������� ��������������� ����� ��� ���������� ����� �����������

������������ �� �������������� ��������� ��� ����� � ����� ��� ���������� ����� �� ������

����� ����� �� ��������� ���� ���������� ������������� �� ����� ���� ������� ��������

���������� �� ���� ���� ������� ������� �������� ���������� ��� ���� ���� �� �����������

� � ����� ������ ���� ������ ��������� ����� ���� ��������������� �������� ��������� ��

��������� � ����� �� ������������ ���� ���������� ����������� �� �������� ������ ����

���� �������� �� ����� �� ������ ���� ��������� ���� � ����� ������� �� ��������� ��

����� �� ������������� ���� ������ �������� ������� ���� ���� ����� ����� �� ����

����������� ���� ������������������ �������� ����� ������ ��� ������ ��� � ����

������������������ �������� � ��� ���� �� ������� �� ������ ��� � ������� �� ����

�������� �� ���� ������

�� �������� ������� �� ��� ��������������� ����� �� ��������� ��������� ����������

������� ����� ���� � ������� ����� �� ������������ ��� �� ���� ���� ������ �������� �������

���� ��������� ��� �� ����� ���� ������ �� ���������������� �� ��������� �������� ������� ����

��������� �� �������� ������� � ���� ������� ����� ������ ������������ ���� ��������

������ ����������������� �� �������� ����� ���� ���� ������� � ���� �������������� ��

������� ����� ������� � ��������� ��� �� ����� ����� ����� �� ��������� ��� �� ����� ����� ��

�������� ������� �� ������������ ��� ����� ���� ��� �������� � ����� �������� ������� �

������� ����������� �� ������ � ���������� ���� ������� ����

�� ����� ��������� ���� � ������� ����� ��� �������� ��������� � ��������� ��� ��

����� �� ������������ ��� ����� ����� ��� �������� �� �������� ������ �� �������� ������ ��

�������� �� ����� �������� ������������� � ��������� �� ������ ��� �������� �� ��������

����� ���� �������� ����� ����� ������ ����������� ��� ��������� ��� �� ����� �� ����� ��

���������������� �� ����� ������ � ������������ ��� ������� ����� �������� �� �������� ������

��� �������� ���� ��� ���� ���� ������ ������� ���� ��������� ���� � ������� ����������

�� �������� ������� �� ������ �� � ��������� ���� �� ���� ����� ��� �� ���� ����������

�������� �����

����� �������������������� �� ���

�������� �������

����� ��������� �� ���

������ ��� ����������������� �����

������� ������ ������������

������ ��

��

������ �� ������������ ��� ��� ���� � ������ ���� ����������

Page 4: IX Simpósio Brasileiro de Linguagens de Programação · IX Simpósio Brasileiro de Linguagens de Programação 24

Technical Session 1 - Program Transformation

27

�� �� ������� �� ����� ���� ����

�� ������������ ��� ����� �� ���� � ���� ��� �� ����� ��� ������� ��� ��� ������� �� �������

���������� � ��������� ���� ���� ��� ��������� ��� ����������� ��� ������ �� ������� �� �����

�� ����� � ������������ ��� ����� ����������� ��� ������ � ����������� ��� ����� ���������

�� ���� ��� ��� ��������� �� ����� ��� �������� �� �������� ����� ���� �������� ��������

��� ��������� ������������ ���� ��� ��������� ���� ���� �� ����� ���� �� ������ ��� �����

��� ��������� � �� ������� �������� �� ��������� ������ �� ����������� ��������� � ������ ���

�� ������������ ���� ���������� ��� ������ ��� ��������� � �� ������ ������� �� ���������

������� ����������� ��� �� ������� �� ����� ���� ����� � ������������ ��� ������ ����������

���� �������� � �������� ���� �� ������ ����� ��� ���������� �������� �� ��������

� �������� ���� ��� �������� ������� ��������� ���� ��������� �� ������� �� ����

������ ���� ���� ���������� ��� ��������� �������� ���� ��������� ��� �� ������� �� ������

��� ��������� �� ������������� ������������ ������ �� ����������� ������������ �� ����

������ ���� � ���� ����� �� ���� ��������� ����� � ���� �������� � ���� �������� ������������

���� � ������� ��� ��� ������ ��� ���� ���� ���������� � ��������� ���� ��������� ��� ��

��������������� �� �������� ������������� � ������ ��� �� ������ ���� ������������� � �

������ �� ���� ��������� ������ ���� ������������ �� ����� � � � ����� ������ � � ����� �� �

������ ���� ����������� �� ����� � �� � ����� ������ � �������� �� ����� �� ������ �� �����

� �� ��������� ������ � ������� �� ����� �� �����

���� ������� ���������

� �������� ��������� ��� ��������� �� ������� �� ���� ��������� � �������� �� ���

���������� �������� ��� ��������� ���� �� ����������� � �������� ������ ��� ����� ��� �������

�� ��� ��������� ��� �� ������ �� ���������� ����� �� ������� ���� ������ � ��������� ���

�������������� �� ������ �� �� ���� �������� ���������� ���� ���� ���������� �� ���� ��

�������� ����� � ���� ���� ������ � ��������������� ��������

�������������� ��� � � � ������������������� �����������������

������������������ ��� ������ ������������������� ����

��������������� ��� ��������� ��� �����������������

������ �� ���� ������� �� �� �������� ������

�� ���� ��� �� ��� �������� �� ������ �������� ��� �� ���������� ���� ��� ����� �����

���� � ����������� ���� ���������� � ��������� ��� ������ ����������� ������� �� �����

��������� ��� ����������� �� ���� �� ��� ������� � ����������� ��� ����������� ��

���� �� �� ���� �� ����� �� ���� ����������� ����� ��� �� ������ �� ����� ��������

����� �� ���� ��� ����� ���� ������� ��������� ������� ��� ���������� ������ ����� ������ ����

������ �� ������� �������� � ������ � ��������� ����� ��������� ���� � � ��������� ��� �����

�� �����

���� ��� ������������� � ���������������������

� ���������������������

�������������� ��� ����������

���������� ��� ��������������� ���������������������

������ �� ����� ��������� ���� ���� �� �������������� �� ����������

� ������ � ��������� ��� ������������ ��� ��� ������� � ���� ������� �� ����� �

�������� ����� ���� ����� ��� �� �������� ����� ��� ������� �� ���� � ������ ������ �

Page 5: IX Simpósio Brasileiro de Linguagens de Programação · IX Simpósio Brasileiro de Linguagens de Programação 24

IX Simpósio Brasileiro de Linguagens de Programação

28

����� �� ��������� � �������� ������� ������ � ��������� �������� ���� ��� ������� ����� �

�������� �������� �� �������� ����� � ������ �� ������� ����� ���� � ��������� �� ��������

�� ���� ��� ��� ���� ������������ ��� �� ����� ���� ������� ���� � �������� ��� ��� ������ �� ����

����������

�������� �����

����

������������������

���������������������

��

����� �� ��������� �������� � ���� �

�������� �������

����� �������

��� �����

������ ����������������� �������������������������� ���������

��

������ �� ��� ������������ ��� ���� ��� ����� �� ������� ����������

���� ������ �� �������

���� ���������� � �������� �� ��������� ��� �� ���������� ���� ��� ����� ����� ���� �

����������� �������� �� ������ �� �������� ������������ �� ������ �� � ����� ��������

� ���������� � �� ����� �� �������� ����� ������������ ������ ����� ���������� ����� ���

�������� �� ��� ���������� ��� �� �� ��������� ������� ���������������� ����������� ��������

���� � ����� �� ����� ���� ������������� ��� �� ���������������� �� ����� ������ � ������ ��� �����

���� ���� ������ ��������

���������� �� ���� ��� �����

�������������� �� ���������� �� ���� ��������� ���

������ �� ������ �� ��������

� ����� �� ���� ��� ��� � ���� ���������� �� ������� �� ����� �� ����� ���

��������� ���� �� ���� ���������� ���� �������� �� �������� ������� ��� �� ���� ���

��������� �� ���� ���� �� ��������� � ����� �� ������ �� ����� �������� ��� ���

�� ��������� ���� ��������� �� ���� ��� ����� � ���� �� ��� ������ ����� � ����� ��� ���

��������� �� ���� �������������� � � ���� �� ��� ����������� ������������ �� ���

��������� �������� ��� ��� ��������� �� ���� ����������� ����������������� �����

���� � �� ��������������� �� ������ � ��������� ������������ �� ����� �� ��������� ����

��� ���� �� ������ ��� � ����� �������� ��� ���� �� ��������� ������� ��� ��������� ��

���� ���������� �� �� ����� ��� ������ ��� ��������� ���������������

���� �������� �

� � ������ �� ���� ���� ����� ��� ������������ ��� ����� ���������� ����� �������� ����

�������� ��� ���� ����� �������� �� ������� �� ���������� ���������� �� ���������� ��

������� ���������� ���� ���� ������ ���� ������ �� ����� �� ���������� ������ ������� � �������

������� �� ��������� ������ �������� ������� ��� ������� �� ��������� �� �� ���������� ���

����� � ���� �� ��������� ��� �� ������ � � ������ �� ����� ���� ������ ���������� ������� ��

Page 6: IX Simpósio Brasileiro de Linguagens de Programação · IX Simpósio Brasileiro de Linguagens de Programação 24

Technical Session 1 - Program Transformation

29

������� �� � � �����

���� �� � � �����

��� �� � � �����

�� �� � � ���������������

��� �� � � �����������������

���� ����� �� ����� �����������

���� ������������������ �� ������������������� �����������

������ ��� ������� ������� �� � �

����������� ��� � �������� ���� ����� � ��������� �� �������� ����� ���������� ��� �����

���� � ������ ��� ������������ � � �� ����� ��������� � �� �������� � ��� ������� ��������� ����

����� �� ���������� ������ �� � � �� � ������ ��� �������� �� ������� �� ����� � � � � � ��������

� ������ ���� � �� �������� � ��

���� � ������� �� ����� �� ��������� ����� ��� ������� �� �������� � �� �����

��������� �� �������� ������ ���� ���� �� ��� ��������������� ��� ��������� ���

�������� ��� �� ��������� �� ������ �� ������ ����������� �� ���������� ���� ������ � ����

����� � ������� ���� ����� �� ������������ �� ������� ���� �������������� ������ ��

����� ����������� ��������� ��������� � ���������� ����� ���� ��� ��� ���� ���� � �� ��� ��

������ � ����������� �� �������������� ���� �� ��� �� ������ ������ ����� ���� �������

������ �� ������� ���� ������ ��� �������� ��� ������������ ���� �� ����������� ����� � ����

�� ���� � ������� � ���� �� ���� �� ���� ������������� ����� ����� ���� �������������

��� ��� ��� ���� � �� � ���� ���� �� ������������ � � �� � ���� ����� � ����� ���������������

���� � ���� �� ��� ������� ���� ������� �� ���� ����� ���� ����� ������ � �������� � � ��

����� �� ����� �� �� ������ � ���� �������� ���� � ������ ��� ����������� ��� ����� � ����� �

� ��� ���

� ���� �� ������� � ��������� ��� �� ����� �� ���������������� �� ����������� ���������

� ������ ������� �� � � ���� ����� ��������� �� � �� �������������� �� ����� �� �����

���������� � �� ���������� �� ��� � � ������ �� �������� ���� ��������� ���� ���������

�� ������� �� ������������ ��� �� ��������� �� ��� � � ��� ���� � �� ��� ����� ����� ��

��������� ��������� � ����� �� ������������ �� ���� ����� ���������� ����� ���� ��������� ��

� ���������� �� ��� � � ������������ ��� � �������� �� ���������� �� ������ �� ������

���� ����� ����� ��� ����������� ����� �� ������� ������������ ���� �� �������� ���������

���������� �� ���� �� ������� �� ������� ���� ���� ��������� �� � � ���� ���� ����� �������

� ����� �� �������� ������������ ������� �� �����

� ����� �������������� �� �������� � ������� �� ������ �� ������ � ���� ������

�������� ��� �� ��� ��� ���� ���� �� �� � ������������ � � � ������ ���� ���� �� ���������

� � ���������� ���� ���������� �� ������� �� ������������ ��� � �� ����� ���������� �������

�������� ������ � ���� ���� ������������� ��� ���� ���� � ������ �� ������ � ������ �������

�� � ���� � ������������ ��� �� ������ ��

���� ������ �� ����

��� ������������ ��� ���� ������� �� �� ����� ��������� ���������� ���� �� ��������� ����

����� ��� �������� �� ����� �� �� �������� ���� ����� ��� ��������� ���� �� ����

���������������� �� ��� ��������� ��� �� �������� ��� ������ �� ������ ��� � ���������

����� ��� ������ �� ����� ���� ������� � ����� �� ������������ ���� ����������� ���� �

��������� ���� �� ��������� ����� ������ ��� �������������������� ���� ���� �������� ��

�������� ���� ��� ���� ��������� ����������������

� ������ ��� �� ����� �� �������������� ���������� �� � � ��������� �� ��� ���� ����

Page 7: IX Simpósio Brasileiro de Linguagens de Programação · IX Simpósio Brasileiro de Linguagens de Programação 24

IX Simpósio Brasileiro de Linguagens de Programação

30

���� �� �������� ������� �� �������� ��� ������ ��� ����� �� � �������� �� � � ���� �����

� ���� �� �� ������������ �� �������� � ���������� � � �� ���� � ������������ ������

���� ��� �� ������� � � � � ��� ��� �� � ������������ ������� ������ �� �������� �� ���

������ ��� ���� �� ������ �� �������� �������� � �������� ���� � �� � ���� �� ������ �� ���

����� � ���������� ��� � ������ ��� � �� � � � � �������� � ������ ���� � �� �������� � � ��

����� �� �� ��������� ������ � ��������� ��� ����� ��������� �� ����� �� ������� � � ������

�� � ��� �������� �� �� ������������ �� ������ ���� ��� �� ������ ���� ����� �� ��

�������� ������ � ������ ����� �� �������� �� ��� ������� ���������������� ���� ���� ����

����� ����� �� � ������� �� ����� ��� �� ��� ���

� � � � ��� ��

� � � ��� ������

� � �� � � ��� ��

� � � � ��� �������

���� ������ ���� ����� � ������������� ��� ������ �� ������ ���� ������ ���������

�� ��������������� �� ������ � �� ������ �� ��� ����� ���������� � �������� ��� �� ���

����� ���� �������� �� �������� ��� �� ������� ����� ������ � ��������� ��� �� ����� �� ����

�������� ���� ��� ����� ���� ��� ������� �� ������������� ���� ���� ��� �� ��� �����

�� ���� � ���� ����� ���� �� ������ �� ��� �������� � ��������� �������� ���� �������

���� ������� � ���������������� �������������� �� ��������� � ��������� �� �������� �����

�� ������������ ���� ���������� � ����� ������� ��� ���� � �������� ����� ��� �������� ��

����� ������� � ���� ���� ��������������� ��� ���� ��� �������� �� ���� ��������� �����

������ �� �������� �� ��������� ���� �� ���������� ����� � ��� ��� ��������� ��� �� �������

����� ��������� ����� ������������� ��� ��������������������� ����� ������� �� ����� ����

������������������ � ����������������� ����������������

� � � � � ������������������� � � � �����������������

� � � � � ����������������������� ���

���� �������� � ���� �� ������ ���� ���������� �� ������ ��� ������� � ��� �� ��

������ ��� � ��������� ���� ��� � ��������� ��� ����� ���� �� ���� �������������������

��� ���� ������� ��� � ������������� ����� ������� �� ��� ����������� �� ��������� ����

�� ����� ���� ����� ������������ ��� ��� � � �������� ��� � ������� ����� ��� ����

�������� ����� ����������� ���� ������� � ���� ���� ���������������� ���� ��������� ���

�� ����� ���������� � ����� ��� ��

� � � � � ����������������

� � ���� �� � � � ����������������������� ��������

� � � � � ��

� � � � � �� � �������������������� ��

������ �� ���������� �� ��������� ���� �� ���������� ����� ���������� � ���� �� ��� ���

���������� ��� ��������� ��� �� ������� ���� � ������ �� �������� ����� �� ���������������

��������� ��� ��������� �������� ���������� � ����� ��� ���� ������� ���� �������� �

��������� ����� ��������� ��� �� ������� ������� ����� �������������������� ��� �������� ���

���� ����� ���� ��������� �� ���� ��������� � � � ���� ������� ���� ���� ��������� � ��� ��

������� �������� �� ����� ��� ���� � ���� ��������� � � � ���� ����� ��������� � ������� �����

��������������� ���������� ���� ������� ���� ���� ����������������� � ��������� ����

���� ���������������������

Page 8: IX Simpósio Brasileiro de Linguagens de Programação · IX Simpósio Brasileiro de Linguagens de Programação 24

Technical Session 1 - Program Transformation

31

� �� � ������ ��� � � � ���������������������� � � � ���� � � � � � � � ��������� ��������� � � � ������������������

� � ����� � ���������������� ���� � � � ��������������������� ���� ��������

���� � ��������� ������� �� ��������������� �� �������� ��� ��������� ���������

���������� � ����� ������ ���� �������� � ���� �� ���������� �� ������ ��� ���� ���

���� � ���� �� ��� ��������� ��� �������� �� ����� �� ���� �� ��������� ��� ��� ��� ��������

����� ������ � ����� ������ ������ � ����� �� ������� �������� � ���� � ��������� ���

�������� �������� �������� �� ������������ ���� �� ������ ��� � ����� �� ��������

��� ��������� ��� ������ ���� ���� ����������������� �� ������� �� ������� �������

����������� ���� ���������� �� � ���� �� ������������ ���� � ���������� ���������

� � � � ��� ������ ������ ���� �� ��� ��������� ����� ���������� ���� ������� ���� ����

����������� � ��� � �������� ��������������� �� ������ � ���� ��������� ����� �� �����

� � � � � � ��

� � ����� � � � ����������

� � � � ���� � � � � � � � �����������

� � ������� � � � � ��������������������� ��������

� � ����� ������ ��������� ������ ������ � ������� �������� � ���� ��

���������� ���� ���� ������������������� ������� ���� ���� �������������������

��� ���� ��� �������� ������ �� ��������� ���� �� ���� ���������������� ��

������������������

� � � � �� � � � �����������������

� � � � �� � � � �����������������������������

� � � � �� � � � ������������������

� � � � �� � � � �����������������������������

� � � � � � � � � ��������������������� � � � � ���������������������

� � � � � � � � � � ���������������������������

� �������� ����� �� ��������������� ������ ������ ��� ��������� ��� �� �������� ��

����� �� ������ � ���� �� ��� ��������� ����� ����� ������ ���������� � ����� �� ���� ��������

�� � ���� ���� ����� ��������� �� ����������������� � ���� ���� ��������� ���� �� ��������� �

�������� �� �������� ����� � ��������� � �������� �� �������� �������� � ����� ������� ��

��� ��� ���� � �������� ������� �� ��� ��������������� ��� ��� ������ ��� ���� ������ ���

��������� ��� �� ������ �������� � ��������� ��� �� ����� ������ �� ����� ���������� ��� ����

��������� �� ������������ ����

� � �� � � � �����������������

� � �� � � � ���������������������������� ���

� �������� ������� ������ ���� ��������� ���� �� ��������� � �������� �� � ���������

���� ��� ���� �������� ��� �� ����� �������� �� ����� ��� ���� ������� � ������� ��������� ����

���� ������� ������������ � ����� ��������� �� ������ ��� ��������� ���

��������� ��� ������ ���� ���� ���������������� �� ����� ��� � ������� � ��� ���� �� ����

��������� � � � ���� ������� ���� ���� ����� � �� ���� ���������������� ����� �� � � ����

���� ���� ���� ����������� ����� ������ � ������� ��������� ��� �� �������� �� ��������

������� �� ��������

Page 9: IX Simpósio Brasileiro de Linguagens de Programação · IX Simpósio Brasileiro de Linguagens de Programação 24

IX Simpósio Brasileiro de Linguagens de Programação

32

� � � � � � ���� � � � � � � ������ � � � �����������

� � � � � �� � ���������������������������

���� � ��������� ��� �� ������� �� �������� ������� ���� ������ ����������� ����

����� ���������� ��� ����� ��������� ���� ����������� � ��������� ��� ���� ����� ��� �

������� ���� �������������� ����� ���� �� ��������� � � � ���� ������� ���� ���� ����� ���

���� ��������� � � � ������� ���� ���� ���������� � ������ �� ����� ����� ��� ����

���� ���� ������� ������� ���� �������������� ����� ������ � �������� ����� �� � ����

����� ���� � ���� �� ������������������� ����� �� �������� ���� ������� � ����� �� ��

������� �� ����������� ��������� �� �������� ������� � ������������ ���� �������� �� ���

������������ ���� ����� ��� �� �������� ���� �������� � � �� � ������� ������������� ���

�������� �� ��������� ��� �� ����� ���� �� �������� �� ����� � ���� ���� �� ����� ���� ���

����� �� ����� �� ����

� � � � ����� �� ��� ������������ � � � � ������� � � � � � ���� � � � � � � ������ � � � �����������

� � � � ��� � � � � �����������������������������

� ����� �� ������� �������� �� �������� ������� ������ ������ � ����������

������� ���������� ����� ������ ���� ������� ������ ���������� � ����� ���������

���� ����� ���� ������� ��� ���� ������� � ���� �� ������������������� ���� ��� ����������

� ���������� �� ��������� ������� �� ������ ��� ��� ��� ���������� ������ ���� ����

���������� ������ �� ��� ��������� ��� �� �������� �������� �� �� ������������� � ����

���� ����� ���������� ����� ����� �� ���� ���� �� ��������� ����

� � � � � ��� �����������

� � � � ������ � ���� ����������������

� � � � � ��� ����������� � � ��� ������������ � � ��� �����������

� � � � � ��� ����������������

� ���������� �� ��������� ������ �� ������������ ��� ���� ��� � ������� ����� �������

� ����� �� ����� �� ��������� ���� ����������� �� ������ ��� �� ������ ��� ��������� ���

������ ���� ���� ������ ����� �� �� �������������������� � � �� ���������� ���� ����

����������� � ���� ���� �� ��������� ��� ����� ����� �� ���� ���� �� ��� �� ���� ��

��������������� �� ������ �� � ����� �� �� �� � ��������� ���� ��� ���� �� ������ ��� �

����� ��� ������ ���� ���� ����������������� ����� ����� � ����� �� ����� ���� ���������

� ������������ ���� ���� �������� � ��������������� �� ������ �� ������� ������� �� ����� ��

��� � ��������� ��� ����������� �������������������� ����� ����� � ���������� �� ���������

������ �� ��� ��������� ��� ����������� ���� ������ �� � ��������� ���� ���� � ���� ���� ��

���������� ����� ������� ��� �������������������� ����� ����� �� ����� �� ����������

��������� ���� ���� ��������� ��� �������� ������� � ������������ ���� ����� ��� � ���� ����

���� ���� ���������� ���������� ��� ���� �������� �������� ����� ���� ���� ������� �

����� �� ��� � � ���� ���� �� ����� ������ �������

� � � � � ����������� � ��� �����������

� � � � ��� ��������������� ������

� ���� �� ����������� ��� ����� ������� �� ������ � ������������ ��� �� ������ � �����

������� � ������� ������� ���������� � �������� ����������� �� ������ ���������� �������

���������� � ���� �� ��������������� � ������������� �� ����� ������ �� �����������

���� ���� �������� �� ������ ���� �������� �������� ������������ ��� ����� �� ���������� � ��

�������� ������ �������� ���� ������������� ��� ����� � �������� ��� �� ����� ��������� ��

���� ��� �� ���� ����� ��������

Page 10: IX Simpósio Brasileiro de Linguagens de Programação · IX Simpósio Brasileiro de Linguagens de Programação 24

Technical Session 1 - Program Transformation

33

����� ����������� �� �������� ������ ���� �������� ������ �� ����� ���� ����

��� ����������� �� ����� ������ ��� ��������� ��� ���� �� ��������� �� �������� ����

����� �� �� ����� ����������� ��� �������� ������ ��� ��������� ���� ��������� ����

���������������� �� �������� �� ���� �������� �� ��� ��������� ���� �� ������ ��� ���

�������� ����������� ��� ������ ��� ��������� ��� �� ���� ���� ����� � ����� �� ���� ��

������� � ������� �� ����� �������� ������� �� ���� ��������� ����� ���� ��������� �� ������ ����

��� ���� ���� ���� ���� ������� ����� ������ � �������� ������ ������� ������� ����� ��

����� �� ��������

���� ��� ��������� ������� ����� �� ����� ������������ ��� �������� � ��������

������� ���� ������ ��� ������� �� �������� ����� ����������� ������ ���������� � ����

������� ������� �������� �� �������� ������� ������� ��� ���������� �� ������ � ������

������ � ���� �� �������� � ����� ��������� ������� � ����������������� ����� � ����

�� ������� �� ����� �� ������� � � ���� �� ������� ��������� �� ����������� ���� ������

������ ����� ����������� ����� �������� �� ����� �� ������ ���������� � ���� ���� ���

��������� �����

�� ��������� ������������

������� ������� ���������� � ����������� ���� ���������� ������������ ���� �� ����������

����� ���� ���� ���� ��������� � ������� � � ����� ��������� ���������� ����� �� �����

������� � ������� �� ��������� � � ������������ ���� ���� ��������� �������� �� ��������� ��

�������� � ����������� ���� � �������� ����� ������ ���������� ���� ����� ������� �� �����

���� ��������� ����������� ���� ��� � ��������� ���� ������� ��� ������������ ���

���������� �� ��������� ������� ���� ��� ������� ���������� �� ������� �� ������ ��� ����

������� ���� �� ��������� �������� ��� ������������ ���� �������� ������ ���������� ����� ��

�������� �������� ���������� � ���������������

� �������� �������� ��� ���� � �� ����� ��� ��� ������ ��������� ��� �����

����� ���� ����������� ������������ ���� �� ��������� ������� �� ����������� � ����������

�� ��������� ������� ���� �������� ���� �� ����� �� �������������� ��� ���

������������ ��� ���������� ���� � ��������� ������ ������������ �� ������ �� ������ ������

��� � ��������� �� �������� ������ ���� ������������ ���� ������ � ���� ���� ���������

�� ��������������� ������� �� ����������� � ���������� �� ����� �������� �� ���������� ��

����� ������ ���� ������ �� ������� �� ����� ����������� � ������������� � ��� � �����

����������� � ��������� ����������� ��� ��������� �� ���� ��� ���

�� ����������� � ��������� �������

� ��������� ���� �������� ������ ��� ���� ��� �� ����� ������� �� ������� ����������

� ��������� ��� ���� ������� ����������� �������� ������������� ����� ����� � ����������

���� �� ����������� � ������� ������������ ���� ��� ������� ������� ���� ���������� �

������� ��� ������ �� �� ������� �� ����� ���� �� ����������� ������������ �� ���� �

��� ������������ ��� ���� ������� �� �������� � ��������� ���������� � ����� �� ���������

���������� �� �������� ������ ��� ��� ������������ ���� � ������� �� ����� �������� �����

�������� ��� ��� ������������ � ������� ����������� �� ��������� �� ����� ���� ������ ��

������� ����� �� ����� ������������ �� �������� � ������� �� �������� ����� ���� �������� �

��������� ���������� ��� ��������� ��������

� ��������� ��� �� ���������� ���� ��� ����� ����� ���� � ����������� ���� �����

�� ���� ��� �� �� �������� ����� ��� ������������ ����� � ��� ������� � ����������� �� �����

�� �������� ������� ���� ����� ���� ����������� �� ����� ������������ �� ����� ���� ���

��������� ����� ��� ������� ��������� ���� ���� ����������������������� � ������ ����

Page 11: IX Simpósio Brasileiro de Linguagens de Programação · IX Simpósio Brasileiro de Linguagens de Programação 24

IX Simpósio Brasileiro de Linguagens de Programação

34

��� �� ��� ��������� ��� �� �������� � ��� �� ��� ��������� �� ���� ��� �������� ���������

���� ����� �� ����������� ��� �� ������� �� ������ ���������� �� �������� ����� ����

���� �������� ���� ��������� ��� ������� ����� ������� ���� ���������� ��� �������� ���� �

��������� ��� ����� ������ ��� ��� ��������� ��� �� �������� �� ���� ������� � ������� ��

����� ����� ������ ����� ��� ������������ ���� ���������� �� ����� ������������� �� ����

� ��������� ���� �������� ������ ������� ��� ���� �������� ������� ���� ���������� �����

������������� �� �������� ������

�� �������� ������� ������������ ���� ��� �������� �� �������� ����� ���� ����

����� ����������� ������ ��� �� ������� �� ������ ���� �������� �� ����������� �� ����������

�� ����� �� ��� ��������� ����� ������ ������ � ���� �� ��������� ��� ������� ��� � ���������

���� ���� �� ���������� ��� ���� ������� ����� ����� ��������� � ������������� ��� �� ������

�� ��������� �� ������������ ���� ���� ��� �������� �� �������� ������ ����� �� �������

��������� � ���� �� ����������

����� ����� �������� ��� ����� �� ����������� � ������ ��� �� �������� �� ���� ����

���������� �� ������������ ���� � ���������� ��� ��������� ���� ����� ������������ ��� �

�������� �������� � ��� ����� �������� �� ����� ����� ��� ������ � ������ ��� �� ��������

�� ��������������� �� ��������� ������ ��� ������ ������

�� � �������������

������������ �� ��������� � �������� ������ ����� ���� ���������� � ���������� �������

������� ������ ��� ����������� ��������� ��� �������� � �������� ���� �������

������������

�������� ��� ������ � �� ��� ������ �� ������� ��������������� �� �������� ����������

� ������� ���������� � ������� ���������������� ���������� �� � ����� �� � ���������

���������� �� ���������� �� ��������� ����� �������� ���� �������

������ �� ��� �������� � � ������� ����� ���� �� ����� �� ��������������� ��������� ��

� ���� �� ��� �������� �� �������� �������� ����� ������ ����� ������ � ��� �������

��������� �� ������� ���� �������� �� ������� � � ��� ������� ��� �������� ������� ���

����������� ��������� ������� ��� ��� ������ ���� ������ ��� ��� ��������

��������� �� ��� ������� �� ������� �� ������������� ������ ���� ������������ ��� �����

��������� ��������� ������� ��������������

������� �� ��� ������ �� ������� � �������� ��� ���������� ���� ���������������� �� � ����

�� � ��������� ���������� �� ���������� �� ���������� ���� ����� �������� �������� �

��� �������

������� ��� ��������� ��� ������ � �� ������� ��� ��� ������ �� ������� ����� � ���� ���������

������ ������� �� � ���� �� �� ��������� ���������� �� ���������� �� ��������� �����

�������� ��� �� ������� � ��� �������

����� �� ��� ��� �� �������� ������������ ������� ������� ���������������� �� ��������

���� �� ��� � �� ������ � ���� �������� �� ������� ���������� ��� ���������������

������� ������������� ����� ������ ��� ����� � ����������� ��� �

����� �� ��� ��� �� �������� ���������������� ������� ������� ���� ���������������

�� ����������� �� ��� ������ � �� ������ � ������������� ���������� �� ����������

������������ ����� �������� �������� ��������

Page 12: IX Simpósio Brasileiro de Linguagens de Programação · IX Simpósio Brasileiro de Linguagens de Programação 24

Technical Session 1 - Program Transformation

35

������ �� ��� ����������� �� ������� ��� ��� ����������� �������� ������ ��� ��������

���������� ��������� ������� ������� ���������� �� ��������� ���������� �� �������

��� ��� ����������� ��������

������ �� ��� �������� �� ������� ���� ��� ��������� ���� ���������� ������������ �����

�� � ���� �� ��� ��������� ���������� �� ���������� �� ���������� ���� ����� ��������

����� � ����� � ��� �������

������� �� ������� ������������ ��������� ��� ������ �� �������� ����� ������ �����

������ ������� � ������ �������

�������� ��� ���� ��� ��� ������� �� ������� ��� ���� �������� ������������� � �������

�������

��������� � �� ������� ��� ��� ������� �� ������� ������������� ����� � ������� ����

�������� ��� ���� ��� ��� �� ����������� �� ��� � �� ���� ��������� �� �������

�������� ������������ �������� ��������� ��� � ������������ ����� �������� ������

� ��������� ��� �

����� �� ��� ��������� � � ������� ������� ��� ��������� ���� �������� ��� ��

������������� ���� �� ��������� ����� �� � ����� �� �� ��������� ���������� �� �������

���� �� ���������� ���� ����� �������� ��� �� ��������

������� �� ������� ����������� ���� �������������� ������������� ������ �� ��������

�������� ������������� ��������������

������� �� ������� ����������� ��������������� ����������� ��� ������� ���������� ��

�������� �� ����������������� ����� �� �������� ��������

������ � � ��� ������ �� ������� ������ ��� �� �������� �� ������������ ���� �� � ���� �� ��

��������� ���������� �� ���������� �� ���������� ���� ������ � ��� �������

Page 13: IX Simpósio Brasileiro de Linguagens de Programação · IX Simpósio Brasileiro de Linguagens de Programação 24

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

Page 14: IX Simpósio Brasileiro de Linguagens de Programação · IX Simpósio Brasileiro de Linguagens de Programação 24

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