38
MO615B Implementação de Linguagens II e MC900A Tópicos Especiais em Linguagem de Programação Prof. Guido Araujo www.ic.unicamp.br/~guido

!MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Embed Size (px)

Citation preview

Page 1: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

 MO615B  -­‐  Implementação  de  Linguagens  II  

e                MC900A  -­‐  Tópicos  Especiais  em  

Linguagem  de  Programação  

Prof.  Guido  Araujo  www.ic.unicamp.br/~guido  

Page 2: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Ementa  

Técnicas avançadas usadas no projeto de compiladores modernos. Tais como:

•  análise de fluxo de dados,

•  otimização de código,

•  alocação de registradores,

•  escalonamento de instruções,

•  geração de código para arquiteturas paralelas.

Page 3: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Bibliografia  

Livro do Dragão: Aho, Lam, Sethi and Ullman. Compilers: Principles, techniques and tools. Second Edition. Addison-Wesley.

Livro do Muchnick: Steven S. Muchnick. Advanced Compiler Design and Implementation. Morgan Kaufmann.

Livro do Wolfe: Michael Wolfe. High Performance Compilers for Parallel Computing.

Livro do Appel: Andrew Appel. Modern Compiler Implementation in Java. Second Edition. Cambridge

Page 4: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Avaliação  

2 Provas: P1 (35%) e P2 (35%)

Atividades extras: 30%

Page 5: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Representação  Intermediária  (RI)  

Análise léxica (scanner)

Análise sintática (parser)

Análise semântica

Geração de código intermediário (RI)

Otimizações independentes de

máquina

Geração de código (alvo)

Otimizações específicas de

máquina

Front-end

Back-end

Page 6: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Front-­‐end  /  Back-­‐end  

Ex: tradução de uma sentença (Fig. 1.7 – Dragão)

Page 7: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Representação  Intermediária  (RI)  

•  Uma RI independente da linguagem de programação e da arquitetura alvo facilita o desenvolvimento de um compilador compile de M linguagens para N máquinas. Ex:

Java

C

C++

Pascal

MIPS

SPARC

x86

PowerPC

RI  

ARM

Page 8: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Representação  Intermediária  (RI)  

•  Características desejáveis:

•  Facilmente construída a partir da análise semântica e capaz de expressar propriedades da linguagem de programação pertinentes à otimização.

•  Adequada para otimizações de código: Ex: facilmente alterada (re-escrita) durante as transformações do código.

•  Conveniente para a tradução para linguagem de máquina.

Page 9: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Representação  Intermediária  (RI)  

•  Nem sempre é possível satisfazer todas a características desejáveis com uma única RI.

•  Solução: Múltiplas RIs. Ex: Muchnick Fig 4.1

t1  <=  j  +  2  t2  <=  i  *  20  t3  <=  t1  +  t2  t4  <=  4  *  t3  t5  <=  addr  a  t6  <=  t5  +  t4  t7  <=  *t6  

r1  <=  [fp-­‐4]  r2  <=  r1  +  2  r3  <=  [fp-­‐8]  r4  <=  r3  *  20  r5  <=  r4  +  r2  r6  <=  4  *  r5  r7  <=  fp  –  216  f1  <=  [r7+r6]  

t1  <=  a[i,  j+2]  

HIR MIR LIR

* float a[20][10]

Page 10: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Caracterís`cas  de  uma  RI  

•  Alto  nível:  acesso  a  arrays,  chamada  de  procedimentos.  Tipicamente  usada  nos  estágios  iniciais  da  compilação.    

–  Ex:  árvores  sintá`cas  abstratas.  

•  Nível  médio:  composta  por  descrições  de  operações  simples:  busca/armazenamento  de  valores,  soma,  movimentação,  saltos,  etc.  Adequada  para  o`mizações  independente  de  máquina.  

–  Ex:  MIR  (Livro  do  Muchnick),  GCC  RTL,  LLVM  IR.  

•  Baixo  nível:  próxima  à  arquitetura  alvo.  Mais  adequada  para  as  o`mizações  de  código  dependentes  de  máquinas.  

Page 11: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Tipos  de  RI  

