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