E-folioB 2017/2018
E-fólio B: máximo 4 valores
Neste segundo trabalho, partindo dos analisadores léxico e sintático implementados e-fólio A, deve ser feita a geração de código intermédio em TAC (Three Address Code) e otimização desse código gerado. Aconselha-se a que o geração de código intermédio seja feita no analisador sintático e a otimização seja posterior, sobre o resultado anterior.
Tome em atenção que os números devem ser todos trabalhados como sendo do tipo double, mesmo os inteiros. Assim, 5/2 deve ser igual a 2.5 e não 2 (divisão inteira).
Exemplo de tradução para TAC de um programa em LittleC (NOTA: este exemplo foi feito manualmente, sem qualquer tipo de otimização; se encontrarem um resultado diferente na geração de código, coloquem a questão no fórum respetivo)
% i=0;
_t1 = 0 i = _t1
% x=0;
_t2 = 0 x = _t2
% while(i<10){
l1:
_t3 = i _t4 = 10 ifz _t3 < _t4 goto l2
% x=x+i;
_t5 = x _t6 = i _t7 = _t5 + _t6 x = _t7
% i=i+1;
_t8 = i _t9 = 1 _t10 = _t8 + _t9 i = _t10
%}
goto l1
l2:
% if(x<50){ _t11 = x _t12 = 50 ifz _t11<_t12 goto l3
% x=50; _t13 = 50 x = _t13
% }
goto l4
l3:
% else{}
l4:
% y=0;
_t14 = 0 y = _t14
% for(j=0;j<5;j=j+1){
_t15 = 0 j = _t15
l5: _t16 = j _t17 = 5 ifz _t16 < _t17 goto l6
% y = y + x - j;
_t18 = y _t19 = x _t20 = _t18 + _t19 _t21 = j _t22 = _t20 - _t21 y = _t22
%} _t23 = j _t24 = 1 _t25 = _t23 + _t24 j = _t25 goto l5
l6:
Formato de entrega: o trabalho deve ser enviado com todos os ficheiro contidos num ficheiro ZIP, incluindo todos os ficheiros de código, bem como um pequeno relatório (não mais de 3 páginas) a explicar as opções tomadas, e um ficheiro readme.txt a explicar como devem ser compilados os ficheiros de modo a obter o compilador, bem como a explicar os argumentos do mesmo.