Está en la página 1de 33

Universidad del papaloapan

Alumno: Carlos Cruz Valadez Maestro: M.C. Pablo Rodrigo Daz Monterrosas

CAPITULO 4 Proyecto Final


Materia: Compiladores

Loma Bonita Oaxa a a !" de #ebrero del $%!&

ANLISIS SINTCTICO
'n lengua(e de programa i)n tiene reglas pre isas* las uales pres riben la estru tura sint+ ti a de los programas bien #ormados.

Por e(emplo* en C un programa est+ #un i)n un de de lara iones de e instru

ompuesto de #un iones* una iones* una instru i)n de iones de mediante

expresiones* , as su esi-amente. La sintaxis de las onstru lengua(e programa i)n puede espe i#i arse gram+ti as libres de ontexto. Las gram+ti as o#re en bene#i ios

onsiderables* tanto para los

dise.adores de lengua(es omo para los es ritores de ompiladores. 'na gram+ti a propor iona una espe i#i a i)n sint+ ti a pre isa* pero #+ il de entender* de un lengua(e de programa i)n. A partir de iertas lases de gram+ti as* podemos onstruir de manera autom+ti a un analizador sint+ ti o e#i iente /ue determine la estru tura sin t+ ti a de un programa #uente. La estru tura impartida a un lengua(e mediante una gram+ti a dise.ada en #orma apropiada es 0til para tradu ir los programas #uente en )digo ob(eto orre to* , para dete tar errores. 'na gram+ti a permite /ue un lengua(e e-olu ione o se desarrolle en #orma iterati-a* agregando nue-as nue-as tareas. 1stas nue-as m+s #a ilidad en una gramati al del lengua(e. onstru onstru /ue iones para realizar on siga la estru tura iones pueden integrarse

implementa i)n

4.1.1 LA FUNCION D L ANALI!ADO" SINTACTICO


1n nuestro modelo de ompilador* el analizador sint+ ti o obtiene una adena de to2ens del analizador l3xi o* , -eri#i a /ue la adena de nombres de los to2ens pueda generarse mediante la gram+ti a para el lengua(e #uente. 1speramos /ue el analizador sint+ ti o reporte

ual/uier error sin t+ ti o en #orma inteligible , /ue se re upere de los errores /ue o urren on #re uen ia para seguir pro esando el resto del programa. 1l analizador sint+ ti o onstru,e un +rbol de an+lisis sint+ ti o , lo pasa al resto del ompilador para /ue lo siga pro esando. De 4e 4o* el +rbol de an+lisis sint+ ti o no ne esita onstruirse en #orma expl ita* ,a /ue las a iones de omproba i)n , tradu i)n pueden inter alarse on el an+lisis sint+ ti o.

1xisten tres tipos generales de analizadores para las gram+ti as: uni-ersales* des endentes , as endentes. Los m3todos uni-ersales de an+lisis sint+ ti o algoritmo de omo el algoritmo de Co 2e56ounger57asami , el pueden analizar ual/uier gram+ti a. 8in 1arle,

embargo* estos m3todos generales son demasiado ine#i ientes omo para usarse en la produ pueden lasi#i arse i)n de ompiladores. ompiladores Los m3todos /ue se utilizan* por lo regular* en los nombres* los m3todos des endentes

omo des endentes o as endentes. 8eg0n sus onstru,en +rboles de an+lisis

sint+ ti o de la parte superior 9raz: a la parte in#erior 94o(as:* mientras /ue los m3todos as endentes empiezan de las 4o(as , a-anzan 4asta la raz. 1n ual/uier aso* la entrada al analizador se explora de iz/uierda a dere 4a* un smbolo a la -ez.

4.1.# " P" S NTACION D $"A%ATICAS


Las onstru de la produ oin ida iones /ue empiezan on palabras la-e omo ;4ile o int i)n i)n gramati al /ue debe apli arse para 4a er /ue on entraremos en las son mu, #+ iles de analizar* ,a /ue la palabra la-e gua la ele on la entrada. Por lo tanto* nos

expresiones* /ue representan un reto debido a la aso iati-idad , la pre eden ia de operadores. 1 representa a las expresiones /ue onsisten en t3rminos separados por los signos <* = representa a los t3rminos /ue onsisten en #a tores separados por los signos > * , ? representa a los #a tores /ue pueden ser expresiones entre par3ntesis o identi#i adores:

La siguiente -ariante no re ursi-a por la iz/uierda de la gram+ti a de expresiones se utilizar+ para el an+lisis sint+ ti o des endente:

La siguiente gram+ti a trata a los signos < , > de igual #orma* de manera /ue sir-e para ilustrar las t3 ni as para el mane(o de ambig@edades durante el an+lisis sint+ ti o:

4.1.& %AN 'O D LOS ""O" S SINTACTICOS

8i un

ompilador tu-iera /ue pro esar s)lo programas

orre tos* su

dise.o e implementa i)n se simpli#i ara en #orma onsiderable. 8e espera /ue un ompilador a,ude al programador a lo alizar , rastrear los errores /ue* de manera ine-itable* se in#iltran en los programas* a pesar de los me(ores es#uerzos del programador. Aun/ue parez a in reble* son po os los lengua(es /ue se dise.an teniendo en mente el mane(o de errores* aun uando 3stos son tan omunes. La ma,ora de las espe i#i a iones de los lengua(es de programa i)n no des riben la #orma en /ue un ompilador debe responder a los erroresA el mane(o de los mismos es responsabilidad del dise.ador del ompilador. La plani#i a i)n del mane(o de los errores desde el prin ipio puede simpli#i ar la estru tura de un su apa idad para mane(ar los errores. Los errores de programa i)n ni-eles distintos. Los errores sint+ ti os in lu,en la olo a i)n in orre ta de los signos de punto , oma* adem+s de lla-es adi ionales o #altan5tesA Los errores sem+nti os in lu,en los on#li tos de tipos entre los ual/uier operadores , los operando. Los errores l)gi os pueden ser omunes pueden o urrir en mu 4os ompilador , me(orar

