Compiladores e Computabilidade Unidade II R

34
Análise Sintática II – Ascendente As configurações também serão da forma (α, y), em que α é o conteúdo da pilha e y é o resto da entrada. Entretanto, a convenção sobre o topo da pilha é invertida: o topo fica à direita, ou seja, o último símbolo de α é o símbolo do topo. As mudanças de configuração são: (1) redução pela regra A→ α: permite passar da configuração (βα, y) para a configuração (βA, y). (2) empilhamento ou deslocamento de um terminal s: permite passar da configuração (α, sy) para a configuração (αs, y). Observe que este último tipo de transição é o que permite trazer os terminais para a pilha a fim de que possam participar das reduções. A configuração inicial para a entrada x é (ε, x), com a pilha vazia, e ao final temos a configuração (S, ε), indicando que toda a entrada x foi lida e reduzida para S. Exemplo: Na tabela abaixo, é possível observar as configurações sucessivas de um analisador ascendente, para a cadeia x. A terceira coluna apresenta os passos correspondentes da derivação direita de x. Pilha (topo à esquerda) (restante da) Entrada Derivação direita (invertida) ε a+a*a a+a*a a +a*a F +a*a F+a*a T +a*a T+a*a E +a*a E+a*a E+ a*a E+a *a E+F *a E+F*a E+T *a E+T*a E+T* a E+T*a ε E+T*F ε E+T*F E+T ε E+T E ε E Análise Sintática sLR(1) Há um método de análise sintática ascendente que é chamado sLR(1). As letras que geram a sigla que lhe dá nome indicam: S: a variante mais simples dos métodos LR(1).

description

UNIP

Transcript of Compiladores e Computabilidade Unidade II R