Representações  gráficas:  

•  Árvores  ou  DAGs  (Directed  Acyclic  Graphs)  •  Manipulação  pode  ser  feita  através  de  gramá`cas  

•  Pode  ser  tanto  de  alto-­‐nível  como  nível  médio  

Representação  linear:  

•  Código  de  três  endereços  (three-­‐address  code)  

Page 12: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Árvores  x  DAGs  

Expressão:    a := b*-c + b*-c;  

assign

+

uminus b

c

a

*

Árvore

uminus b

c

*

Page 13: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Árvores  x  DAGs  

Expressão:    a := b*-c + b*-c;  

assign

+

uminus b

c

a

*

Árvore

uminus b

c

*

Sub-expressões comuns

Page 14: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Árvores  x  DAGs  

Expressão:    a := b*-c + b*-c;  

DAG Árvore

assign

+

uminus b

c

a

*

uminus b

c

*

a

assign

+

uminus b

c

*

Page 15: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Outro  exemplo  de  Árvore  

•  Livro  do  Appel:  Cap.  7  •  Tipos  de  operações  (nós):  const,  binop,  mem,  call,  etc  

•  Exemplo:  a[i]   MEM

+

BINOP MEM

MUL i CONST

w

e

MEM(+(MEM(e), BINOP(MUL, i, CONST w)))

a

Page 16: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Representação  Linear  

•  A  RI  se  assemelha  a  um  pseudo-­‐código  para  

alguma  máquina  abstrata.  

–  Java:  Bytecode  (interpretado  ou  traduzido)  – Código  de  três  endereços  

Page 17: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Código  de  três  endereços  

•  Forma  geral:  lista  de  sentenças  “x  :=  y  op  z”  

•  Representação  linearizada  de  uma  árvore  sintá`ca,  ou  DAG  

a := b * -c + b * - c

Ref.: Aho, et al – Cap 8

uminus

assign

+

uminus b

c

a

*

b

*

c

t1 := - c

t2 := b * t1

t3 := -c

t4 := b * t3

t5 := t2 + t4

a := t5

Page 18: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Código  de  três  endereços  

•  Tipos  de  sentenças:  –  atribuição:  x  :=  y  op  z    ou  x  :=  y  ou  x:=  op  y  –  saltos:    goto  L  –  desvios  condicionais:  if  x  relop  y  goto  L  –  chamadas  a  procedimentos:  param  x  and  call  p,n  

–  retorno:  return  y  –  arrays:  x  :=  y[i]  ou  x[i]:=y  

Page 19: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Exemplo:  Produto  Interno  

{

...

prod = 0;

i = 1;

do {

prod = prod + a[i] * b[i];

i = i +1;

} while (i <= 20);

...

}

(1) prod := 0

(2)  i : = 1

(3)  t1 := 4 * i

(4)  t2 := a [ t1]

(5)  t3 := 4 * i

(6)  t4 := b [t3]

(7)  t5 := t2 * t4

(8)  t6 := prod + t5

(9) prod := t6

(10)  t7 := i + 1

(11)  i := t7

(12)  if i <= 20 goto (3)

RI

Page 20: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Estrutura  de  Dados  

•  quádruplas:  (op,  arg1,  arg2,  result)  (1)   (*,  b,  t1,  t2)  

(0) t1 := minus c

(1) t2 := b * t1

(2) t3 := minus c

(3) t4 := b * t3

(4) t5 := t2 + t4

(5) a := t5

a := b * -c + b * - c

Page 21: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Estrutura  de  Dados  

•  quádruplas:  (op,  arg1,  arg2,  result)  (1)      (*,  b,  t1,  t2)  

•  triplas:  (op,  arg1,  arg2)  (0)    (-­‐,  c,)  

(1)    (*,  b,  (0))  

(2)    (-­‐,c,)  

(0) t1 := minus c

(1) t2 := b * t1

(2) t3 := minus c

(3) t4 := b * t3

(4) t5 := t2 + t4

(5) a := t5

a := b * -c + b * - c

Page 22: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Estrutura  de  Dados  

•  quádruplas:  (op,  arg1,  arg2,  result)  (1)      (*,  b,  t1,  t2)  