osa* desde un razonamiento in orre to del programador en el uso 9en un programa en C: del operador de asigna i)n B* en -ez del operador de ompara i)n BB. La pre isi)n de los m3todos de an+lisis sint+ ti o permite dete tar los errores sint+ ti os posibleA es de ir* on mu 4a e#i ien ia. Varios m3todos de an+lisis uando el #lu(o de to2ens /ue pro-iene del on la sint+ ti o* omo los m3todos LL , LR* dete tan un error lo m+s pronto analizador l3xi o no puede seguirse analizando de a uerdo gram+ti a para el lengua(e.

4.1.4

ST"AT $IAS PA"A " CUP "A"S D LOS ""O" S

Aun/ue no 4a, una estrategia /ue 4a,a demostrado ser a eptable en #orma uni-ersal* algunos m3todos pueden apli arse en mu 4as situa iones. 1l m3todo m+s simple es /ue el analizador sint+ ti o termine on un mensa(e de error in#ormati-o uando dete te el primer error. A menudo se des ubren errores adi ionales si el analizador sin t+ ti o puede restaurarse as mismo* a un estado en el /ue pueda ontinuar el pro esamiento de la entrada* on esperanzas razonables de /ue un ma,or pro esamiento propor ione in#orma i)n 0til para el diagn)sti o. 8i los errores se apilan* es me(or para el molesta a-alan 4a de errores C#alsosD. "ec(peraci)n en *odo de p+nico Con este m3todo* al des ribir un error el analizador sint+ ti o des arta los smbolos de entrada* uno a la -ez* 4asta en ontrar un on(unto designado de to2ens de sin roniza i)n. Por lo general* los to2ens de sin roniza i)n son delimitadores omo el punto , oma o E* u,a #un i)n en el programa #uente es dise.ador del ompilador debe lara , sin ambig@edades. 1l ionar los to2ens de sele ompilador desistir despu3s de ex eder ierto lmite de errores* /ue produ ir una

sin roniza i)n apropiados para el lengua(e #uente. "ec(peraci)n a nivel de ,rase Al des ubrir un error* un analizador sint+ ti o puede realizar una orre i)n lo al sobre la entrada restanteA es de ir* puede sustituir un adena /ue le permita pre#i(o de la entrada restante por alguna

ontinuar. 'na

orre

i)n lo al

om0n es sustituir una

oma por un

punto , oma* eliminar un punto , oma extra.o o insertar un punto , oma #altan5te. La ele i)n de la orre i)n lo al se de(a al dise.ador orregir del ompilador. La sustitu i)n a ni-el de #rase se 4a utilizado en -arios ompiladores /ue reparan los errores* , a /ue puede ual/uier adena de entrada. 8u des-enta(a prin ipal es la di#i ultad i)n.

/ue tiene para arregl+rselas on situa iones en las /ue el error a tual o urre antes del punto de dete Al anti ipar los errores generen produ las a onstru partir Prod(cciones de errores omunes /ue podramos en ontrar* podemos on produ analizador aumentada iones /ue sint+ ti o por estas uando se iones de una err)neas. 'n aumentar la gram+ti a para el lengua(e* onstruido gram+ti a

iones de errores dete ta los errores anti ipados i)n de error durante el an+lisis sint+ ti o. Correcci)n -lo.al

utiliza una produ

Lo ideal sera /ue un ompilador 4i iera la menor antidad de ambios en el pro esamiento de una obtener una orre i)n adena de entrada in orre ta. Fa, ambios* para osto a ni-el global. 1stos algoritmos para elegir una se uen ia mnima de on el menor

m3todos son en general demasiado ostosos para implementarlos en t3rminos de tiempo , espa io* por lo ual estas t3 ni as s)lo son de inter3s te)ri o en estos momentos.

4 .& scrit(ra de (na -ra*+tica


Las gram+ti as son apa es de des ribir asi la ma,ora de la sintaxis

de los lengua(es de programa i)n. Por e(emplo* el re/uerimiento de /ue los identi#i adores deben de lararse antes de usarse* no puede des ribirse mediante una gram+ti a libre de ontexto . Por lo tanto * las se uen ias de los to2ens /ue a epta un analizador sint+ ti o #orman un super on(unto del lengua(e de programa i)nA las #ases siguientes del ompilador deben analizar la salida del analizador sin umpla on las reglas /ue no -eri#i a el t+ ti o* para asegurar /ue analizador sin t+ ti o.

4.&.1 Co*paraci)n entre an+lisis l/0ico y an+lisis sint+ctico


omo se 4ablo en la se i)n anterior todo puede ser des rito mediante una expresi)n regular , una gram+ti a* por tanto. Gpor/ue usar expresiones regulares para de#inir la sintaxis l3xi a de un lengua(eH. Por lo /ue la respuesta es /ue existen -arias razones: !: Al separar la estru tura sint+ ti a de un lengua(e en partes l3xi as , no l3xi as* se propor iona una manera on-eniente de olo ar en m)dulos la inter#az de usuario de un ompilador en dos omponentes de un tama.o mane(able $: Las reglas l3xi as de un lengua(e son on #re uen ia bastante simples. ": Por lo general* las expresiones regulares propor iona una nota i)n mas on isa , #+ il de entender para los to2ens. &: Pueden onstruirse analizadores l3xi os mas e#i ientes en #orma autom+ti a a partir de expresiones regulares* en ompara i)n on las gram+ti as arbitrarias.

