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 40<br />

mov a, b<br />

mult a, c<br />

add a, 3<br />

já que a variável a não aparece na expressão.<br />

Uma negação<br />

a = -b<br />

será traduzida para<br />

mov a, -b<br />

Em geral, expressões mais complexas, como<br />

a = a*b + c*d<br />

necessitarão de mais de uma variável temporária:<br />

mov t1, a<br />

mult t1, b<br />

mov t2, c<br />

mult t2, d<br />

add t1, t2<br />

mov a, t1<br />

7. WriteStat ::= “write” “(” ExpressionList “)”<br />

Cada expressão de ExpressionList será colocada em uma variável temporária que é passada como<br />

parâmetro à função _write do sistema de tempo de execução. Por exemplo,<br />

write(a, b*c, d + 1);<br />

será traduzido para<br />

push a<br />

call _write<br />

mov t1, b<br />

mult t1, c<br />

push t1<br />

call _write<br />

mov t1, d<br />

add t1, 1<br />

call _write<br />

Observe que a variável temporária t1 foi utilizada em b*c e reutilizada em d + 1.<br />

8. WhileStat ::= “while” Expression “do” UnStatBlock<br />

A geração de código para<br />

while i < n do<br />

S<br />

onde S é uma lista de comandos entre begin e end, poderia ser<br />

L1: cmp i, n<br />

goto>= L2<br />

codigo para S

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

Saved successfully!

Ooh no, something went wrong!