AnliseSintticaIIAscendenteAs configuraes tambm sero da forma (, y), em que o contedo da pilha e yorestodaentrada.Entretanto,aconvenosobreotopodapilhainvertida:otopofica direita, ou seja, o ltimo smbolo de o smbolo do topo. As mudanas deconfiguraoso: (1)reduo pela regra A : permite passar da configurao (, y) para aconfigurao(A,y). (2)empilhamento ou deslocamento de um terminal s: permite passar da configurao(,sy)paraaconfigurao(s,y). Observe que este ltimo tipo de transio o que permite trazer os terminais para apilhaafimdequepossamparticipardasredues. A configurao inicial para a entrada x (, x), com a pilha vazia, e ao final temos aconfigurao(S,),indicandoquetodaaentradaxfoilidaereduzidaparaS. Exemplo:Na tabela abaixo, possvel observar as configuraes sucessivas de umanalisador ascendente, para a cadeia x. A terceira coluna apresenta os passoscorrespondentesdaderivaodireitadex. Pilha (topoesquerda) (restanteda) Entrada Derivaodireita(invertida) a+a*aa+a*a a+a*a F+a*a F+a*a T+a*a T+a*a E+a*a E+a*a E+a*a E+a*a E+F*a E+F*a E+T*a E+T*a E+T*a E+T*a E+T*F E+T*F E+T E+T E E AnliseSintticasLR(1) H um mtodo de anlise sinttica ascendente que chamado sLR(1). As letras quegeramasiglaquelhednomeindicam: S:avariantemaissimplesdosmtodosLR(1). L:acadeiadeentradalidadaesquerdaparaadireita(lefttoright). R:omtodoconstriumaderivaodireita(rightmost)invertida. 1:apenasumsmbolodorestodaentradaexaminado. Como o smbolo inicial pode ocorrer em diferentes partes da rvore de derivao,devemos distinguir sua ocorrncia relativa raiz da rvore das demais. Assim, parasimplificar a identificao do trmino do processo de anlise, acrescentamos gramtica uma nova regra inicialS'S, sendoSo smbolo inicial original, e S' umsmbolonovo,quepassaasero smboloinicialdagramticaaumentada.Assim,umareduo por esta regra indica o fim da anlise, j queS' nunca aparece direita nasregras da gramtica. A gramtica aumentada usada na construo do analisadorsLR(1)dagramticaoriginal. A construo deste analisador se baseia na formulao deum autmato de pilha quepermitir a identificao do momento adequado para realizarmos a reduo dossmbolos da pilha segundo a regra apropriada. A construo deste autmato se datravs da descoberta dos estados, a partir da anlise das regras da gramticaaumentadaedacaracterizaotemporalrealizadapeloparser. Uma maneira conveniente para isto a caracterizao das regras na forma deitens.UmitemAindica a possibilidade de que, no ponto atual em que se encontra aanlise: aregraAsejausadanaderivaodacadeiadeentrada; ossmbolosterminaisderivadosapartirdejsejamtodosencontrados,faltandoencontrarossmbolosterminaisderivadosde. Assim, o marcadorindica o progresso da anlise. Desta maneira, umitemAindica o incio da busca por (uma cadeia derivada de) um,enquantoA indica o fim da busca pelos smbolos gerados, ou seja, o momentoemqueareduodeparaApodeserrealizada. Observe ainda que, num dado momento, vrias possibilidades precisam serconsideradas.Representamosumestadodoprocessodeanlise(estadodoautmato)por umconjunto de itens. O estado inicial do processo de anlise dado peloitemS'Sprovenientedaregrainicialepodeserentendidocomosfaltaencontrar(umacadeiaderivadade)umS. De acordo com as regras da gramtica, quando um estado contm umitemAB, necessrio acrescentar a cada estado as possibilidadescorrespondentes, ou seja, os itens correspondentes s regras deBpara que sejapossvel dirigir a busca porB. Esses so os itens da formaB, para todas asregrasB. Esse processo repetido enquanto for necessrio, sendo denominadodefechamentodoestado. Oestadoinicialdadopelofechamentode{S'S}. Exemplo: Considereagramticaaseguir:Agramticaaumentadapassaaser: 1.EE+T 2.ET 3.TT*F 4.TF 5.F(E) 6.Fa 0.SE1.EE+T 2.ET 3.TT*F 4.TF 5.F(E) 6.Fa Ositenspossveisparaagramticaaumentadasofinitose,nestecaso,compreendemototalde20: S'E,S'E,EE+T,EE+T,EE+T,EE+T,...,Fa,Fa Oestadoinicialofechamentode{SE}.ComohumpontoantesdeE,devemosacrescentar os itensEE+TeET. Por causa do ponto antes deT,acrescentamosTT*FeTF.Por causa do ponto antes deF,acrescentamosF(E)eFa. Oestadoinicial(estado0)ser,ento,compostopelositens: S'E,EE+T,ET,TT*F,TF,F(E),Fa. medidaqueaanliseprossegue,opontodevecaminharparaadireitanosdiversositens do estado. Encontrado um smboloX, passamos de um item AXpara umitemAX. Note que os smbolos terminais sero encontrados na entrada,enquantoossmbolosnoterminaisseroencontradoscomoresultadoderedues. Se o autmato de reconhecimento estiver num estado p que tem itens com amarcao (ponto) antes de um smboloX, uma transio rotulada com estesmboloXnos levar a outro estado q que ter um item com a marcao depois daocorrnciadeXparacadaitemnoestadopcomopontoantesdeX.Osoutrositensdoestadoqseroobtidosapartirdofechamentodoestado. Parageraratabeladetransiesutilizadaspeloanalisador,geramostodososestadose transies possveis a partir do estado inicial e de outros estados gerados a partirdele.Onmerodeestadosdesteautmatosempreserfinito,umavezqueonmerodeitensfinito. Assim, a coleo completa de estados para a gramtica dada como exemplo aseguinte: 0.S'E4.F(E)7.TT*F EE+TEE+TF(E) ETETFa TT*FTT*F TFTF8.F(E) F(E)F(E)EE+T FaFa 9.EE+T 1.S'E5.FaTT*F EE+T 6.EE+T10.TT*F 2.ETTT*F TT*FTF11.F(E) F(E) 3.TFFa Astransiesentreosestadosestoespecificadasnatabelaabaixo: ETF(a+*)$ 012345 16 27 3 482345 5 69345 71045 8611 97 10 11 Notequeatabelaincluialgunsestadosapartirdosquaisnohtransies. O analisador sLR(1) um analisador ascendente. Em vez de smbolos, entretanto, apilha do analisador contm os estados correspondentes aos smbolos. Primeiro,observamos que, a cada estado q, com exceo do estado inicial, correspondeexatamente um smboloX, que o nico smbolo que ocorre depois do ponto, nositens do estado q. Todas as transies para q so feitas com o smboloX, podendoocorrer,entretanto,quedoisoumaisestadossejamacessveispelomesmosmboloX.Nestecaso,osestadossedistinguemporconterinformaoadicionalsobreaposioemqueosmboloXocorrenacadeiadeentrada. As duas aes possveis em analisadores ascendentes se aplicam aqui. Umempilhamento (shift) pode ocorrer quando existe uma transio com um terminal apartir do estado corrente (o estado do topo da pilha). Quando existe um itemcompletoB,noestadocorrente,podeserfeitaumareduopelaregraB.EmumanalisadorsLR(1),aregra: ReduzapelaregraB seosmbolodaentradapertenceraoFollow(B). O primeiro smbolo pertencente ao restante da entrada conhecido como o smbolodelookaheadecombaseneleenoestadocorrentequesedeterminamasaesdoparser. AtabelaparaoanalisadorsLR(1)podeconterasseguintesaes,dadasemfunodoestadoq(dotopodapilha)edosmbolosdelookahead(dadopelaentrada): Empilhamentooestadop(querepresentas)deveserempilhado,eoanalisadorlxicodeveseracionadoparaobteroutrosmbolodaentrada. Reduo se T[q, s] =reduceB, os || estados correspondentes a devem serretiradosdapilha,eoestado(q,B)deveserempilhado,representandoB. AceitaoseT[q,s]=reduceS'S,oprocessoseencerracomsucesso. Nos exemplos, uma ao de empilhamento (shift)q ser representada apenas pelonmero do estado q, e uma ao de reduo (reduce)B ser representada porri,emqueionmerodaregraB.Assim,aaodeparadaserindicadacomor0. Atabeladeaesaseguinte: ETF(a+*)$ 012345 16r0 2r27r2r2 3r4r4r4r4 482345 5r6r6r6r6 69345 71045 8611 9r17r1r1 10r3r3r3r3 11r5r5r5r5 Vejamos como se d a anlise da cadeiax=(a+a)*a. Na configurao inicial, a pilhacontm apenas o estado inicial 0 e a entrada contm a cadeiax. medida quetranscorre a anlise, acrescentamos pilha os estados correspondentes s transiesgrafadasnatabela. Neste exemplo, alm dos estados, inserimos na pilha ainda os smboloscorrespondentesstransies,quedevemserentendidosapenascomocomentrios. Ospassosparaoprocessamentodacadeiaso: PilhaEntradaAo 0(a+a)*aempilhar:4 0(4a+a)*aempilhar:5 0(4a5+a)*areduzir:6 0(4F3+a)*areduzir:4 0(4T2+a)*areduzir:2 0(4E8+a)*aempilhar:6 0(4E8+6a)*aempilhar:5 0(4E8+6a5)*areduzir:6 0(4E8+6F3)*areduzir:4 0(4E8+6T9)*areduzir:1 0(4E8)*aempilhar:11 0(4E8)11*areduzir:5 0F3*areduzir:4 0T2*aempilhar:7 0T2*7aempilhar:5 0T2*7a5 reduzir:6 0T2*7F10 reduzir:3 0T2 reduzir:2 0E1 reduzir:0(aceitar) Asequnciadasreduesfoi642641546320,comoeraesperado,ecorrespondentederivaodireitaS'ETT*FT*aF*a(E)*a(E+T)*a(E+F)*a(E+a)*a(T+a)*a(F+a)*a(a+a)*a Leiturarecomendada: Captulo4,seo4.5dolivroCompiladores:princpios,tcnicaseferramentas(LivrodoDrago) Captulo 3, sees 3.3 e 3.4 do livro Implementao de linguagens de programao:compiladores. Exercciosresolvidos: AnliseSemnticaVisogeral Astcnicasdeanlisesintticavistasatomomentodescrevem,basicamente,elementosreconhecedores.Ouseja,mquinasquedeterminamseumacadeia(programafonte)pertenceounolinguagemreconhecida. Observeque,nocasodeaceitao,ainformaosobreaformadederivaodexdeveserusadanageraodocdigoparax;e,nocasodenoaceitao,ainformaodisponveldeveserusadaparatratamentodeerros(sinalizandoosparaqueoprogramadorpossacorrigilo)erecuperao(paraqueoparserpossacontinuaraanlise). Almdainformaosintticasobreaformadederivaodaentrada,deveficardisponveltambmainformaolxica,compostaessencialmentepelascadeiascorrespondentesaoschamadostokensvariveis(identificadores,literaisinteiros,reais,cadeiasetc.).Estainformaodeveserprocessadanasfasesseguintesdocompilador. Umatcnicageraldetratamentodasinformaesobtidasduranteasfasesdeanliselxicaesintticaabaseadaemgramticasdeatributos.Utilizandoessetipodegramtica,possvelespecificarqualquerformadetraduodirigidapelasintaxe,associandovaloresosatributosaossmbolosterminaisenoterminaisdeumagramticalivredecontexto. GramticasdeAtributos Umagramticadeatributoscompostadeduaspartes: umagramticalivredecontexto,quedescreveumalinguagem;e regrasdeclculo,quepermitemcalcularvaloresqueestoassociadosaossmbolosterminaisenoterminaisdagramtica. Vejamos,porexemplo,umagramticadeatributosquepermitecalcularovaloremdecimaldeumnmerobinriocompartefracionria: G=({N,B,I},{0,1},P,N) P: (1) NI1.I2 N.v:=I1.v+I2.v I1.p:=0 I2.p:=I2.l (2) NI N.v:=I.v I.p:=0 (3) I0I1B I0.v:=I1.v+B.v I0.l:=I1.l+1 I1.p:=I0.p+1 B.p:=I0.p (4) IB I.v:=B.v I.l:=1 B.p:=I.p (5) B0 B.v:=0 (6) B1 B.v:=2B.p Notequealgumasocorrnciasdesmbolosnagramticaestodiferenciadasporndicessuperiores(sobrescritos).IstonospermitefazerrefernciaaoprimeiroIeaosegundoIdaprimeiraregra,porexemplo.Anumeraodasregras(regrassintticas)tambmserveapenasparafacilidadedereferncia. Asregrasdeclculopermitemcalcularosatributosv(valor),p(posio)el(comprimento).Noteque,emN,shrefernciasaovalor(N.v);emB,aovaloreposio(B.veB.p),masemIexistemrefernciasaostrsatributos(I.v,I.p,I.l). Paracadaregrasinttica,hregrassemnticasquepermitemoclculodealgunsatributos,algumasvezesdadosemfunodeoutrosatributos.Porexemplo,paraaregra1,temos(entreoutras)aregrasemntica: N.v:=I1.v+I2.v ElaindicaqueovalordeNobtidosomandoosvaloresdoprimeiroIedosegundoI. Essasregrassocriadasporumprocessodeprogramao,pormesteprocessonoespecificaasequnciaemqueasregrassemnticasdevemseraplicadas.OmomentoparacalcularN.vnoespecificado,eaaplicaopodeserfeitaqualquermomento,desdequeI1.veI2.vtenhamsidocalculadosantes.DizemosqueN.vdependedeI1.veI2.v.Fundamentalmente,asregraspodemseraplicadasemqualquerordem,desdequeosvaloresusadosnasregrastenhamsidocalculadosantes,ouseja,obedecendoarelaesdedependnciaentreatributos. Supondoqueestejamosprocessandoacadeia101.011combasenagramticadoexemplo,construmosarvoresintticaparaacadeiautilizandoumanalisadorascendente,queresultariaem: CategoriadosAtributos Podemosclassificarosatributosemherdadosesintetizados,deacordocomosmbolodagramticaaqueestassociado.Estaclassificaosebaseianaposiodosmbolonaregraeatendeaosseguintescritrios: Setivermosumaregrar:AX1X2...Xm,eumaregrasemnticaassociadaregrarpermitecalcularumatributoxdeA(A.x:=...),entodizemosqueoatributoxdeAsintetizado. Poroutrolado,senaregrar:AX1X2...XmpodemoscalcularumatributoydequalquerumdossmbolosXi,(Xi.y:=...),oatributoydeXiditoherdado. Destamaneira,aordemdeclculonoarbitrria.Comooladoesquerdodaregraapareceemcimanarvoredederivao,emgeralosatributossintetizadossocalculadosemfunodeoutrosatributoscorrespondentesansinferioresnarvoree,portanto,valoressucessivosdoatributopodemsercalculadossubindoarvore.Demaneiraanloga,osvaloressucessivosdeatributosherdadossoobtidosdoselementossuperioresepodemsercalculadosdescendoarvore. Paramaiorclareza,faamosalgumasrestries: Cadaatributodeveterapenasumaclassificao,sendosintetizadoouherdado.Isto,umatributoadeumsmboloXnopodesercalculadoumavezquandoosmboloXseencontraaoladoesquerdodeumaregra,eoutravezquandoXseencontraaoladodireitodeoutraregra.(ObservequeosatributossoassociadosaossmboloseassimpodemosterumatributoherdadoX.a,eoutroatributoY.asintetizado). Todasasregrasdevemapresentarregrassemnticasparacalculartodososatributosassociadosaumsmbolo.Isto,numaregraAX1X2...XmdevemestarpresentesregrassemnticasparaclculodetodososatributossintetizadosdeAedetodososatributosherdadosdetodososXi. Umagramticaquesatisfazessasduasrestrieschamadaumagramticanormal. Retomandonossoexemplo,analisamosqueosatributosN.v,I.v,I.l,B.vsosintetizadoseosatributosI.peB.psoherdados.Observeque,atravsdaregra(3),estocalculadososatributossintetizadosdeI0(I0.veI0.l),osatributosherdadosdeI1(I1.p)edeB(B.p). Assim,aordemdeclculoqueutilizaremosparaatabelaserdadaemtrsetapas: l(sintetizado)sercalculadoprimeiro,subindoarvore; p(herdado)sercalculadologodepois,descendoarvore;e v(sintetizado)sercalculadoporltimo,subindoarvore. Aordeml,p,vusadaporquenenhumvalordeldependedealgumvalordeoutroatributo,masvaloresdeppodemdependerdosvaloresdel(naregra1,temosl2.p:=l2.l)evaloresdevpodemdependerdosvaloresdep(naregra6,temosB.v:=2B.p). Atabelaabaixoapresentaospassosparaoclculodecadaumdosatributosparaoexemplodado: N/atrib. N/regra NsenvolvidosClculo 5/l5/45(I),7(B)I.l:=1 11/l11/411(I),13(B)I.l:=1 3/l3/33(I0),5(I1),6(B)I0.l:=I1.l+1=2 9/l9/39(I0),11(I1),12(B)I0.l:=I1.l+1=2 2/l2/32(I0),3(I1),4(B)I0.l:=I1.l+1=3 8/l8/38(I0),9(I1),10(B)I0.l:=I1.l+1=3 2/p1/11(N),2(I1),8(I2)I1.p:=0 8/p1/11(N),2(I1),8(I2)I2.p:=I2.l=3 3/p2/32(I0),3(I1),4(B)I1.p:=I0.p+1=1 4/p2/32(I0),3(I1),4(B)B.p:=I0.p=0 9/p8/38(I0),9(I1),10(B)I1.p:=I0.p+1=2 10/p8/38(I0),9(I1),10(B)B.p:=I0.p=3 5/p3/33(I0),5(I1),6(B)I1.p:=I0.p+1=2 6/p3/33(I0),5(I1),6(B)B.p:=I0.p=1 11/p9/39(I0),11(I1),12(B)I1.p:=I0.p+1=1 12/p9/39(I0),11(I1),12(B)B.p:=I0.p=2 7/p5/45(I),7(B)B.p:=I.p=2 13/p11/411(I),13(B)B.p:=I.p=1 7/v7/67(B)B.v:=2B.p=4 13/v13/513(B)B.v:=0 5/v5/45(I),7(B)I.v:=B.v=4 6/v6/56(B)B.v:=0 11/v11/411(I),13(B)I.v:=B.v=0 12/v12/612(B)B.v:=2B.p= 3/v3/33(I0),5(I1),6(B)I2.v:=I1.v+B.v=4 4/v4/64(B)B.v:=2B.p=1 9/v9/39(I0),11(I1),12(B)I2.v:=I1.v+B.v= 10/v10/66(B)B.v:=2B.p=1/8 2/v2/32(I0),3(I1),4(B)I2.v:=I1.v+B.v=5 8/v8/38(I0),9(I1),10(B)I2.v:=I1.v+B.v=3/8 1/v1/11(N),2(I1),8(I2)N.v:=I1.v+I2.v=5,3/8 Representandograficamente,teramos: GramticasSAtribudas:UmadefiniodirigidapelasintaxesomentecomatributossintetizadoschamadadedefinioSatribuda.Natraduodirigidapelasintaxe,assumesequeosterminaistenhamsomenteatributossintetizadosnamedidaemqueasdefiniesnoprovidenciemquaisquerregrassemnticas. Exemplodeumagramticadestetipodadoaseguir: (1)E0E1+TE.val:=E1.val+T.val (2)ETE.val:=T.val (3)T0T1*FT.val:=T1.val*F.val (4)TFT.val:=F.val (5)F(E)F.val:=E.val (6)FidF.val:=id.lexval GramticasLAtribudas:Atributossintetizadossobastanteusadosnaprtica,entretantoousodeatributosherdadosconvenienteparaexpressarconstruesdeLingagemdeProgramaoemrelaoaocontextoemqueaparecemassim,costumaseraplicadaaverificaodetiposouaindaparacontrolarseumidentificadorapareceaoladoesquerdo(endereo)oudireito(valor)deumaatribuio. Exemplodeumagramticadestetipodadoaseguir: (1)DTLL.in:=T.tipo (2)TintT.tipo:=inteiro (3)TfloatT.tipo:=real (4)LL1,idL1.in:=L.in incluir_tipo(id.token,L.in) (5)Lidincluir_tipo(id.token,L.in) Leiturarecomendada: Captulo 5, seo 5.1, 5.2, 5.3 e 5.4 do livro Compiladores: princpios, tcnicas eferramentas(LivrodoDrago). Captulo4,sees4.1,4.2e4.3dolivroImplementaodelinguagensdeprogramao:compiladores.

Exerccios resolvidos: 1. Apesar de a maioria das linguagens de programao de alto nvel exibir diversos tipos de dependnciasdecontexto,elas(aslinguagens)normalmentesorepresentadas, sintaticamente, atravs de gramticas livres de contexto. J ustifique: a) O motivo de se usar essa estratgia; Resp.:Formalismospararepresentardependnciasdecontextosogeralmentemais complexos e trabalhosos de se usar do que aqueles usados para representar linguagens livres de contexto. b) Quais as consequncias prticas na especificao da linguagem-fonte? Resp.: A linguagem especificada atravs de uma gramtica livre de contexto mais ampla do que a linguagem desejada. c) Quais as consequncias prticas no desenvolvimento do compilador para a linguagem? Resp.:c)Torna-senecessriointroduzirumafasedeanlisedecontexto,posterioranlise livre de contexto, para detectar eventuais erros de contexto contidos no programa-fonte.