4.&.1 Constr(cciones de len-(a2es 3(e no son li.res

de conte0to
Algunas onstru iones sint+ ti as /ue se en uentran en los

lengua(es de programa i)n ordinarios no pueden espe i#i arse s)lo mediante el uso de gram+ti as . 'n e(emplo para un lengua(e /ue abstrae el problema de omprobar /ue se de laren los identi#i adores antes de poderlos usar. Por lo /ue el lengua(e C , Ia-a no son libres de ontexto* , enton es la #ase de un analizador sem+nti o de laren antes de usarse. 6 un lengua(e /ue nos es independiente de de lara i)n de una #un i)n a tuales en uso de la #un i)n. 6 el siguiente e(emplo es para gram+ti a es para expresiones regulares sobre los smbolos a , b solamente* usando < en -es de J para una uni)n. oin ida ontexto*abstrae el problema de omprobar /ue el n0mero de par+metros #ormales en la on el numero de par+metros omprueba /ue los identi#i adores se

4.4 An+lisis sint+ctico descendente


1l an+lisis sint+ ti o des endente puede -erse onstruir un +rbol de an+lisis sint+ ti o para la partiendo desde la raz , sint+ ti o des endente omo el problema de adena de entrada*

reando los nodos del +rbol de an+lisis

omo la b0s/ueda de una deri-a i)n por a

iz/uierda para una adena de entrada. 1n ada paso de an+lisis sint+ ti o des endente* el problema la-e es de determinar la produ i)n /ue debe apli arse para un no i)n A* es resto terminal*por de ir A. 'na -es /ue se elige una produ

del pro eso de an+lisis sint+ ti o onsiste en Crela ionarD los smbolos terminales en el uerpo de la produ i)n on la adena de entrada. 1(emplo a ontinua i)n omo se muestra en la imagen A

4.4.1 An+lisis sint+ctico de descenso rec(rsivo

'n programa de an+lisis sint+ ti o de des enso re ursi-o onsiste en un on(unto de pro edimientos* uno para ada no terminal. La e(e u i)n empieza on el pro edimiento para el smbolo ini ial* /ue se detiene , anun ia /ue tu-o 3xito si el uerpo de su pro edimiento explora toda la adena ompleta de entrada. omo se muestra en la

#igura anterior*obs3r-ese /ue es un

)digo no determinista*1l

des enso re ursi-o gen eral puede re/uerir de un rastreo 4a ia atr+sA es de ir* tal -ez re/uiera explora iones repetidas sobre la entrada. 8in embargo* raras -e es se ne esita el rastreo 4a ia atr+s para analizar las onstru iones de un lengua(e de programa i)n* por lo /ue los on 3ste no se -en on #re uen ia. Kn luso analizadores sint+ ti os para situa iones omo el an+lisis sint+ ti o de un lengua(e natural* el rastreo 4a ia atr+s no es mu, e#i iente* por lo ual se pre#ieren m3todos tabulares omo el algoritmo de programa i)n din+mi o o el m3todo de 1arle,. 1(emplo de pasos de un +rbol analizado des endente.

4.4.# P"I% "O 4 SI$UI NT


La onstru i)n de los analizadores sint+ ti os des endentes , on la gram+ti a L. Durante el an+lisis sint+ ti o i)n as endentes es auxiliada por dos #un iones* PRKM1RO , 8KL'K1M=1* aso iadas des endente* PRKM1RO , 8KL'K1M=1 nos permiten elegir la produ /ue -amos a apli ar*

on base en el siguiente smbolo de entrada. omo to2ens de

Durante la re upera i)n de errores en modo de p+ni o* los on(untos de to2ens /ue produ e 8KL'K1M=1 pueden usarse sin roniza i)n.

4 .4 .& $ra*+ticas L L 51 6

Los analizadores sint+ ti os predi ati-os* es de ir* los analizadores sint+ ti os de des enso re ursi-o /ue no ne esitan rastreo 4a ia atr+s* pueden onstruirse para una lase de gram+ti as llamadas L L 9!:. La primera CL D en L L 9!: es para explorar la entrada de iz/uierda a dere 4a 9por le#t en ingl3s:* la segunda CL D para produ ir una deri-a i)n por la iz/uierda* , el C!D para usar un smbolo de entrada de anti ipa i)n en ada paso* para tomar las de isiones de a i)n Dia-ra*as de transici)n para anali7adores sint+cticos predictivos Los diagramas de transi i)n son 0tiles para -isualizar los analizadores sint+ ti os predi ti-os. Para onstruir el diagrama de transi i)n a partir de una gram+ti a* primero 4a, /ue eliminar la re ursi-idad por la iz/uierda , despu3s #a torizar la gram+ti a por la iz/uierda. 1nton es* para ada no terminal A* !: se rea un estado ini ial , un estado #inal. $: Para ada produ i)n A 5N O!O $ PPP O2* se rea una ruta desde el estado ini ial 4asta el estado #inal* on los #lan os eti/uetados omo O!* O $* . .* O2. 8i A 55EQ* la ruta es una lnea /ue se eti/ueta omo Q. del an+lisis sin t+ ti o.

Los analizadores sint+ ti os tienen un diagrama para

ada no

terminal. Las eti/uetas de las lneas pueden ser to2ens o no terminales. 'na transi i)n sobre un to2en 9terminal: signi#i a /ue tomamos esa transi i)n si ese to2en es el siguiente smbolo de entrada. 'na transi i)n sobre un no terminal A es una llamada al pro edimiento para A.

