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 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