•  triplas:  (op,  arg1,  arg2)  (0)    (-­‐,  c,)  

(1)    (*,  b,  (0))  

(2)    (-­‐,c,)  

(0) t1 := minus c

(1) t2 := b * t1

(2) t3 := minus c

(3) t4 := b * t3

(4) t5 := t2 + t4

(5) a := t5

a := b * -c + b * - c

! Adicionar e/ou remover instruções pode afetar a representação!

Page 23: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Estrutura  de  Dados  

Triplas  indiretas:  (7)    (-­‐,  c,)  

(8)    (*,  b,  (7))  

(9)    (-­‐,c,)  

Lista de sentenças: (0) (7) (1) (8) (2) (9)

•  Lista/Vetor de apontadores determina a ordem das triplas no programa.

•  Facilita a adição/remoção de instruções no código.

Page 24: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Geração  de  código  de  3  endereços  

•  A  par`r  da  árvore  sintá`ca  

•  Emissão  a  par`r  de  ações  na  gramá`ca  com  

atributos  

Page 25: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Geração  de  código  de  3  endereços  

S id := E S.code := E.code || gen(id.place ‘:=‘ E.place)

E E1 + E2 E.place := newtemp; E.code := E1.code || E2.code || gen((E.place ‘:=‘ E1.place ‘+’ E2.place)

S -> if E then S1 else S2

E. true := newlabel; E.false := S.next; S1.next := S.next; S.code := E.code || gen(E.true ‘:’) || S1.code || gen(‘goto’ S.next) || gen( E.false ‘:’) || S2.code

Veja a seção 6.4 do livro do Dragão!

Page 26: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Representação  Híbrida  

•  Combina-­‐se  elementos  tanto  das  RIs  gráficas  

(estrutura)  como  das  lineares.  

– Usar  RI  linear  para  blocos  de  código  sequencial  e  uma  representação  gráfica  (grafo  CFG  –  Control  

Flow  Graph)  para  representar  o  fluxo  de  controle  

entre  esses  blocos  

Page 27: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Exemplo  –  CFG  com  código  de  três  endereços  

a:= b + c

d:= e + f

if a < b goto B2

f:= a + c

d:= b + a

b:= d + c

d:= e + f

c:=d * 2

Page 28: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Caso  Real  –  Gnu  Compiler  Collec`on  

•  Várias  linguagens:  pascal,  fortran,  C,  C++  

•  Várias  arquiteturas  alvo:  MIPS,  SPARC,  Intel,  

Motorola,  PowerPC,  etc  

•  U`liza  mais  de  uma  representação  intermediária  

–  árvore  sintá`ca:  construída  por  ações  na  gramá`ca  

–  RTL:  tradução  de  trechos  da  árvore  

Page 29: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Caso  Real  –  Gnu  Compiler  Collec`on  

(insn 8 6 10 (set (reg:SI 2)

(mem:SI (symbol_ref:SI (“a”)))))

(insn 10 8 12 (set (reg:SI 3)

(mem:SI (symbol_ref:SI (“b”)))))

(insn 12 10 14 (set (reg:SI 2)

(plus:SI (reg:SI 2) (reg:SI 3))))

(insn 14 12 15 (set (reg:SI 3)

(mem:SI (symbol_ref:SI (“c”)))))

(insn 15 14 17 (set (reg:SI 2)

(mult:SI (reg:SI 2) (reg:SI 3))))

(insn 17 15 19 (set (mem:SI (symbol_ref:SI (“d”)))

(reg:SI 2)))

d := (a+b)*c

“Human readable GCC IR!”

Page 30: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Caso  Real  –  LLVM  Compiler  

•  Desenvolvido  inicialmente  por  Chris  Lavner  e  Vikram  Adve  (orientador).  –  LLVM:  A  Compila`on  Framework  for  Lifelong  Program  Analysis  &  

Transforma`on,  CGO  2003.  

•  University  of  Illinois  Open  Source  License.  Parecida  com  a  licensa  BSD.  

•  Grande  variedade  de  front-­‐ends:  C,  C++,  Objec`ve-­‐C,  Fortran,  Ada,  Haskell,  Java  bytecode,  Python,  Ruby,  Ac`onScript,  GLSL,  Clang  e  outros.  

•  Contribuições  feitas  da  academia  e  da  indústria  (e.g.  Apple,  Google  GSoC).  

Page 31: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Caso  Real  –  LLVM  Compiler  

•  LLVM:  É  na  verdade  uma  coleção  de  bibliotecas  que  podem  ser  combinadas  para  formar  compiladores.  O  principal  módulo  é  a  representação  intermediária:  LLVM  IR  

Page 32: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Caso  Real  –  LLVM  Compiler  

•  LLVM  IR  –  Independente  da  linguagem  de  programação  e  da  arquitetura  alvo.  

–  Diferente  de  outros  compiladores  (p.e.  GCC),  a  representação  intermediária  do  LLVM  (LLVM  IR)  é  auto  con`da,  o  que  permite  que  ela  seja  conver`da  para  texto,  processada  de  forma  off-­‐line,  e  carregada  novamente.  

–  Bibliotecas  modulares  permitem  que  componentes  (o`mizadores)  que  operam  sobre  a  LLVM  IR  possam  ser  combinados  em  um  pipeline,  por  exemplo,  para  aplicar  múl`plos  passos  de  o`mização.  