a ontinua i)n un e(emplo de la transi iones no terminales.

4.4.4 An+lisis sint+ctico predictivo no rec(rsivo


8e puede onstruir un analizador sint+ ti o predi ti-o no re ursi-o mediante el mantenimiento expl ito de una pila* en -ez de 4a erlo mediante llamadas re ursi-as impl itas. 1l analizador sint+ ti o imita una deri-a i)n por la iz/uierda. 8i w es la entrada /ue se 4a rela ionado 4asta a4ora* enton es la pila on tiene una se uen ia de smbolos gramati ales de tal #orma /ue:

1l analizador sint+ ti o entrada* una pila

ontrolado por una tabla * tiene un b0#er de ontiene una se uen ia de smbolos onstruida por un

/ue

gramati ales* una tabla de an+lisis sint+ ti o Algoritmo *, un #lu(o de salida . 1l

omportamiento del analizador

sint+ ti o puede des ribirse en t3rminos de sus on#igura iones* /ue propor ionan el on tenido de la pila , el resto de la entrada. 1(emplo de un modelo de un analizador sint+ ti o predi ti-o.

4.4.1 "ec(peraci)n de errores en el an+lisis sint+ctico predictivo


1s ta dis usi)n sobre la re upera i)n de errores se re#iere a la pila de un analizador sint+ ti o predi ti-o sint+ ti o espera rela ionar tambi3n pueden usarse ontrolado por una tabla* ,a /ue 4a e expl itas los terminales , no terminales /ue el analizador on el resto de la entradaA las t3 ni as on el an+lisis sint+ ti o de des enso

re ursi-o *Durante el an+lisis sint+ ti o predi ti-o* un error se dete ta uando el terminal en la parte superior de la pila no oin ide on el siguiente smbolo de entrada* o uando el no terminal A se en uentra en la parte superior de la pila* a es el siguiente smbolo de entrada , M RA * aS es error 9es de ir* la entrada en la tabla de an+lisis sint+ ti o est+ -a a :.

%odo p+nico La re upera i)n de errores en modo de p+ni o se basa en la idea de

omitir smbolos en la entrada 4asta /ue aparez a un to2en en un on(unto sele ionado de to2ens de sin roniza i)n. su e#e ti-idad i)n del on(unto de sin roniza i)n. La dis usi)n depende la ele

anterior sobre la re upera i)n en modo de p+ni o no se.ala el punto importante rela ionado on los mensa(es de error. 1l dise.ador del ompilador debe propor ionar mensa(es de error in#ormati-os /ue no s)lo des riban el error* sino /ue tambi3n llamen la aten i)n 4a ia el lugar en donde se des ubri) el error. "ec(peraci)n a nivel de ,rase La re upera i)n de errores a ni-el de #rase se implementa llenando las entradas en blan o en la tabla de an+lisis sint+ ti o predi ti-o on apuntadores a rutinas de error. 1stas rutinas pueden modi#i ar* insertar o eliminar smbolos en la entrada , emitir mensa(es de error apropiados. =ambi3n pueden sa ar de la pila. L a altera i)n de los smbolos de la pila o el pro eso de meter nue-os smbolos a la pila es uestionable por dos razones. 1n primer lugar* los pasos /ue realiza el analizador sint+ ti o podran enton es no orresponder a la deri-a i)n de segundo lugar* debemos ninguna palabra en el lengua(e. 1n /ue ual/uier a

asegurarnos de /ue no 4a,a posibilidad de un i lo in#inito. Veri#i ar i)n de re upera i)n o asione en un momento dado /ue se onsuma un smbolo de entrad a 9o /ue se reduz a la pila si se 4a llegado al #in de la entrada: es una buena #orma de protegerse ontra tales i los.

4.1 An+lisis sint+ctico ascendente


'n an+lisis sint+ ti o as endente orresponde a la onstru i)n de un

+rbol de an+lisis sint+ ti o para una adena de entrada /ue empieza en las 4o(as 9la parte in#erior: , a-anza 4a ia la raz 9la parte superior:. 1s on-eniente des ribir el an+lisis sint+ ti o omo el i)n pro eso de onstru i)n de +rboles de an+lisis sint+ ti o* aun/ue de una tradu

4e 4o un #ront5end de usuario podra realizar

dire tamente* sin ne esidad de onstruir un +rbol expl ito .

4 .1.1 "ed(cciones
Podemos onsiderar el an+lisis sint+ ti o as endente omo el pro eso de Credu irD una adena w al smbolo ini ial de la gram+ti a. 1n ada paso de redu oin ide on el i)n* se sustitu,e una sub adena espe #i a /ue uerpo de una produ i)n por el no terminal /ue se i)n. Las de isiones la-e

en uentra en el en abezado de esa produ , /u3 produ

durante el an+lisis sint+ ti o as endente son a er a de u+ndo redu ir i)n apli ar* a medida /ue pro ede el an+lisis sint+ ti o.

4.1.# Poda de *an-os


Duran te u na explora i)n de iz/uierda a dere 4a de la entrada* el an+lisis sint+ ti o as endente onstru,e una deri-a i)n por la dere 4a en #orma in-ersa. De manera in#ormal* un Cmango D es una sub adena /ue oin ide on el uerpo de una produ i)n* , u,a redu i)n representa un paso a lo largo del in-erso de una deri-a i)n por la

dere 4a. e(emplo.

4.1.& An+lisis sint+ctico de despla7a*iento 8red(cci)n


1l an+lisis sint+ ti o de desplazamiento5redu an+lisis sint+ ti o as endente* en la i)n es una #orma de ontiene smbolos

ual una pila

