19.04.2013 Views

Apostila antiga - The Cyan Programming Language

Apostila antiga - The Cyan Programming Language

Apostila antiga - The Cyan Programming Language

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

CHAPTER 4. GERAÇÃO DE CÓDIGO 42<br />

case expr of<br />

V1:<br />

S1;<br />

V2:<br />

S2;<br />

...<br />

Vn:<br />

Sn;<br />

default:<br />

Sd<br />

end { case }<br />

onde expr é uma expressão inteira, V1, V2, ... Vn são constantes literais inteiras e cada Si é uma<br />

instrução ou uma seqüência de instruções entre begin e end.<br />

Uma das maneiras de gerar código para este comando é fazer todas as comparações de expr com<br />

os Vi no fim da tradução, como é feito a seguir.<br />

L1:<br />

L2:<br />

Ln:<br />

D:<br />

Calcule expr e coloque o resultado em t<br />

goto testeCase<br />

codigo para S1<br />

goto fim<br />

codigo para S2<br />

goto fim<br />

...<br />

codigo para Sn<br />

goto fim<br />

codigo para Sd<br />

goto fim<br />

testeCase:<br />

cmp t, V1<br />

goto== L1<br />

cmp t, V2<br />

goto== L2<br />

...<br />

cmp t, Vn<br />

goto== Vn<br />

goto D<br />

fim:<br />

Os testes poderiam ser colocados logo após o cálculo de expr eliminando a necessidade da instrução<br />

“goto testeCase”.<br />

Uma outra alternativa de geração de codigo é colocar os testes junto com a codificação de cada Si:<br />

L1: cmp t, V1<br />

goto L2

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!