Page 33: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Caso  Real  –  LLVM  Compiler  

#include "stdio.h”!int i;!int main(void)!{! int j;! j = i + 1;! return j;!}!

“test.c”

•  Exemplo:  –  Gerar  a  LLVM  IR  para  o  programa  “test.c”  no  arquivo  test.s  

–  llvm-­‐gcc  -­‐O3  -­‐S  -­‐-­‐emit-­‐llvm  test.c  

Page 34: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Caso  Real  –  LLVM  Compiler  

; ModuleID = 'test.c'!target datalayout = ” e-p:64:64:64-i1:8:8-i8:8:8-i16:...”!target triple = "x86_64-apple-darwin10.8"!

@i = common global i32 0!

define i32 @main() nounwind readonly ssp {!entry:! %0 = load i32* @i, align 4! %1 = add nsw i32 %0, 1 ! ret i32 %1!}!

#include "stdio.h”!int i;!int main(void)!{! int j;! j = i + 1;! return j;!}!

Page 35: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Caso  Real  –  Xingó  

•  Representação  linear  (XIR)  

•  U`liza  operações  que  se  aproximam  das  

disponíveis  na  linguagem  C  

•  Possibilita  a  geração  de  código  fonte  a  par`r  da  RI  

Page 36: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Caso  Real  –  Xingó  int fat (int n) {

if(n==0) return 1;

else return n*fat(n-1);}

MOVE .t3 n

MOVEI .t4 0

JNE .L2 .t3 .t4

MOVEI .t5 1

RET .t5

JUMP .L1

LABEL .L2

MOVE .t7 n

MOVEI .t8 1

SUB .t9 .t7 .t8

t3 = n;

t4 = 0;

if(t3!=t4) goto L2;

t5 = 1;

return t5;

goto L1;

L2:

t7 = n;

t8 = 1;

t9 = t7 – t8;

Page 37: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Caso  Real  –  Xingó  

t10 = fat(t9);

//argumento

l1 = t10;

t13 = n;

t15 = l1;

t16 = t13 * t15

l2 = t16;

t19 = l2;

return t19;

L1;

CALL [.t10] fat

ARG .t9

MOVE .l1 .t10

MOVE .t13 n

MOVE .t15 .l1

MUL .t16 .t13 .t15

MOVE .l2 .t16

MOVE .t19 .l2

RET .t19

LABEL .L1

XIR Linguagem C

Page 38: !MO615B!(!Implementação!de! Linguagens!II e! !!!!!!MC900A ...oxent2.ic.unicamp.br/sites/oxent2.ic.unicamp.br/files/01... · Bibliografia Livro do Dragão: Aho, Lam, Sethi and Ullman

Leitura  Complementar  

•  Livro  do  Dragão:  Cap.  6  •  Livro  do  Appel:  Cap.  7  

•  Livro  do  Muchnick:  Cap.  4