E-folioB 2017/2018

Da wiki Wiki Universidade Aberta
Revisão em 10h42min de 21 de janeiro de 2019 por 1100896 (Discussão | contribs) (Criou a página com "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...")
(dif) ← Revisão anterior | Revisão atual (dif) | Revisão seguinte → (dif)

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.