gramati ales , un b0#er de entrada ontiene el resto de la adena /ue se -a a analizar. Como -eremos* el mango siempre apare e en la parte superior de la pila* (usto antes de identi#i arla omo el mango. 'tilizamos el T para mar ar la parte in#erior de la pila , tambi3n el extremo dere 4o de la entrada. Por a la dere 4a* en -ez de a la iz/uierda sint+ ti o des endente. Al prin ipio la pila est+ -a a* , la adena ; est+ en la entrada* omo se muestra a ontinua i)n: Pila ; entrada T de la adena de on-en i)n* al 4ablar sobre el omo 4i imos para el an+lisis an+lisis sint+ ti o as endente* mostramos la parte superior de la pila

Durante una explora i)n de iz/uierda a dere 4a entrada* el analizador sin t+ ti o desplaza

ero o m+s smbolos de

entrada , los mete en la pila* 4asta /ue est3 listo para redu ir. una adena U de smbolos gramati ales en la parte superior de la pila. 1l analizador sint+ ti o repite este i lo 4asta /ue 4a,a dete tado un

error* o4 asta /ue la pila ontenga el smbolo ini ial , la entrada est3 -a a: PKLA T8 1M=RADA T

4 .1 .4 Con, lictos d(rante el an+lisis sint+ctico de despla7a*iento 8 red(cci)n


1xisten gram+ti as libres de analizador sint+ ti o de ontexto para las uales no se puede i)n. Cada para una i)n utilizar el an+lisis sint+ ti o de desplazamiento5redu desplazamiento5redu

gram+ti a de este tipo puede llegar a una on#igura i)n en la ual el analizador sint+ ti o* ono iendo el ontenido ompleto de la pila , el siguiente smbolo de entrada* no puede de idir si -a a desplazar o a redu ir 9un on#li to de desplazamientoVredu realizar 9un om0n para los i)n :* o no puede de idir /u3 redu i)n Vredu i)n :.Otra iones on#li to de redu on#igura i)n

on#li tos o urre

uando sabemos /ue tenemos un i)n debe usarse en

mango* pero el ontenido de la pila , el siguiente smbolo de entrada no son su#i ientes para determinar /u3 produ una redu i)n.

4.9 Introd(cci)n al an+lisis sint+ctico L": SL" 5L" si*ple6


1 l tipo m+s #re uente de analizador sint+ ti o as endentes en la

a tualidad se basa en un on epto ono ido omo an+lisis sint+ ti o LR9# :A la CL D indi a la explora i)n de iz/uierda a dere 4a de la entrad a* la CR D indi a la onstru i)n de una deri-a i)n por la dere 4a a la in-ersa* , la A para el n0mero de smbolos de entrada de prean+lisis /ue se utilizan al 4a er : de isiones del an+lisis sin t+ ti o. Los asos 2B% o 2 B ! son de inter3s pr+ ti o* por lo /ue a/u s)lo onsideraremos los analizadores sint+ ti os L R on 2W!. Cuando se omite 9X:* se asume /ue A es !.

4 .9 .1 ;Por3(/ anali7adores sint+cticos L" <


Los analizadores sint+ ti os LR son ontrolados por tablas* en #orma mu, pare ida a los analizadores sin t+ ti os LL no re ursi-os De manera intuiti-a* para /ue una gram+ti a se a LR* basta on /ue un analizador sint+ ti o de desplazamiento5redu i)n de iz/uierda a dere 4a pueda re ono er mangos de las #ormas de #rases dere 4as* uando 3stas apare en en la parte superior de la pila. 1l an+lisis sint+ ti o LR es atra ti-o por una -ariedad de razones: P Pueden para las onstruirse analizadores sint+ ti os LR para re ono er iones de lengua(es de programa i)n ontexto . uales puedan es ribirse gram+ti as libres de onstru iones pr+ ti amente todas las onstru 1xisten gram+ti as libres de lengua(es de programa i)n.

ontexto /ue no son L R * pero por lo om0n es e los

general se pueden e-itar para las

4 .9.# Los ele*entos y el a(t)*ata L" 5O 6


'n analizador sint+ ti o LR realiza las de isiones de desplazamiento5 redu i)n mediante el mantenimiento de estados* para lle-ar el registro de la ubi a i)n /ue tenemos en un an+lisis sint+ ti o. Los estad os representan on(untos de CelementosD . 'n elemento LR 9 % : 9 elemento * para abre-iar: de una gram+ti a L es una produ A 5N O 6 Y produ e los siguientes uatro elementos: i)n de i)n L on un punto en ierta posi i)n del uerpo. Por ende* la produ

"epresentaci)n de con2(ntos de ele*entos


'n generador de an+lisis sint+ ti o /ue produ e un analizador des endente tal -ez re/uiera representar elementos , elementos en una #orma on-eniente. 'n on(untos de puede elemento

representarse mediante un par de enteros* el primero de los uales es el n0mero de una de las produ iones de la gram+ti a sub,a ente* , el segundo de los uales es la posi i)n del punto .

Uso del a(t)*ata L"5O 6


La idea onstru entral del an+lisis sin t+ ti o CLR simpleD * o 8LR* es la i)n el aut)mata LR 9%: a partir de la gram+ti a. Los estados

de este aut)mata son los LR9%: an)ni a* , las tradu

on(untos de elementos de la

ole

i)n

iones las propor iona la #un i)n ir Z A .

4 .9.& l al-orit*o de an+lisis sint+ctico L"


1ste diagrama onsiste en una entrada* una salida* una pila* un programa ontrolador , una tabla de an+lisis sint+ ti o /ue tiene dos partes 9ACCKOM , el ir Z A : . 1 l programa ontrolador es igual para todos los analizadores sint+ ti os LRA s)lo la tabla de an+lisis sin t+ ti o ambia de un analizador sint+ ti o a otro. 1l programa de i)n an+lisis sint+ ti o * ara teres de un b0#er de entrada * uno a la -ez. 1n donde un analizador sin t+ ti o de desplazamiento5redu estado. Cada desplazara a un smbolo* un analizador sin t+ ti o LR desplaza a un estado sintetiza la in#orma i)n ontenida en la pila* de ba(o de 3ste.