2. Responda: a) Em que consiste a subfase de identificao durante a fase de anlise de contexto? Resp.: Consistenavinculaoentretodasasrefernciasetodasasdeclaraesdenomes. Essa vinculao feita com base nas regras de escopo da linguagem. b) Qual a importncia da tabela de smbolos durante essa subfase? Resp.: A tabela de smbolos (ou de identificao) uma estrutura de dados fundamental para permitirqueaidentificaoocorraemumnicopasso(nomximodois,paralinguagensque permitemrefernciasparaafrente).Elaserveparaarmazenartodososnomesdeclaradose seus respectivos atributos. A busca sempre feita na tabela. c) Quais as operaes bsicas que devem ser previstas pela tabela de smbolos para suportar a identificao de linguagens com estrutura de blocos aninhados? Resp.: Insero de nomes (enter), busca de nomes (retrieve), incio de escopo (open) e fim de escopo (close). d) Que tipos de erros so reportados durante a subfase de identificao? Resp.: Nomes no declarados e nomes declarados mais de uma vez no mesmo bloco. e) Em que consiste a subfase de verificao de tipos durante a fase de anlise de contexto? Resp.:Consistenaverificaodaadequaodostiposdeoperandosaostiposrequeridos pelos operadores utilizados. f) De que maneira esto relacionadas as subfases de identificao e de verificao de tipos? Resp.:Asubfasedeverificaodetiposdependedasubfasedeidentificao,poisatravs davinculaodonomecomarespectivadeclaraoqueseobtmotipodooperandoese pode efetuar a verificao da assinatura da operao. g) Que tipos de erros so reportados durante a subfase de verificao de tipos? Resp.: Tipos incompatveis para a operao em questo. GeraodeCdigoSegundoomodelodeanliseesntese,podemosconsiderarqueosmdulosiniciaisdocompilador(frontendmodules)traduzemumprogramafonteparaumarepresentaointermediria,enquantoseusmdulosfinais(backendmodules)geramocdigoobjetofinal. Emboraumprogramafontepossasertraduzidodiretamenteparaalinguagemobjeto,ousodeumarepresentaointermediriaindependentedemquinatemasseguintesvantagens: 1)Permitiroreaproveitamentodecdigo,facilitandoaportabilidadedeumcompiladorparadiversasplataformas,umavezqueapenasosmdulosfinaisprecisamserrefeitosacadanovaplataformadehardware. 2)Autilizaodeumotimizadordecdigoqueanaliseaspectosindependentementedemquinaemelhoreocdigointermedirioantesdeumatraduodefinitiva. Existemvriasformasderepresentaodecdigointermedirio;asduasmaiscomunsso:rvoresdesintaxeetriplasdecdigointermedirio(ouinstruesde3endereos). rvoresdeSintaxe Umarvoredesintaxemostraaestruturahierrquicadeumprogramafonte. Porexemplo,aatribuio:a=b*c+b*d poderiarepresentadagraficamentepor: Que,porsuavez,poderiateraseguinteimplementao:

TriplasdeCdigoIntermedirio Triplasdecdigointermediriososequnciasdecomandosdaforma:x:=yopz Nesteformato,oselementosx,yezpodemservariveisouconstantesdefinidaspeloprogramador,ouaindavariveistemporriasgeradaspelocompilador;oelementoopdefineooperador,isto,caracterizaaoperaoaserrealizada(aritmtico,relacionaletc.),enquantoo:=defineatribuio. Assim,retomandooexemploanterior(comandodeatribuio),teramosasseguintestriplas: #triplaoperando1 operador operando2 operando3 1t1*Bc 2t2UD 3t3*Bt2 4t4+t1t3 5a:=t4 TiposdeTriplas Bastantesemelhantessinstruesemlinguagemdemontagem,podemostertriplascomrtulossimblicosetriplasparacontroledefluxo.Vejaalgunsexemplosbastantecomuns: Naturezadaoperao ExemplodecdigoEquivalenteemtriplas Atribuies:x:=yopz 1.t1opyz 2.x:=t1 x:=y 1.t1Uy 2.x:=t1 x:=y 1.t1:=y 2.x:=t1 Desvioincondicional gotoL 1.Ljmp DesviocondicionalifxoprelythengotoL 1.Loprelxy Chamadaasubrotina sub(x1,x2,...,xn) 1.parmx1 2.parmx2 ...... n.parmxn n+1.callsubn PonteiroseEndereos x:=&y 1.t1addressy 2.x:=t1 x:=*y 1.t1lindy 2.x:=t1 *x:=y 1.t1:=y 2.xsindt1. ndicesemarraysx:=y[i] 1./* ...*avaliandicedey m.*/ .../* ...*calculaendereode ...*ynaposioi n.*/ p.tplindtn p+1.x:=tp x[i]:=y 1./* ...*avaliandicedex m.*/ .../* ...*calculaendereode ...*xnaposioi n.*/ p.tnsindy Oselementoslindesindrepresentam,respectivamente,asoperaesdeloadindirect(quecarregaocontedodeposiodememriadadaporesseendereo)estoreindirect(quearmazenanaposiodememriadadaporesseendereo). AGeraodeCdigo Umaformasimplesdegeraodecdigointermediriopodeserconstrudaapartirdomesmomecanismoutilizadoparaaverificaodetipos.Ouseja,umagramticadeatributospodeapresentartambmregrasquepermitamageraodecdigointermediriosimultaneamenteaaessemnticasdeverificaodetipo. Supondoumalinguagemhipotticaqualquer,cujagramticaabaixodefinisseasintaxeparaexpressesaritmticasecomandosdeatribuio: Aid:=E ETE' E'+TE'| TFT' T'*FT'| Fid|num_inteiro|num_real|(E) Podemosacrescentaraesparaageraodecdigo,taiscomo: QuandooanalisadorsintticoaplicarasregrasFidouFnum_intouFnro_real,podemossimplesmenteempilharnumapilhadecontroledeoperandos(PcO)oidentificador,nmerointeiroounmerorealcorrespondente(ouindicadordeondeseencontraesseoperando). QuandooanalisadorsintticoaplicarasregrasE'+TE'ouT'*FT',sabemosquesetratadeumaoperaodeadiooumultiplicao.Assim,senohouverproblemasdecompatibilidadeentreostipos,podemosgerarumcdigointermedirioutilizandoosdoisoperandosqueestiveremnotopodaPcOearmazenandooresultadoemumavariveltemporria,quedeverserdeixadanaPcOparaoperaesfuturas. Reescrevendoasregrasparaintroduziraesdegeraodecdigonecessrias,teramos: Aid:=E /*lembrarqualoelementodoladoesquerdodeumaatribuioeiniciarocontadordevariveistemporriasem1*/ lado_esquerdo