Compiladores: PASCALjr - WWW2 - Udesc
Compiladores: PASCALjr - WWW2 - Udesc
Compiladores: PASCALjr - WWW2 - Udesc
- 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