Con,i-(raciones del anali7ador sint+ctico L"


Para des ribir el omportamiento de un analizador sint+ ti o LR * es ompleto del 0til tener una nota i)n /ue represente el estado primer omponente es el

analizador sin t+ ti o: su pila , el resto de la entrada. en donde el ontenido de la pila 9parte superior a la dere 4a: , el segundo omponen te es el resto de la entrada. 1sta

on#igura i)n representa la #orma de #rase dere 4a: b+si amente en la misma #orma en /ue lo 4ara un analizador sint+ ti o de desplazamiento redu i)nA la 0ni a di#eren ia ontiene estados a es /ue en -ez de smbolos gramati ales* la pila

partir de los uales pueden re uperarse los smbolos gramati ales.

4 .9 .4 Constr(cci)n de ta.las de an+lisis sint+ctico SL"


1l m3todo 8LR para onstruir tablas de an+lisis sint+ ti o es un buen punto ini ial para estudiar el an+lisis sint+ ti o LR . Mos re#eriremos a la tabla de an+lisis sint+ ti o onstruida por este m3todo omo una tabla 8LR* , aun analizador sint+ ti o LR /ue utiliza una tabla de an+lisis sint+ ti o 8LR omo un analizador sint+ ti o 8LR . L os otros dos m3todos aumentan el m3todo 8LR on in#orma i)n de anti ipa i)n.

4 .9 .1 Pre,i2os via.les
1l aut)mata LR 9%: para una gram+ti a ara teriza las adenas de smbolos gram+ti a es /ue pueden apare er en la pila de un analizador sint+ ti o de desplazamiento5redu 1l i)n para la gram+ti a. on ten ido de la pila debe ser un pre#i(o de una #orma de #rase

dere 4a. 8i la pila ontiene a a , el resto de la entrada es x*

4 .= Anali7adores sint+cticos L" *+s poderosos


1n esta se i)n -amos a extender las t3 ni as anteriores de an+lisis sint+ ti o LR * para usar un smbolo de prean+lisis en la entrada. Fa, dos m3todos distintos: ! . 1l m3todo CLR an)ni oD * o simplemente CLR D * /ue utiliza al

m+ximo el 9los: smbolo9s: de prean+lisis. 1ste m3todo utiliza un

extenso on(unto de elementos* ono idos omo elementos LR 9 ! :. $. 1l m3todo CLR on smbolo de prean+lisisD o CLALR 9loo2a4ead LR :D * /ue se basa en los on(untos de elementos LR 9% :* , tiene mu 4o menos estados /ue los analizadores sint+ ti os omunes* basados en los elementos LR9!:. 8i introdu imos on uidad o le turas anti ipadas en los elementos LR 9%:* podemos mane(ar mu 4as gram+ti as m+s on el m3todo LALR /ue on el 8LR * , onstruir ta las de an+lisis sint+ ti o /ue no sean m+s grandes /ue las tablas 8LR. LALR es el m3todo de ele i)n en la ma,ora de las situa iones.

4 .= .1 le*entos L"516 can)nicos


1s posible transportar m+s in#orma i)n en el estado * /ue nos permita des artar algunas de estas redu iones in-+lidas mediante A 55E a . ada ual on exa titud /u3 Al di-idir estados seg0n sea ne esario* podemos 4a er /ue estado de un analizador sint+ ti o LR indi/ue 4a,a una posible redu i)n a A . smbolos de entrada pueden ir despu3s de un mango a para el

4 .= .# Constr(cci)n de con2(ntos de ele*entos L" 51 6


1l m3todo para an)ni a de onstruir la ole i)n de on(untos de elementos LR onstruir la ole i)n

9!: -+lidos es en esen ia el mismo /ue para

on(untos de elementos LR 9%:. 8)lo ne esitamos

modi#i ar los dos pro edimientos C1RRAD'RA e ir Z A .

4 .= .& Ta.las de an+lisis sint+ctico L" 516 can)nico


A4ora propor ionaremos las reglas para onstruir las #un iones ACCKOM e ir Z A de L R 9! :* 1stas #un iones se representan mediante una tabla* omo antes. La 0ni a di#eren ia est+ en los -alores de las entradas. Algoritmo &.[\ : Constru an)ni o. 1M=RADA : 'na gram+ti a aumentada L]. 8ALKDA : Las #un iones ACCKOM e ir Z A de la tabla de an+lisis sint+ ti o LR M3todo: !.Construir C]B^K%*K!*...Kn_* la LR9!: para L]. $.1l estado i* del analizador sint+ ti o se onstru,e a partir de K i. ole i)n de on(untos de elementos an)ni o para L]. i)n de tablas de an+lisis sint+ ti o LR

".las transi iones irZA para el estado i se onstru,en para todos los no terminales A usando la regla: 8i irZA9Ki*A:BKj* enton es irZARi*ASBj. &.=odas las entradas no de#inidas por las reglas 9$:* 9": se -uel-en CerrorD. [.1l estado ini ial del analizador sinta ti o es el /ue se onstru,e a partir del on(unto de elementos /ue ontienenR8]555E.8*TS.

4 .= .4 Constr(cci)n de ta.las de an+lisis sint+ctico LAL"


1ste m3todo se utiliza on #re uen ia en la pr+ ti a* , a /ue las tablas /ue se obtienen son sint+ ti as una onsiderablemente menores /ue las tablas LR onstru iones an)ni as* , a pesar de ello la ma,ora de las

omunes de los lengua(es de programa i)n pueden

expresarse en #orma on-eniente mediante una gram+ti a LALR . Para ompara i)n del tama.o de los analizadores sint+ ti os* las tablas 8LR , LA LR para una gram+ti a siempre tienen el mismo n0mero de estados* , este n0mero onsiste* por lo general* en ientos de estados* para un lengua(e omo C . La tabla LR an)ni a tendra* por lo general* -arios miles de esta dos para el lengua(e on el mismo tama.o. Por ende* es mu 4o m+s #+ il , e on)mi o tablas LR an)ni as. onstruir tablas 8LR , LALR /ue las

4 .= .1 Constr(cci)n e,iciente de ta.las de an+lisis sint+ctico LAL"


F a, -arias modi#i a iones /ue podemos realizar al Algoritmo & .[ `

para e-itar

onstruir la

o le

i)n

