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.

Backpatching para Comandos de ControleEntendendo-se o esquema de tradução anterior, é introduzido um não-terminal N antesdo comando “senao” para ocasionar um salto sobre o bloco do “senao” se for o caso.S → Se E entao M S 1 {backpatching(E.ListaT rue, M.quad);S.prox = merge(E.ListaF alse, S 1 .prox); }S → Se E entao M 1 S 1 N {backpatching(E.ListaT rue, M 1 .quad);senao M 2 S 2backpatching(E.ListaF alse, M 2 .quad);S.prox = merge(S 1 .prox, merge(N.go, S 2 .prox)); }N → ε {N.go = makelist(P roxq); Geracod(goto ); }S → Enquanto M 1 E Faca {backpatching(S 1 .prox, M 1 .quad);M 2 S 1backpatching(E.ListaT rue, M 2 .quad);S.prox = E.ListaF alse; Geracod(goto M 1 .quad); }S → {L}{S.prox = L.prox;S → A {S.prox = makelist(NULL); }A → ID = EAções semânticas já vistas em aulaL → L 1 ; M S {backpatching(L 1 .prox, M.quad); L.prox = S.prox; }L → S {L.prox = S.prox; }P → S. {backpatching(S.prox, EOF ); }O endereço indicado por EOF representa o fim do código fonte e o retorno ao sistemaoperacional.Exercício: Gere o código para o trecho de programa abaixo (supor primeira instruçãono endereço 000):Enquanto A < B entaose C < D entaoX = Y+ZsenaoX = Y-ZCódigo resultante:000: if A < B goto 002 006: goto 000001: goto EOF 007: T2 = Y-Z002: if C < D goto 004 008: X = T2003: goto 007 009: goto 000004: T1 = Y+Z EOF:005: X = T166

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

Saved successfully!

Ooh no, something went wrong!