Apostila antiga - The Cyan Programming Language
Apostila antiga - The Cyan Programming Language
Apostila antiga - The Cyan Programming Language
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