ompleta de

on (untos de

elementos LR 9!: * en el pro eso de sint+ ti o L A L R 9l:. 1n primer lugar* podemos

rear una tabla de an+lisis ual/uier on(unto de

representar

elementos K LR 9%: o LR 9!: mediante su

oraz)n 92ernel:A es de ir*

mediante a/uellos elementos /ue sean el elemento ini ial *o /ue tengan el punto en alg0n lugar /ue no se al prin ipio del uerpo de la produ i)n. orazones LALR9!:* podemos generar la tabla de 8i tenemos los C1RRAD'RA. Algoritmo &.\$: Determina i)n de los smbolos de anti ipa i)n 1M=RADA: el oraz)n 7 de un on(unto de elementos LR9%: K , un smbolo gramati al x. 8ALKDA: los smbolos de anti ipa i)n generados en #orma espont+nea por los elementos en K*para los elementos de oraz)n en irZA9K*O: , los elementos en K.

an+lisis sint+ ti o LALR9!: errando ada orazon*usando una #un i)n

4 .= .9 Co*pactaci)n de las ta.las de an+lisis sint+ctico L"

'na gram+ti a de lengua(e de programa i)n om0n* on una antidad de [% a !%% terminales , !%% produ a iones* puede tener una tabla de an+lisis sint+ ti o LALR on -arios ientos de estados. La #un i)n de i)n podra #+ ilmente tener $%%%% entradas* ada una re/uiriendo odi#i arla. 1n los dispositi-os pe/ue.os* odi#i a i)n m+s e#i iente /ue un por lo menos a bits para

puede ser importan te tener una

arreglo bidimensional. 1n bre-e men ionaremos algunas t3 ni as /ue se 4an utilizado para omprimir los ampos ACCKOM e ir Z A de una tabla de an+lisis sint+ ti o LR. 'na t3 ni a 0til para ompa tar el ampo de a por lo general* mu 4as #ilas de la tabla de a a i)n es re ono er /ue* iones son id3nti as. Por

e(emplo* en la #igura & .& $ los estados % , " tienen entradas de i)n id3nti as* al igual /ue los estados $ , \ . Por lo tanto* podemos a4orrar una antidad de espa io onsiderable* on mu, po o osto en rela i)n on el tiempo* si reamos un apuntador para ada estado en un arreglo unidimensional. Los apuntadores para los esta dos on las mismas a desde iones apuntan a la misma ubi a i)n. P ara a eder a la in#orma i)n desde este arreglo* asignamos a ada terminal un n0mero ero 4asta uno menos /ue el n0mero de terminales* , i)n de an+lisis utilizamos este en tero omo un desplazamiento a partir del -alor del apuntador para ada estado. 1n un estado dado* la a sint+ ti o para la G53sima terminal se en all+ del -alor del apuntador para e se estado. ontar+ i ubi a iones m+s

4.> Uso de -ra*+ticas a*.i-(as


1s un 4e 4o /ue ninguna gram+ti a ambigua es LR , * por ende* no se en uentra en ninguna de las lases de gram+ti as /ue 4emos -isto en

las dos se

iones anteriores *Para las

onstru

iones de lengua(es

omo las expresiones* una gram+ti a ambigua propor iona una espe i#i a i)n m+s aislar las onstru la optimiza i)n de podemos orta , natural /ue ual/uier gram+ti a no ambigua e/ui-alente. Otro uso de las gram+ti as ambiguas es el de iones sint+ ti as /ue o urren on #re uen ia para asos espe iales. Con una gram+ti a ambigua* las onstru iones de asos espe iales* iones a la gram+ti a.

espe i#i ar

agregando on uidad o nue-as produ

4.>.# La a*.i-?edad del @else col-anteA


=radu iendo esto de -uelta a la terminologa i,5tBen5else* si tenemos a: i, expr tBen instr en la pila , a else omo el primer smbolo de entrada* Gdebemos desplazar el else 4a ia la pila 9es de ir* desplazara e: o redu ir i, exp tBen instr 9es de ir* redu ir mediante 8 5>i 8 :. La respuesta es /ue debemos desplazar el else * , a /ue est+ Caso iadoD /ue representa a e l se * s)lo puede #ormar parte del on el tBen uerpo /ue anterior. 1n la terminologa de la gram+ti a 9&.\ b :* la e en la entrada* empieza on la i 8 /ue est+ a4ora en la parte superior del a pila. 8i lo /ue sigue despu3s de e en la entrada no puede analizarse omo una [* para ompletar el uerpo i8 e 8 * en ton es podemos demostrar /ue no 4a, otro an+lisis sint+ ti o posible.

4 .> .& "ec(peraci)n de errores en el an+lisis sint+ctico L "


'n analizador sint+ ti o LR dete tar+ un error al onsultar la tabla de a iones de an+lisis sint+ ti o , en ontrar una entrada de error. Los

errores nun a se dete tan al onsultar la tabla de ir Z A . 'n analizador sint+ ti o LR anun iar+ un error tan pronto omo no 4a,a una an)ni o no ontinua i)n -+lida para la por i)n de la entrada /ue se 4a explorado 4asta ese momento. 'n analizador sin t+ ti o L R realizara ni si/uiera un a so la redu redu i)n antes de anun iar un error.

Los analizadores sint+ ti os 8L R , LA L R pueden realizar -arias i)n es antes de anun iar un error* pero nun a desplazar+n un smbolo de entrada err)neo 4a ia la pila.

