11.07.2015 Views

Compiladores: PASCALjr - WWW2 - Udesc

Compiladores: PASCALjr - WWW2 - Udesc

Compiladores: PASCALjr - WWW2 - Udesc

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

100: if A < B goto 103 107: T2=1101: T1=0 108: if E < F goto 111102: goto 104 109: T3=0103: T1=1 110: goto 112104: if C < D goto 107 111: T3=1105: T2=0 112: T4=T2 && T3106: goto 108 113: T5 = T1 || T4O valor final da expressão é sempre no último temporário gerado (no exemplo T5). Onome desse temporário é então armazenado no não-terminal expressão da gramática.Esquema de Tradução para o comando EnquantoO comando < Enquanto >→ prEnquanto < Expr > prFaca < ComSimp >, segueo seguinte esquema de tradução:Através da seguinte regra de tradução:Inicio: Expr.codif Expr.nome == 0 goto ProxComSimp.codgoto InicioProx: . . .S → prEnquanto Expr prFaca {S.inicio = GeraRotulo; S.prox = GeraRotulo;ComSimp S.cod = Expr.cod ||Geracod(if Expr.nome == 0goto S.prox);ComSimp.cod; || Geracod(goto S.inicio); }Representação por Fluxo de ControleEste método traduz expressões lógicas para um código formado por instruções if-goto.São gerados rótulos true e false, que armazenam os endereços de desvio de execução casoa avaliação resulte em true ou false respectivamente. Por este motivo, é mais eficiente queo método de avaliação numérica.Tradução de expressões lógicas por fluxo de controleExpr → Expr 1 || Expr 2 {Expr 1 .true = Expr.true; Expr 1 .false = GeraRotulo;Expr 2 .true = Expr.true; Expr 2 .false = Expr.false;Expr.cod = Expr 1 .cod || Expr 2 .cod; }Expr → Expr 1 && Expr 2 {Expr 1 .true = GeraRotulo; Expr 1 .false = Expr.false;Expr 2 .true = Expr.true; Expr 2 .false = Expr.false;Expr.cod = Expr 1 .cod || Expr 2 .cod; }Expr →! Expr 1{Expr 1 .true = Expr.false; Expr 1 .false = Expr.true;Expr.cod = Expr 1 .cod; }Expr → (Expr 1 ){Expr 1 .true = Expr.true; Expr 1 .false = Expr.false;Expr → ID 1 opRel ID 2Expr.cod = Expr 1 .cod; }{Expr.cod = Geracod(if ID 1 .nome opRel ID 2 .nomegoto Expr.true); Geracod(goto Expr.false); }Expr → true {Expr.cod = Geracod(goto Expr.true); }Expr → false {Expr.cod = Geracod(goto Expr.false); }63

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

Saved successfully!

Ooh no, something went wrong!