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

o código gerado será<br />

mov a, b<br />

Se Expression tiver algum operador aritmético ou lógico (isto é, não for uma variável), como em<br />

a = b*c + 3;<br />

o valor da expressão será colocado em uma variável temporária que chamaremos de t1 e o código<br />

gerado será<br />

mov a, t1<br />

2. Expression ::= SimpleExpression [ Relation SimpleExpression ]<br />

Na expressão<br />

a*b < b + c<br />

considere que o valor das expressões a*b e b + c tenham sido colocados em t1 e t2, duas variáveis<br />

temporárias. Então, o código gerado será<br />

cmp t1, t2<br />

goto< L1<br />

mov t3, 0<br />

goto L2<br />

L1: mov t3, 1<br />

L2:<br />

O resultado da expressão foi colocado em t3. Se esta expressão estiver em um if ou while, o resultado<br />

não precisa ser colocado em uma variável — veja as regras para estes comandos.<br />

3. Factor ::= not Factor<br />

A expressão<br />

not Factor<br />

será gerada como<br />

not t1<br />

admitindo que o resultado de Factor foi colocado em t1.<br />

4. IfStat ::= “if” Expression “then” StatementList<br />

[ “else” StatementList ] “endif”<br />

Estudaremos a geração de código de um if sem else:<br />

if a < b<br />

then<br />

S<br />

endif<br />

onde S é uma seqüência de comandos. O código gerado será<br />

cmp a, b<br />

goto>= L1

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

Saved successfully!

Ooh no, something went wrong!