4.C $eneradores de anali7adores sint+cticos


'tilizaremos el generador de analizadores sint+ ti os LALR de nombre 6a omo la base de nuestra expli a i)n * , a /ue implementa iones anteriores* , signi#i a C,et anot4er ompiler5 ompilerD9o tro mu 4os de los on eptos /ue -imos en las dos se se emplea mu 4o. 6a

ompilador5de ompiladores m+s:* lo ual re#le(a la popularidad de los generadores de analizadores sin t+ ti os a prin ipios de la d3 ada de !`b%* uando 8. C. Io4nson re) la primera -ersi)n de 6a . 1ste generador est+ disponible en #orma de omando en el sistema en ' M KO * , se 4a utilizado para a,udar a implementar mu 4os ompiladores de produ i)n.

4 .C .1 l -enerador de anali7ador es sint+cticos 4acc


Puede onstruirse un tradu tor mediante el uso de 6a de la #orma

/ue se ilustra en la #igura & .[b. 1n primer lugar se prepara un ar 4i-o* por de ir tradu ir ., * el ual ontiene u na espe i#i a i)n de 6a del tradu tor.

La parte de las r(tinas de soporte en C La ter era parte de una espe i#i a i)n de 6a onsiste en las rutinas de soporte en C . Debe propor ionarse un analizador l3xi o mediante el nombre , lex 9 : . 1l analizador l3xi o , , lex O produ e to2ens /ue onsisten en un nombre de to2en , su -alor de atributo aso iado. 8i se de-uel-e el nombre de un to2en debe de lararse en la primera se -alor del atributo aso iad o omo DKLK=O* el nombre del to2en i)n de la espe i#i a i)n de 6a . . 1l omuni a al analizador

on un to2en se

sint+ ti o * a tra-3s de una -ariable , ,l-al de#inida por 6 a

4 .C .# Uso de 4acc con -ra*+ticas a*.i-(as

A 4ora -amos a modi#i ar la espe i#i a i)n de 6a la -amos a permitir /ue la la espe i#i a i)n de 6a LALR generar+ se generan.

* de tal #orma /ue

al uladora de es ritorio resultante sea m+s 0til. 1n primer lugar* al uladora de es ritorio e-al0e una

se uen ia de expresiones* de una a una lnea. Como la gram+ti a en en la #igura &.[` es ambigua* el algoritmo iones de an+lisis sint+ ti o . 6a iones de an+lisis sint+ ti o /ue on#li tos de a

reporta el n0mero de on#li tos de a

4 .C .& Creaci)n de anali7ador es l/0icos de 4acc con Le0


Lex se dise.) para produ ir analizadores l3xi os /ue pudieran utilizarse on 6a . La bibliote a !! de Lex propor iona un programa re/uiere para su ontrolador llamado , , lex9 : * el nombre /ue 6a

analizador l3xi o. 8i se utiliza Lex para produ ir el analizador l3xi o* su stituimos la rutina , , lex9 : en la ter era parte de la espe i#i a i)n de 6a on la siguiente instru i)n. c in lude d lex. ,,. d , 4a emos /ue ada a 6a . Al usar la instru lex tiene a . tab. d e 6a i)n de Lex de-uel-a un terminal ono ido a para los to2ens* ,a /ue el i)n i)n cin lude d lex. , ,. d * el programa , ,

eso a los nombres de 6a .

ar 4i-o de salida de Lex se ompila omo parte del ar 4i-o de salida ,

4 .C .4 "ec(peraci)n de errores en 4acc


1n 6a * la re upera i)n d e errores utiliza una #orma de produ iones de error. 1n primer lugar* el usuario de ide /u3 no terminales CimportantesD tendr+n la re upera i)n de errores aso iado on ellas.

Las ele

iones tpi as son ierto sub on(unto de los no terminales /ue iones* blo/ues , #un ione s.

generan expresiones* instru & .!% Resumen del aptulo &

Analizadores sint+ ti os. 'n analizador sint+ ti o re ibe omo entrada to2ens del analizador l3xi o* , trata los nombres de los to2ens omo smbolos terminales de una gram+ti a libre de ontexto. Lram+ti as libres de ontexto. 1s a/uella /ue espe i#i a un on(unto de smbolos terminales9entradas:* , otro on(unto de no terminales.

Concl(siones.
1n este urso aprendimos a er a de /ue es un ompilador* uales son las etapas para 4a er un buen ompilador* as omo -imos e(emplos de en )digos donde implementaban on lusiones de#inimos a un omo desarrollar uno. Por lo /ue ompilador omo un programa

in#orm+ti o /ue se en arga de de traducir el cdigo fuente de una aplicacin que este en desarrollo, es decir convierte un programa hecho en lenguaje de programacin de alto nivel a un lenguaje de mquina , el cual es conocido como de bajo nivel, de tal forma que

sea ms entendible y mucho ms fcil de procesar en el equipo en el que se esta ejecutando. De igual manera un traductor es el que toma como entrada un texto escrito y da como salida otro texto en un lenguaje llamado objeto. De esta forma aprendimos un poco de como hacer un compilador. Por lo consiguiente agrego que no es fcil hacer un compilador y no cualquiera podra hacer uno. Pero no se sientan mal no significa que no eres buen o buena programando si no que no es muy fcil as que nimos.