Documente Academic
Documente Profesional
Documente Cultură
ANALIZADORES ASCENDENTES
CERTIFICA:
Amispadresporensearmequeelesfuerzoeselcaminoparalogrartusobjetivos.
Amistos,porsuayudayapoyoincondicional.
ADani,pornodejardecreerenm.
AKenny,porsucompaa.
TABLADECONTENIDO
1. I N T R O D U C C I N ..........................................................................................1
1.1. O B J E T I V O S .................................................................................................1
1.2. M O T I V A C I O N E S . ..........................................................................................2
1.3. E S T A D O D E L A R T E ......................................................................................2
1.4. C L A S I F I C A C I N D E L A M E M O R I A ..................................................................6
2. P L A N I F I C A C I N ..........................................................................................7
2.1. P L A N I F I C A C I N I N I C I A L ..............................................................................7
2.2. P L A N I F I C A C I N F I N A L . ................................................................................9
2.3. E S T U D I O D E V I A B I L I D A D ...........................................................................12
3. U N C O M P I L A D O R .....................................................................................13
3.1. A N A L I Z A D O R L X I C O ................................................................................14
3.2. A N A L I Z A D O R S I N T C T I C O .........................................................................16
3.2.1. G R A M T I C A S L I B R E S D E C O N T E X T O .................................................16
3.2.2. D E R I V A C I N ...................................................................................17
3.2.3. R B O L E S S I N T C T I C O S ....................................................................18
3.2.4. M T O D O S D E A N L I S I S S I N T A C T I C O S . ...............................................19
3.2.5. A N L S I S I S A S C E N D E N T E ..................................................................23
3.2.5.1. LR ( K ).................................................................................25
3.2.5.1.1.
A N L I S I S LR (0).......................................................27
3.2.5.1.2.
T A B L A D E A N L I S I S A S C E N D E N T E ...............................31
3.2.5.1.3.
I N I C I O D E A N L I S I S . ...................................................32
3.2.5.1.4.
A N L I S I S LR (1).......................................................36
3.2.5.1.5.
A N L I S I S LALR (1). ..................................................43
3.3. A N A L I Z A D O R S E M N T I C O . .........................................................................46
3.3.1. G R A M T I C A D E A T R I B U T O S ..............................................................47
3.3.2. T I P O S D E A T R I B U T O S . ......................................................................48
3.4. G E N E R A D O R D E C D I G O ............................................................................50
VIIITABLADECONTENIDO
4. D E S A R R O L L O ..........................................................................................51
4.1. L X I C O . ....................................................................................................51
4.2. S I N T C T I C O . .............................................................................................51
4.2.1.1. C R E A R P R O D U C C I N I N I C I A L .................................................54
4.2.1.2. C R E A R C L A U S U R A .................................................................54
4.2.1.3. C R E A R E S T A D O . ....................................................................56
4.2.1.4. C R E A R T R A N S I C I O N E S . ..........................................................57
4.2.1.5. V E R E S T A D O S . ......................................................................58
4.3. A A D I R A C C I O N E S S E M N T I C A S . ................................................................68
4.3.1. F U N C I N D E R E D U C C I N . .................................................................70
4.3.2. A T R I B U T O S H E R E D A D O S ..................................................................75
5. C O N C L U S I O N E S . .......................................................................................79
6. A N E X O ...................................................................................................81
6.1. E X P R E S I O N E S R E G U L A R E S .........................................................................81
6.2. C L C U L O D E A N U L A B L E S ...........................................................................82
6.3. C L C U L O D E P R I M E R O S .............................................................................83
6.4. E J E M P L O S D E L A N A L I Z A D O R A S C E N D E N T E LALR (1). .................................84
B I B L I O G R A F A ........................................................................................89
N D I C E ...................................................................................................91
TABLADEILUSTRACIONES
F I G U R A 2.1 P L A N I F I C A C I N I N I C I A L Y F I N A L ....................................................................................11
F I G U R A 3.1 D E F I N I C I N D E U N C O M P I L A D O R ...................................................................................13
F I G U R A 3.2 F A S E S D E U N C O M P I L A D O R ...............................................................................................14
F I G U R A 3.1.1 A N A L I Z A D O R L X I C O ...................................................................................................15
F I G U R A 3.2.1 A N A L I Z A D O R S I N T C T I C O ............................................................................................16
F I G U R A 3.2.2 R B O L S I N T C T I C O .......................................................................................................19
F I G U R A 3.2.3 A N L I S I S D E S C E N D E N T E ( D E R I V A C I N P O R L A I Z Q U I E R D A ).................................21
F I G U R A 3.2.4 A N L I S I S A S C E N D E N T E (D E R I V A C I N P O R L A D E R E C H A )......................................23
F I G U R A 3.2.5 G R A M T I C A LR ( 0 ).......................................................................................................27
F I G U R A 3.2.6 A U T M A T A LR ( 0)........................................................................................................30
F I G U R A 3.2.7 E S T R U C T U R A D E L A N A L I Z A D O R S I N T C T I C O ............................................................32
F I G U R A 3.2.8 T A B L A D E A N L I S I S LR ( 0 ).........................................................................................33
F I G U R A 3.2.9 A N A L I Z A D O R L R ( 0).....................................................................................................35
F I G U R A 3.2 10 G R A M T I C A P A R A M O S T R A R T O D O S L O S M T O D O S ...............................................35
F I G U R A 3.2.11 A U T M A T A LR ( 0 ) C O N C O N F L I C T O D E S P L A Z A R R E D U C I R ................................36
F I G U R A 3.2.12 A U T M A T A LR ( 1 ).....................................................................................................40
F I G U R A 3.2.13 T A B L A D E A N L I S I S D E L A U T M A T A LR ( 1).........................................................41
F I G U R A 3.2.14 A N A L I Z A D O R LR ( 1)..................................................................................................42
F I G U R A 3.2.15 A U T M A T A LAL R ( 1)................................................................................................44
F I G U R A 3.2.16 T A B L A D E A N L I S I S D E L A U T M A T A L ALR ( 1)...................................................45
F I G U R A 3.2.17 A N A L I Z A D O R L ALR (1).............................................................................................45
F I G U R A 3.3.1 A N A L I Z A D O R S E M N T I C O .............................................................................................46
F I G U R A 3.3.2 A T R I B U T O S S I N T E T I Z A D O S ..........................................................................................48
F I G U R A 3.3.3 A T R I B U T O S H E R E D A D O S ...............................................................................................49
X T A B L A D E I L U S T R A C I O N E S
F I G U R A 4.2.1 E S T A D O S D E L A U T M A T A LR ( 1 )...............................................................................60
F I G U R A 4.2 2 A U T M A T A LR ( 1) E N COSE L....................................................................................61
F I G U R A 4.2.3 E S T A D O S LALR ( 1)......................................................................................................63
F I G U R A 4.2.4 A U T M A T A L ALR ( 1) E N COSEL..............................................................................64
F I G U R A 4.2.5 V E C T O R D E L I S T A S D E A N L I S I S .................................................................................65
F I G U R A 4.3.1 P I L A E N A N L I S I S S I N T C T I C O Y S E M N T I C O ...........................................................69
F I G U R A 4.3.2 A U T M A T A L ALR ( 1) C O N A T R I B U T O S .....................................................................73
F I G U R A 4.3.3 A N L I S I S LALR ( 1) C O N A T R I B U T O S ........................................................................74
Captulo1
INTRODUCCIN
1.1
O BJETIVOS
LXICO
Enesteapartado,nicamentesehadeaplicarunscanner,queyaexistapreviamente,
sobre el generador de compiladores Com de Cosel. De esta manera se pueden leer
todoslossmbolosdelacadenadeentrada.
SINTCTICO
Se parte de las gramticas generadas en el modulo Com, para un anlisis
descendente. Con estas se pueden obtener todos los smbolos de dicha gramtica,
smbolos terminales y no terminales, transformaciones de BNF a producciones,
producciones,anulables,primeros,siguientes,etc;usadoscomobaseparagenerarun
analizador ascendente. De esta forma, se puede crear una autmata LALR (1),
analizarlo y comprobar si la gramtica de entrada pertenece a una gramtica
ascendenteLALR(1).Finalmente,analizarunacadenadeentradadesmbolosusando
dichagramtica.Estaeslaetapamsimportantedelacompilacin.
2 C A P T U L O 1. I N T R O D U C C I N
SEMNTICOYGENERACINDECDIGO
Estas etapas de la compilacin, son realizadas mediante Cosel. Por este motivo,
simplementeelgeneradorComhadepermitirlaintroduccindeatributosyacciones
semnticas. De esta manera, se pueden verificar las declaraciones de las variables y
lasgramticaslibrescontexto.
1.2
M OTIVACIONES
Esteproyectoestdestinadoaserunaherramientadocenteparalosalumnos.Portanto,ha
de ser fcil de aplicar y visualizar, cosa que no cumplen los generadores ascendentes que
existenactualmenteYACCyBison.Estehechosehacepatentesobretodoeneltratamientode
atributosheredadosysintetizados,yaqueusanunanotacinbasadaen$,queespocolegible
ycomprensible.
1.3
E STADODEL A RTE
Conlaaparicindelprimerordenadordigitalen1946,sehizonecesarioescribirsecuenciasde
cdigo, o programas, que daran como resultado que estas computadoras realizaran los
clculosdeseados.Enunprimermomento,estosprogramasseescribanenlenguajemquina:
cdigos binarios que representaban las operaciones reales de la mquina que van a
efectuarse.Estetipodelenguajessonderpidainterpretacinporpartedelamquina,pero
dedifcilcomprensindelserhumano.
Acausadelamolestaylentaescrituradeloscdigosbinarios,estaformadecodificarpronto
fuereemplazadaporellenguajeensamblador,quemejorextraordinariamentelavelocidady
precisinconlaquesepodanescribirlosprogramas,perotenavariosdefectos:aneradifcil
deescribir,leerycomprender.Porotrolado,ellenguajeensambladordependaporcompleto
de la mquina en particular para la que se haba escrito el cdigo. Esto significa que si un
cdigosequeraexportaraotracomputadora,estesetenaquevolveraescribirdesdecero.
Posteriormente, aparecen los lenguajes de alto nivel. Estos lenguajes se escriben mediante
instruccionesosentenciassimilaresalasdeloslenguajeshumanos.Estofacilitalaescrituray
comprensindelcdigoalprogramador.Paraqueestetipodelenguajesepuedaexpresaren
C A P T U L O 1. I N T R O D U C C I N 3
diferentesmquinas,surgeelconceptodecompilador,unprogramaquetraduceunlenguaje
dealtonivelaotrodebajonivel.[1]
Enlaactualidadexistenmuchoslenguajesdealtonivel,paraloscualessehancreadomuchas
metodologas basadas en la generacin de compiladores. Estas metodologas se basan en el
anlisissintcticotantoascendentecomodescendente.
ElanalizadorsintcticoqueseproponeenesteproyectoeselanalizadorascendenteLALR(1).
Algunos de los compiladores basados en analizadores ascendentes LALR (1) que se usan
actualmenteson:BISONyYACC.
YACC (YetAnotherCompilerCompiler)
Es un programa muy extendido en UNIX. YACC acepta como entrada una gramtica
libredecontexto,yproducecomosalidaelautmatafinitoquereconoceellenguaje
generado por dicha gramtica. YACC solo acepta las gramticas LALR (1). Adems,
permite asociar acciones a cada regla de produccin y asignar un atributo a cada
smbolo de la gramtica ya sea terminal o no terminal. Dado que el autmata que
generaYACCestescritoenlenguajeC,todaslasaccionessemnticasydeclaraciones
necesarias,debenserescritasenestemismolenguaje.YACCpartedeunossmbolos
terminalesquedebensergeneradosporunanalizadorlxico.Dichoanalizadorpuede
implementarseapartirdeLEX.
Cadareglagramaticalseexpresadelasiguienteforma:
noTerminal:componentes;
dondecomponentesesunasecuenciadeceroomsterminalesynoterminales.Por
convencin, los smbolos no terminales se escriben en minscula y los terminales en
mayscula, las flechas se sustituyen por : y cada regla debe acabar en ;. Se va a
mostrar una correspondencia entre gramtica formal y su equivalencia en notacin
YACC.[2]
Gramticaformal
NotacinYACC
EE+T
e:e+t
|T
|t
4 C A P T U L O 1. I N T R O D U C C I N
Elatributodelantecedentees$$.
Elatributodelprimersmbolodecomponenteses$1.
Elatributodelsegundosmbolodecomponenteses$2.
Etc.
Lasaccionessemnticasseejecutarnsiemprequesereduzcalaregla,porloqueesta
seencargadecalcularunvalorpara$$enfuncinde$i.Porejemplo:
e:e+t{$$=$1+$3;}
|t{$$=$1;};
t:t*f{$$=$1+$3;}
|f{$$=$1;};
f:NUM{$$=$1;}
Elanalizadorlxicoseencargadeasignarunvaloralosatributosdelosterminales,en
estecasoNUM.
B I S O N
Es un generador de analizadores sintcticos perteneciente al proyecto GNU, que
convierte una descripcin gramatical para una gramtica independiente de contexto
LALR(1),enunprogramaenCqueanalizaprogramas.BisonescompatibleconYACC,
por tanto, todas las gramticas escritas para YACC deberan funcionar con Bison,
C A P T U L O 1. I N T R O D U C C I N 5
IgualqueocurreconYACC,unareglagramaticalpuedetenerunaaccincompuestade
sentenciasenC.Cadavezqueelanalizadorreconozcaesaregla,seejecutalaaccin.
Enesteejemplo,semuestraunareglaquedicequeunaexpresinpuedeserlasuma
dedossubexpresiones:
exp:exp'+'exp{$$=$1+$3;};
LEX / FLEX
Son generadores de analizadores lxicos que reciben como entrada un fichero de
texto que contiene las expresiones regulares que corresponden a las unidades
sintcticas del lenguaje que se va a compilar. Estos generadores crean un fichero en
cdigo C, que contiene una funcin llamada yylex() que implementa el analizador
lxico.[2]
EsteficheroLEX/FLEXconstadetrespartes:laseccindedefiniciones,reglasyrutinas
auxiliares.Comosepuedeverenelsiguienteejemplo:
/*Seccindedefiniciones*/
#include<stdio.h>//ParausarPrintfenlasreglas
/*SeccindeReglas*/
Digito[09]
/*Seccinderutinasauxiliares*/
Begin{printf(Beginreconocido\n);}
End
{printf(Endreconocido\n);}
Intmain(){
Returnyylex();//Sillegaalfindelaentradatermina
}
6 C A P T U L O 1. I N T R O D U C C I N
1.4
C LASIFICACINDELAMEMORIA
Lamemoriaestdivididaendiferentescaptulos.Acontinuacin,seexplicabrevementecada
unodeellos.
C A P T U L O 2: P L A N I F I C A C I N
En este captulo, se muestra la planificacin inicial y final del proyecto. Tambin se
realizaelestudiodeviabilidaddelproyecto.
C A P T U L O 3: U N C O M P I L A D O R
Enesteapartadoseexplicalapartetericadelproyecto.Quesuncompilador,cules
sonsusetapasyqurealizacadaunadeellas.Sobretodo,sedaespecialimportanciaa
la fase de anlisis sintctico, que es donde se usan los analizadores ascendentes.
Tambinsemuestrandiferentesejemplosparasucomprensin.
C A P T U L O 4: D E S A R R O L L O
Enestaseccin,semuestracomoseharealizadoungeneradorsintcticoascendente,
basadoenlapartetericaexplicadaenelcaptulo3.Seexplicandiferentesejemplos
paravisualizarydemostrarsubuenfuncionamiento.
C A P T U L O 5: C O N C L U S I O N E S
En este captulo, se detalla cuales son las conclusiones extradas despus de la
elaboracin del proyecto. Cules han sido los objetivos conseguidos y cules son los
pendientes.
C A P T U L O 6: A N E X O
Seadjuntainformacincomplementariaymsejemplos,paraunamejorcomprensin.
BIBLIOGRAFA
NDICE
Captulo2
PLANIFICACIN
Eneste captulo,sedescribela planificacininicial yfinaldelproyecto.Sehanrepresentado
mediante un diagrama, como se puede observar en la Figura 2.1. En estos diagramas, se
muestracomosehavistoalteradalaplanificacinfinalrespectolainicial.Estosehaproducido
debidoalafaltadeexperienciaenlaplanificacindeproyectosy,obviamente,acausadela
aparicindeimprevistosduranteeldesarrollodelmismo.Tambinseencuentraelestudiode
viabilidadcorrespondientealproyectorealizado.
2.1
P LANIFICACIN I NICIAL
Paraexpresareltiempoutilizadoeneldesarrollodelproyecto,seusalasemanacomoforma
representativa de las horas trabajadas. Si se tiene en cuenta que cada da se van a trabajar
aproximadamente4horas,entonceslasemanaequivaleatrabajarentre20y25horas.
Ahoraseexplicanlospuntosquesetuvieronencuentaenunprimermomento.
ESTUDIOPREVIO
Antesdeempezaraprogramar,setendrqueinvestigarsobrelasprincipalesetapas
decompilacinyrealizarunestudiodelaprogramacinenCoselydelmduloCom.
Enunasemanahabrtiempoparapoderllevarloacabo.
8 C A P T U L O 2. P L A N I F I C A C I N
TABLAANLISIS
Una vez obtenido el autmata LALR (1), se necesita una tabla para poder aplicar el
anlisisascendente.Comoesteapartadosloconsisteentraducirelautmataauna
matriz,seapostporunasemanaparadesarrollarlo.
A N A L I Z A D O R LALR (1)
Finalmente, del apartado sintctico, falta implementar el algoritmo del analizador
ascendente basado en las acciones desplazar y reducir. Para realizar esta
implementacin, se hace necesario el uso de la tabla de anlisis creada con
anterioridad.Enunprimermomento,sepensqueendossemanassepodrarealizar.
Una vez finalizado el analizador sintctico, se tiene que probar para comprobar su
buenfuncionamiento.
ESTUDIOSEMNTICO
UnavezcomprobadoelbuenfuncionamientodelanalizadorLALR (1),hayquehacer
un estudio sobre los diferentes atributos que puede soportar una gramtica
dependientedecontextoylasaccionesquepuedellevaracabo.Llevarunasemana
realizaresteestudio.
DESARROLLOSEMNTICO
Terminado el estudio, se ha de empezar a tratar los atributos y las acciones
semnticasdesdeelpuntodevistadeungeneradorascendentesintctico.Sesupone,
que este apartado es otro de los ms complejos del proyecto, por esta razn su
margenesdecincosemanas.
MEMORIAYPRESENTACIN
Aunque la memoria se va escribiendo durante todo el desarrollo del proyecto, se
necesitan unas tres semanas ms, para recopilar toda la informacin obtenida y
explicartodolorealizadodelamejorformaposible.
PRESENTACIN
Unavezfinalizadalamemoria,lapresentacinsepuederealizarperfectamenteenuna
semana,yaquesehandetenerclaroslospuntosadestacarenlapresentacin.
C A P T U L O 2. P L A N I F I C A C I N 9
2.2
P LANIFICACIN F INAL
Una vez finalizado el proyecto, han surgido diferentes cambios respecto a la planificacin
inicial.
Inicialmente,nosetuvoencuentaladificultadtantoenlacomprensincomoeneldesarrollo
de los algoritmos a aplicar a lo largo del proyecto. Ahora, se explican, nicamente, los
apartadosmodificadosrespectolaplanificacininicial.
TABLAANLISIS
Para crear las tablas de anlisis se tuvo un pequeo problema de optimizacin, que
hizoincrementareltiempodedesarrolloentresdasms.
A N A L I Z A D O R LALR (1)
Alahoraderealizarelalgoritmodeanlisisascendentesetuvieronvariasdificultades
que hicieron retrasar de nuevo el desarrollo del proyecto. Se necesitaron unas tres
semanasparasuimplementacin.
10 C A P T U L O 2. P L A N I F I C A C I N
DESARROLLOSEMNTICO
Esunodelosapartadosenlosquesehanencontradomsdificultades,debidoaque
suimplementacinprovocabalamodificacindeunagranpartedecdigo.Portanto,
eltiempodeelaboracinseincrementendossemanasmsdeloprevisto.
EXMENES
Duranteeltiempoqueseestuvorealizandoelprocesosemnticosetuvoquehacerun
parnacausadelosexmenes.Esteperiodofuede4semanas.
PERIODODEPRUEBAS
Finalizadoslosexmenesyeldesarrollosemntico,sepusoacomprobarsirealmente
funcionabatodo.Estaseccin,nosetuvoencuentaenlaplanificacininicialyesuna
de las ms importantes, ya que como suele pasar, se produjeron varios errores que
retrasarondenuevoeltiempodedesarrollo(dossemanas).
VACACIONES
DOCUMENTACINPARALAMEMORIA
Este apartado no estaba incluido en la planificacin inicial. Simplemente se basa en
recolectarinformacinsobrelosalgoritmosoexplicacionestericasmsimportantes,
recogida durante todo el proyecto. Ms tarde, todos estos conceptos se explican y
detallanenlamemoria.
F I G U R A 2.1 P L A N I F I C A C I N I N I C I A L Y F I N A L
12 C A P T U L O 2. P L A N I F I C A C I N
2.3
E STUDIODEVIABILIDAD
Acontinuacin,semuestraelestudiodeviabilidadrealizadoapartirdelaplanificacininicial
expuestaenelapartadoanterior.
Primero,sehademirarsisetienelainformacinadecuadaparapodergenerarunanalizador
ascendente LALR (1). Este punto, no tiene ningn riesgo, debido a que la mayor parte de la
informacinestexplicadaenloslibrosdecompiladores.Tambinhahabidounestudiodelos
generadoresdeanlisisascendentesyaexistentes,YACCyBison,exceptoenelcasodepaso
porparmetrosyaquetienenproblemasdeviabilidadenlosatributosheredados.
ComoplataformaparahaceresteanalizadorascendenteLALR(1)seusaellenguajeCoselyel
mdulo Com, que son de dominio pblico. Por tanto, para desarrollar este proyecto, se
necesitauncostequeesequivalentealashorastrabajadasporelingeniero,yaqueelsoftware
utilizadoesgratuito.
Un riesgo que puede aparecer en la realizacin del proyecto es la comprensin del
funcionamientodelgeneradorCom,queusacaractersticasdeCosel,peroeldirectordeeste
proyecto tiene todos los conocimientos necesarios, ya que fue l, quien desarroll el
compiladordeCoselyelmduloCom.
Una vez recopilada toda la informacin, se ha de desarrollar e implementar un analizador
ascendenteLALR(1)usandoparaelloellenguajeCosel.
Para tener un coste orientativo del presupuesto que supone realizar este proyecto, hay que
sumarlashorastrabajadasporelingeniero.
Segnlaplanificacininicial,setrabajan20horascadaunadelasquincesemanasenlasque
sehallevadoacabolarealizacindelproyecto.Creyendoqueuningenierocobra30/hora,el
coste total del proyecto asciende a 9.000. Teniendo en cuenta la planificacin final, se
produce una desviacin sobre el coste inicial del proyecto de 3.000 , provocando que el
presupuestofinalseade12.000.
Captulo3
UNCOMPILADOR
Latraduccinesunprocesoquetomacomoentradauntextodeunprogramaescritoenun
lenguajeyretornacomosalidaeltextodeunprogramaenotrolenguaje,dondeesteltimo
mantiene el significado del texto original. Un compilador traduce un lenguaje de entrada, el
lenguajefuente,aunlenguajesalida,ellenguajeobjeto.Unaparteimportantedelprocesode
traduccin es que el compilador avise de la presencia de errores al usuario en el programa
fuente.EnlaFigura3.1semuestraunpequeoesquemadeuncompilador.
Lenguaje
Fuente
Lenguaje
Objeto
Compilador
Errores
Figura3.1DefinicindeunCompilador
14 C A P T U L O 3. U N C O M P I L A D O R
AnalizadorLxico
AnalizadorSintctico
TABLADESIMBOLOS
AnalizadorSemntico
MANEJODEERRORES
LenguajeFuente
GeneradordeCdigo
LenguajeObjeto
Figura3.1Fasesdeuncompilador
ComosemuestraenlaFigura3.2,uncompiladoroperaendiferentesfases.Lastresprimeras
fases forman la mayor parte del anlisis de un compilador. Aparecen dos actividades, la
administracindelatabladesmbolosqueseaplicaenelanlisissemnticoy,lagestinde
erroresqueinteractaconlasetapasdeanlisislxico,sintcticoysemntico.
El administrador de la tabla de smbolos es una funcin primordial para un compilador, ya
queregistralosidentificadoresutilizadosenelprogramafuenteyreneinformacinsobre
losdiferentesatributosdecadaidentificador.[2]
Ahoraseexplicancadaunadelasfasesdeuncompilador.
3.1
A NALIZADOR L XICO
Elanalizadorlxico,tambinconocidocomoanalizadormorfolgico(scanner,eningls)se
encargadeleerunasecuenciadecaracteresdelprogramafuente,carcteracarcter,ylos
C A P T U L O 3. U N C O M P I L A D O R 15
agrupa para formar unidades con significado propio. Estas unidades son los componentes
lxicos(tokens,enings).Estoscomponentespuedenser:
O P E R A D O R E S :+*/==<>&()=!
Secuenciade
caracteres
Analizador
Lxico
Secuenciade
smboloso
Tokens
Figura3.1.1AnalizadorLxico
ComosepuedevisualizarenlaFigura3.1.1alanalizadorlxicoseleintroduceunasecuencia
decaracteresyestedevuelveuntokenconformeelanalizadorsintcticolovanecesitando
paraavanzarenlagramtica.Lostokenssonlossmbolosterminalesdelagramtica.Como
elanalizadorlxicoeslapartedelcompiladorqueleeeltextofuente,tambinpuederealizar
ciertasfuncionesademsdeanalizar,porejemplo,guardareltextonecesarioparagenerar
informedeerrores.[5]
La forma de especificar los tokens, de modo que sean reconocidos por los analizadores
lxicos, est casi siempre definida por expresiones regulares, ya que este formato resulta
mscmodoparaelcompilador.Paramsinformacinsobrelasexpresionesregularesmirar
laseccin6.1delanexo.
16 C A P T U L O 3. U N C O M P I L A D O R
3.2
A NALIZADOR S INTCTICO
Latareadelanalizadorsintctico(parser,eningls)esdeterminarlaestructurasintcticade
un programa a partir de los tokens producidos por el analizador lxico y, de esta forma,
construir el rbol sintctico que representa esta estructura. Hay que recordar que el
analizador sintctico es la etapa ms importante de la compilacin (continuando el anlisis
iniciado por el analizador lxico), ya que comprueba que la sintaxis de la instruccin es
correcta. Por este motivo, el anlisis sintctico considera como smbolos terminales las
unidades sintcticas retornadas por el analizador lxico. Como se puede comprobar en la
Figura3.2.1,elanalizadorsintcticorecibelostokensdelanalizadorlxicoyrealizaelrbol
sintcticopara,mstarde,aplicarelanalizadorsemntico.[6]
Secuenciade
smboloso
Tokens
Analizador
Sintctico
rbol
Sintctico
Figura3.2.1AnalizadorSintctico
3.2.1
G RAMTICASLIBRESDECONTEXTO
C A P T U L O 3. U N C O M P I L A D O R 17
Apartirdeahora,lossmbolosterminalesseexpresanenletraminsculaylosnoterminales
enmaysculas.Alconjuntodeellossellamasmbolosgramaticales.
DERIVACIN
3.2.2
Laderivacinconsisteentrataracadaproduccincomounaregladesustitucin,dondeel
smbolonoterminaldelacabeceradeunareglasesustituyeporlacadenaformadaporel
cuerpodelaproduccin.Elrbolsintcticoseconstruyeapartirdelasderivaciones.
Enelsiguienteejemplo,seobservaunagramticaextradaapartirdelanalizadorlxico.
EXPEXP+EXP
EXP
EXPEXP
EXPEXP
EXP(EXP)
EXPid
18 C A P T U L O 3. U N C O M P I L A D O R
Apartirdeestemomento,lasgramticassesimplificanusandoeloperando|explicadoen
elapartado6.1delanexo.
EXPEXP+EXP|EXPEXP|EXP|(EXP)|id
3.2.3
EXPEXP
EXP(EXP)
EXPid
RBOLESSINTCTICOS
Gracias a los rboles sintcticos, se puede hacer una representacin grfica de las
derivaciones.Coneste mtodo,serepresentalajerarquadela estructurasintcticadelas
sentenciasgeneradasporlagramtica.
Construirunrbolsintcticosignificaquesecreaunrboldenodosyqueestosnodosdeben
ser etiquetados con smbolos gramaticales, de izquierda a derecha. Los nodos hoja son
etiquetados con smbolos terminales y los nodos internos son etiquetados como no
terminales.Elnodoraz(inicial)esetiquetadoconelsmbolodeiniciodelagramtica.[8]
Acontinuacin,sepresentaunagramtica,dondeEXPyFACsonsmbolosnoterminalesy+,
*eidsonterminales,
EXPEXP+EXP|FAC
FACFAC*FAC|id
C A P T U L O 3. U N C O M P I L A D O R 19
Apartirdeestagramtica,sepuedegenerarlasecuenciaid*id+idmediantelossiguientes
pasos de derivacin. En la Figura 3.2.2, se muestra el rbol generado a partir de dicha
derivacin.
EXPEXP+EXPFAC+EXPFAC*FAC+EXPFAC*FAC+FAC
id*FAC+FACid*id+FACid*id+id
id
F
*
id
id
Figura3.2.2rbolSintctico
3.2.4
M TODOSDEANLISISSINTCTICO
A N L I S I S D E S C E N D E N T E odearribaabajo(topdown):esunatcnicaqueintenta
construir un rbol sintctico de la cadena de entrada, comenzando por la raz y
creandolosnodosapartirdeellahastallegaralashojas.Asimismo,sepuedepensar
como un mtodo que intenta encontrar una derivada ms a la izquierda de la
cadenadeentrada.[9]
20 C A P T U L O 3. U N C O M P I L A D O R
D E R I V A C I N P O R L A I Z Q U I E R D A : ( A N L I S I S D E S C E N D E N T E )
La derivacin por la izquierda cosiste en reemplazar siempre el no terminal que se
encuentra ms a la izquierda primero. En el siguiente ejemplo se puede ver una
demostracin.
E E+T T+T F+T id+T id+T*F id+F*F
id+id*Fid+id*id
E
E
T
T
+
E
E
E
E
T
F
C A P T U L O 3. U N C O M P I L A D O R 21
E
T
id
id
E
T
E
T
id
id
id
id
id
id
Figura3.2.2Anlisisdescendente(Derivacinporlaizquierda)
D E R I V A C I N P O R L A D E R E C H A ( A N L I S I S A S C E N D E N T E )
La derivacin por la derecha reside en que siempre se sustituye primero el no
terminalqueseencuentramsaladerecha.Yelrbolseconstruyedesdelashojas,
hastallegaralaraz.Sepuedeverunaevidenciaenelsiguienteejemplo.
id+id*id F+id*id T+id*id E+id*id E+F*id
E+T*idE+T*FE+TE
22 C A P T U L O 3. U N C O M P I L A D O R
id
id
id
id
E
T
id
id
id
id
id
id
id
id
id
E
T
id
id
id
id
T
T
F
+
id
id
C A P T U L O 3. U N C O M P I L A D O R 23
E
T
id
id
id
Figura3.2.3Anlisisascendente(Derivacinporladerecha)
Como se ve en las dos Figuras anteriores, el proceso de recorrer el rbol para el anlisis
descendentecomienzaenlaraz,mientrasqueelascendenteempiezaenlashojas,peroel
resultadofinaleselmismoparalosdoscasos.
3.2.5
A NLISISASCENDENTE
24 C A P T U L O 3. U N C O M P I L A D O R
REDUCCIN
Enlapartederechadeunaproduccin,cuandounasubcadenadelaparteizquierda
delpunto,correspondealapartederechadeunaproduccin,estasesustituyeporla
parteizquierdadelaproduccin.
SiNesunnoterminalyderivaenelsmboloterminalonoterminal.puedeser
tantoterminalcomonoterminalyaesunterminal.Sereduceunasubcadenadela
partequeseencuentraenlaizquierdadelpuntoaysesustituyeporN.
Reduccin
aN
DESPLAZAMIENTO
Se avanza un smbolo en la cadena de entrada y, el punto en todas las reglas que
siguensiendocompatiblesconlasubcadenadelacadenadeentrada.
SemuestraunejemplodelautilizacindelpuntoydelasaccionesReduciryDesplazar.
EE+T
Inicialmente,elpuntoseencuentraenelorigendelapartederechadelaregla,puestoque
nosehaprocesadoinformacinsuficienteparaavanzar.Paraqueestasealareglautilizada,
primerosetendrquereducirlapartedelacadenadeentradacorrespondientealsmbolo
noterminalE,
EE+T
Encontraracontinuacinunsmboloterminal+,suponedesplazarelpuntounaposicin.
EE+T
Indicaqueelanalizadorhacomprobadolapartederechadelareglayescompatibleconla
partedelacadenadeentradaanalizada.Enestemomento,sepuedereducirtodalapartede
la cadena de entrada asociada a E+T y substituirla por el smbolo no terminal E, que es la
parteizquierdadelaregla.
EE+T
C A P T U L O 3. U N C O M P I L A D O R 25
3.2.5.1 LR ( K )
Seintroduceunatcnicaeficientedeanlisissintcticoascendentequesepuedeutilizarpara
procesarunaampliaclasedegramticaslibredecontexto,estatcnicasedenominaLR(k).
La abreviatura L indica que se realiza una lectura de izquierda a derecha de la cadena de
entrada (en ingls, from left to right), mientras que la R refleja que estos analizadores
construyen una derivacin por la derecha de la entrada en orden inverso (en ingls, rigth
mostderivation).Porltimolakhacereferenciaalnmerodesmbolosquesedebenmirar
por adelantado para tomar las decisiones de reducir o desplazar. Cuando se omite la k, se
asumequees1.
LadiferenciaquehacealosmtodosLR(k)mspoderososquelosLL(k)esporvariarazones.
26 C A P T U L O 3. U N C O M P I L A D O R
Otrograninconvenientedelanlisisascendenteconsisteendecidircundoloquepareceser
lapartederechadeunaproduccinpuedeserreemplazadoporsuparteizquierda.Estono
es trivial, ya que pueden haber partes derechas comunes a varias producciones o
produccionesquederivanenfinaldecadena$.
Los analizadores LR (k) constituyen una familia en la que existen numerosas variantes.
Existenvariosalgoritmosdeanlisisascendente.Elmsutilizadoeselalgoritmodeanlisis
pordesplazamientoreduccin.Estealgoritmoestbasadoenunapilayunatabladeanlisis,
comoseexplicamsadelante.Existendiferentesmtodosparaconstruirelautmata:
LR (0)
Es el mtodo ms fcil de implementar, pero el que tiene menos poder de
reconocimiento. No utiliza la informacin del smbolo de adelanto para decidir la
accinarealizar.Porestemotivo,surgenconflictosquesemencionanmsadelante.
SLR (1)
SussiglassignificanSimpleLR.Esmuyparecidoalmtodoanterior,peroesteyausa
unsmbolodeadelanto.ElautmataSLR(1)tienemenosestadosqueelautmata
LR(1),portanto,latabladeanlisisconstruidaconSLR(1)esmuchomscompacta.
Por este motivo, el conjunto de gramticas SLR (1) es mucho ms reducido que el
conjuntodegramticasLR(1).
LR (1)
Eslamejortcnicaperoesmuycostosa.Debidoaqueesteautmatageneramuchos
estados,elconjuntodegramticasesamplioyeltamaodelastablasseincrementa
considerablemente.
LALR (1)
Del ingls Look Ahead LR, con un smbolo de adelanto. Es una versin intermedia
entreelmtodoSLR(1)yelLR(1),yaqueLALR(1)aprovechalasventajasdeambos
autmatas. El autmata es ms reducido que LR (1), pero tiene un subconjunto de
gramticasmsamplioqueSLR(1).[9]
Ahora,sedesarrollanlosmtodosdeanlisisascendente,peroseentramsendetallecon
losanlisisLR(0),LR(1)yLALR(1),yaquesonconlosquesehatrabajado.
C A P T U L O 3. U N C O M P I L A D O R 27
Losanalizadoresascendentessiguensimultneamentetodosloscaminosposibles,esdecir,
cadaestadodelautmatamantienetodaslasreglascuyaspartesderechassoncompatibles
conlasubcadenadeentradayaanalizada.Cadaunadeesasreglaseshipottica,puestoque
alfinalsolounareglaesaplicada.
Se van a explicar todos los pasos que hay que tener en cuenta para crear el autmata del
analizadorLR(0).
CREARCLAUSURA
Apartirdeunagramticaydeunaproduccin,sepuedecrearunestadoaadiendo
aestetodaslasproduccionesquepuedanaparecerdependiendodelaposicindel
puntoydelagramtica.
Dadalasiguientegramtica,
SE$
ET
EE+T
Tnum
Figura3.2.4GramticaLR(0)
paracrearelestadoinicialsecogelaproduccininicialyelpuntoqueseencuentra
delante del primer smbolo de la cadena de entrada. Se trata de reducir toda la
cadena al smbolo inicial. De esta manera, se relaciona nicamente con el smbolo
inicial.
SE$
28 C A P T U L O 3. U N C O M P I L A D O R
construccin del autmata aparecen muchas configuraciones en las que hay que
aplicarlareflexinanterior.
ApartirdelagramticaquesemuestraenlaFigura3.2.5,seenseacomosecreael
estadoinicialS0.Comolaprimeraproduccin tienedetrsdel punto elsmbolono
terminalE,hayqueaadiralestadotodaslasproduccionesqueempiecenporE,
SE$
Enestecaso,lasproduccionesqueempiezanporE,son:
ET
EE+T
Porlamismarazn,comoTesunnoterminalhayqueaadiralestadoinicialtodas
lasreglasdondelaparteizquierdacoincidaconelnoterminalT.
Tnum
Estasconfiguracionestienenencomnqueelsiguientesmboloaanalizaresunno
terminal.Poresonoquedanadapendienteenelestadoinicial.Comoconsecuencia,
sisellamaalestadoinicialS0,sepuededecirque:
S0={SE$
ET
EE+T
Tnum}
ESTADOSDEACEPTACINYDEREDUCCIN
Unestadoesdeaceptacin,cuandoexisteunaproduccindereduccinenelestado,
esdecir,cuandoelpuntodeestaseencuentraalfinaldelacadenay,portanto,no
precede a ningn smbolo terminal o no terminal. Se puede ver que el estado
contiene el cierre de la produccin S E $ , representado en el autmata por
doblecrculo.
C A P T U L O 3. U N C O M P I L A D O R 29
TRANSICINENTREESTADOS
Se van a crear todos los estados que surgen del estado inicial S0, dependiendo del
smbololedoenlacadenadeentrada.
SienlacadenadeentradaseencuentraelsmboloE,slolaproduccin(SE$)
y(E E+T)siguensiendocompatiblesconlaentrada.Enestecaso,sepuede
desplazarunsmbolo,tantoenlacadenadeentradacomoenestasproducciones.Si
elsiguienteestadosellamaS1,sepuedeexpresarcomo:
S1={SE$,
EE+T}
S2={ET}
Slosepuedeproducirotroestadoapartirdelestadoinicial,silacadenadeentrada
seencuentraconelsmboloterminalnum.Enestecaso,sedesplazaunsmbolodela
produccin T num y de la cadena de entrada. Este estado tambin es de
aceptacin,porquedespusdelpuntonohaymssmbolos.Siesteestadosellama
S3,seexpresacomo:
S3={Tnum}
30 C A P T U L O 3. U N C O M P I L A D O R
S0
S E$
E T
E E+T
T num
S1
S E$
EE+T
E E$
T
EE+ T
E T
num
S4
S2
T num
EE+T
S6
S5
S3
Figura3.2.5AutmataLR(0)
CONFLICTOS
Ocurrecuandoenunestadodelautmatasepuedenrealizarmsdeunaaccin.
C O N F L I C T O D E S P L A Z A R R E D U C I R
Seproducecuandoenunestadoseconsigueefectuarlaaccindereduccin
y desplazar. Si se supone el conjunto de elementos correspondientes a un
estadodelautmatadeanlisisascendente.
Ti
TiE
SenecesitatantodesplazarTiEcomoreducirTi,portantosellegaa
unproblema.
C O N F L I C T O R E D U C I R R E D U C I R
Ocurrecuandoenunestadoaparecendosaccionesdereducir.Tambinen
elcasodetener:
Ti
Vi
C A P T U L O 3. U N C O M P I L A D O R 31
3.2.5.1.2 T ABLADEANLISISASCENDENTE
Siseproduceunareduccin,semuestraconR<p>,donde<p>identificaunareglade
lagramtica.Simbolizalaaccindereduccindelaregla<p>.
SielanlisisfinalizaconxitoserepresentaconAceptar.
SinofinalizaconxitoseexpresaconError.
EnlasiguienteFiguraseobservaelesquemadelanalizadorsintctico.Dondesemuestranlas
filasdeaccinydeir_a,ascomoelcontenidodelapila,queseexplicamsdetalladamente
acontinuacin.[10]
32 C A P T U L O 3. U N C O M P I L A D O R
Pila
Cadenadeentrada
a1
Tabladeanlisis
SmbolosTerminales
Sm
SmbolosNoTerminales
Xm
a2
Estados
T1
...
T2
Nt1
...
Nt2
Sm1
...
S0
Xm1
ak
...
...
...
...
...
Sn
S0
Figura3.2.6EstructuradelAnalizadorSintctico
3.2.5.1.3 I NICIODELANLISIS
Es importante saber que el algoritmo de anlisis ascendente utiliza la pila para conservar
todalainformacinnecesariaycontinuarelanlisis.Poresto,aexcepcindelestadoinicial
enelqueseinsertaelestadoinicialalapila,enelrestoseintroducenelestadodelautmata
yelsmboloexaminadoeneseinstante.
D E S P L A Z A M I E N T O D< E >
Cuando en la ejecucin del algoritmo aparece en una casilla D<e> significa que, el
smboloactualdelacadenade entradaes unodelosqueesperaunadelas reglas
conlapartederechaparcialmenteanalizadas.Porestemotivo,sepuedepasaraun
nuevoestado<e>delautmatayavanzarunaposicinenlacadenadeentrada,de
maneraqueelsmboloactualpaseaserelsiguientealanalizado.Estoimplica:
Introducirenlapilaelsmbolodeentrada.
Introducirenlapilaelnuevoestado<e>.
C A P T U L O 3. U N C O M P I L A D O R 33
R E D U C C I N R< P >
Al aparecer R<p> simboliza que, teniendo en cuenta el smbolo de la cadena de
entrada, alguna de las reglas representadas en el estado actual del autmata ha
desplazado toda su parte derecha, esta puede ser substituida por el smbolo no
terminaldelaparteizquierdadelaregla<p>.Estosupondr:
Sacardelapilatodalainformacinasociadaconlapartederechadelaregla
<p>. Como al desplazar se almacena tanto el estado como el smbolo de
entrada, si la longitud de la parte derecha a reducir es N, se tendrn que
hacer2*Nextraccionesdelapila.
RealizarunDesplazamientoconelsmboloreducido
ACEPTACIN
Encasodeapareceraceptarenunacasillaenlaejecucindelalgoritmo,elanlisis
terminayseconcluyequelacadenahafinalizadocorrectamente.
ERROR
Sisellegaaunacasilladeerrorseconsideraquelacadenanohafinalizadoconxito
yelanlisisterminaParaunamejorcomprensindelatabladeanlisis,estascasillas
serepresentancomocasillasvacas.[10]
Acontinuacin,secrealatabladeanlisisLR(0)apartirdelautmatadelaFigura3.2.6,yse
analizalacadenadeentradanum+num$.MostradoenlaFigura3.2.9.
Estados
0
1
2
3
4
5
6
num
D3
R3
D5
D4
Aceptar
E
D1
T
D2
R2
D6
R6
Figura3.2.7TabladeanlisisLR(0)
1. Loprimeroquesehadehacer,esintroducirenlapilaelestado0.Elprimersmbolo
delacadenadeentrada,esnum.Comosepuedeverenlatabladeanlisis,enesa
34 C A P T U L O 3. U N C O M P I L A D O R
posicinhayundesplazamientoalestado3.
2. Seaadeelsmbolonumalapilayseextraedelacadenadeentrada.Seaadeel
estado S3. En este estado, se Reduce (Tnum). En el estado 0, si entra una T, se
desplazaalestado2.
3. Seextraendelapiladoselementos,yaquesolohayunsmboloenlaparteizquierda
de la produccin (Tnum). Despus, se aade el smbolo T y el estado S2.
Si se encuentra en el estado S2, se vuelve a reducir, en este caso ET.
Seguidamente,sedebedesplazaryaqueenlatabladeanlisis,desdeelestadoS0
conelsmboloE,sedesplazahaciaelestadoS1.
4. SeaadenenlapilaelsmboloEyelestadoS1.Ahora,entraelsmbolo+.Deesta
manera,seDesplazahaciaelestadoS5.
5. Seacumulanenlapila,elsmbolo+yS5.Enestepaso,sevuelvealeerunsmbolode
lacadenadeentrada,num.Portanto,hayquerealizarundesplazamientohaciaS6.
6. UnavezaadidonumyS6,sehadereducirTnumydesplazaralestadodondese
haproducidolareduccinS3.
7. Seextraedelapilalosdosltimosvaloresintroducidos,yseaadeTyS3.Eneste
paso,sereduceEE+T,ysedesplazaEalestado1.
8. Comolapartederechadelaproduccinreducida,EE+T,tienetreselementos,se
handeextraer3*2=6elementosdelapila.Despus,seaadeEyS1.Ahora,entrael
ltimoelementodelacadenadeentrada$,quehacedesplazaralestado4.
9. Seamplalapila,con$yS4.Porltimo,sereducelaproduccininicialSE$.
C A P T U L O 3. U N C O M P I L A D O R 35
Pasos
1
2
3
4
5
6
7
8
9
10
Pila
S0
S3,num,S0
S2,T,S0
S1,E,S0
S5,+,S1,E,S0
S6,num,S5,+,S1,E,S0
S3,T,S5,+,S1,E,S0
S1,E,S0
S4,$,S1,E,S0
S,S0
Cadena
num+num$
+num$
+num$
num$
$
$
$
$
Acciones
Desplaza(num,S3)
Reduce(Tnum)yDesplaza(T,S2)
Reduce(ET)yDesplaza(E,S1)
Desplaza(+,S5)
Desplaza(num,S6)
Reduce(Tnum)yDesplaza(T,S3)
Reduce(EE+T)yDesplaza(E,1)
Desplaza($,S4)
Reduce(SE$)
Aceptar
Figura3.2.8AnalizadorLR(0)
Enestemomento,secreaunautmataLR(0)conlagramticaquesemuestraenlaFigura
3.2.10,peroenestecasoseproduceunconflictoenelestado2delautmata,dondetienea
suvezunelementoadesplazarSxbyunelementoareducirBx.Porestemotivo,se
crealatcnicaLR(1)queintentaresolveresteconflictorestringiendolareduccinutilizando
smbolosdeadelanto.
SA|xb
AaAb|B
Bx
Figura3.29Gramticaparamostrartodoslosmtodos
36 C A P T U L O 3. U N C O M P I L A D O R
$
S A$
S1
S0
A
S A$
x
S xb
A aAb
A B
B x
a
S A$
S2
b
S xb
B x
A aAb
A aAb
A B
B x
S xb
B x
S7
A aAb
AB
S5
S3
S9
S6
S8
AaAb
S4
Figura3.2.10AutmataLR(0)conconflictoDesplazarReducir
Laprimera,consultaeltokendeentradaantesdeundesplazamientoparaasegurar
queexisteunatransicinapropiada.
SedemuestraelanlisisLR(1)apartirdelagramticaquesemuestraenlaFigura3.2.10.Se
aplicaestagramticaporqueesLR(1)yLALR(1).
C A P T U L O 3. U N C O M P I L A D O R 37
ElanlisisLR(1)sebasaenconservarelsmboloadelantadoespecificoconcadaelemento.
Deestamanera,unelementoLR(1)seescribiras:N{},dondeeselconjuntode
smbolosquepuedeseguiralsmbolonoterminal.Cuandoelpuntohaalcanzadoelfinal
delelemento,N {},entonceselelementosepuedereducirexitosamentesiempre
ycuandoelsmbolodeadelantoenesemomentosea,sinoesignorado.[9]
Slosecalculanlossmbolosdeadelantoparalasproduccionesquehansidoevaluadaspor
la clausura. Las producciones que no han sido evaluadas por la clausura mantienen el
smbolo de adelanto. Para calcular los smbolos de adelanto, hay que tener en cuenta dos
situaciones:
CONJUNTODEPRODUCCIONESDELESTADOINICIAL
Enestecaso,elconjuntodesmbolosdeadelantoseencuentraenelestadoinicial
S0,talycomosepuedeverenlaFigura3.2.12.Tambin,contienesolountoken,el
defindecadena$,yaqueesteeseltokenquepuedeseguiralsmbolodeiniciodela
gramtica.
CONJUNTODEPRODUCCIONESDECUALQUIERESTADO
SidespusdelnoterminalN,hayunsmbolo,porejemplo,P N{},
entonceselconjuntodesmbolosadelantadosdelnuevoelementocreadoes
PRIMEROS {}, ya que esto es lo que puede continuar a cada uno de estos
elementosenestaposicinenconcreto.
38 C A P T U L O 3. U N C O M P I L A D O R
EnelestadoS0,primerohayqueaadirlaregladeinicioS'S{$},perocomoelsiguiente
smboloaanalizaresunnoterminal,hayqueagregaralestadotodaslasproduccionesdonde
laparteizquierdadelaproduccincoincidaconelnoterminalS.Enestecaso,sonS Ay
Sxb.Unavezobtenidasestasproduccionessecalculasusmbolodeadelanto.
S'S{$}
Despus del no terminal S, no hay ningn smbolo ms. Por este motivo, no se pueden
calcularlosPRIMEROSyhayqueaadircomosmbolodeadelanto{$}.Portanto,aSAy
Sxbselesdebeaadirelsmbolodeadelanto{$}.
SA{$}
Sxb{$}
Una vez calculado sus smbolos de adelanto, hay que volver a mirar si estas producciones
contienenunnoterminaldespusdelpunto,comoocurreenelcasodeSA{$},dondeA
esunnoterminal.Porestemotivo,sedebenaadirtodaslasqueempiecenporA,AaA
byAB.Despusdeaadirlas,secalculasusmbolodeadelanto.
SA{$}
Ocurre como en el caso anterior, despus del no terminalA, no hay ningn smbolo y, por
tanto,nosepuedencalcularlosPRIMEROS.Porestarazn,hayqueaadircomosmbolode
adelanto{$}.
AaAb{$}
AB{$}
Finalmente,sucedeigualconA B{$},quecontieneelsmbolonoterminalB.Seaadea
laclausura,Bx,quetambintienecomosmbolodeadelanto{$}.
AsescomoseobtieneelestadoS0:
S0={AaAb{$}
AaAb{$}
AB{$}
Bx{$}}
ElestadoS5,secomportadiferenteporquehayunsmboloadelantadoAaAb{$}.
C A P T U L O 3. U N C O M P I L A D O R 39
Enestecaso,comodespusdelpuntohayunnoterminalA,hayqueagregaralestadotodas
lasproduccionesqueempiecenporA,quesonAaAbyAB.Unavezaadidas,hay
quecalcularsusmbolodeadelanto.
AaAb{$}
En este caso, s se pueden calcular los PRIMEROS porque, despus del no terminal A, se
encuentra b. Como consecuencia de producirse PRIMEROS (b)= {b}, el smbolo de adelanto
{b}seaadealasproduccionesanteriormentecargadas.
AaAb{b}
AB{b}
Ahora,alanalizarA B{b},comoelsiguientesmboloBesunnoterminal,tambinhay
queagregartodaslasproduccionesquecontenganB.Enltimolugar,secompletaelestado
S5 con B x. Al no haber ningn smbolo despus del no terminal B, se debe de coger
comosmbolodeadelanto{b}.
Finalmente,elestadoS5quedadelasiguienteforma:
AaAb{$}
AaAb{b}
AB{b}
Bx{b}
SepuedecomprobarqueelconflictoDesplazarReducirqueseproducaenelanlisisLR(0)
hadesaparecido.Ahora,elestadoS4tienequedesplazarenbyreduciren$.Enelrestode
estadosnosemuestraningunaalteracin,portanto,lagramticaesLR(1).
LadiferenciarespectoalatabladelanlisisLR(0)seproduceenlaaccindeReduccin.
REDUCCIN
En vez de consultar los estados finales del autmata, se utilizan los smbolos de
adelantodelasproduccionesdereduccin.SielestadofinalSfysuproduccines
N {1 n}, la accin de reduccin solo se aadir en las casillas
correspondientesalascolumnasdelossmbolosdeadelanto{1n}.Cuandose
reduce la expresin A B {b}, en el estado S12 de la Figura 3.2.12, se puede
40 C A P T U L O 3. U N C O M P I L A D O R
ACEPTACIN
LaproduccininicialnoseexpresaEE$,sinoEE{$}.Elsmbolodefinalde
cadena$noaparecedeformaexplcita,sinocomosmbolodeadelanto.Portanto,la
accin de aceptacin se escribe en la casilla (Si, $), siempre que en el estado Si,
aparezcalaproduccinEE{$}.[10]
S1
S' S {$}
S2
S A {$}
S0
S'S{$}
A{$}
S
S xb{$}
A aAb{$}
AB{$}
B x{$}
B
x
S3
A B {$}
S6
S4
S x b{$}
S x {$}
S xb {$}
S7
a
S5
A
A a Ab{$}
A aAb{b}
A B{b}
B x{b}
a
B
A aAb
{$}
b
A aAb {$}
A a Ab{b}
A aAb{b}
A B{b}
B x{b}
A
A aAb{b}
S9
B
x
S8
A B {b}
S12
S13
B x {b}
Figura3.2.11AutmataLR(1)
S10
S11
A aAb {b}
C A P T U L O 3. U N C O M P I L A D O R 41
Estados
0
1
2
3
4
5
6
7
8
9
10
11
12
13
a
D5
D9
D9
D6
D8
D11
R11
R12
R13
x
D4
D13
D13
Aceptar
R2
R3
R4
R6
R8
S
D1
A
D2
D7
D10
B
D3
D12
D12
Figura3.2.12TabladeAnlisisdelAutmataLR(1)
UnavezcreadalatabladeanlisisLR(1)mostradaenlaFigura3.2.13.Seanalizalacadena
deentradaaxb$.
ElanlisisesmuyparecidoaldelLR(0),lonicoquesehadetenerencuentaeselsmbolo
deadelantoalahoradereducirunaproduccin.Porejemplo,lareduccindelestado11y12
seproducecuandoelsmbolodeadelantodelasproduccionesseaigualaldelacadenade
entrada.
1. ComoenelanlisisdelLR(0),seaadeenunprimermomentoelestado0.Sientra
elsmboloaexisteundesplazamientoaS5.
2. Secargaenlapilaelprimersmbolodelacadenaayseaadeelestado5.Sevuelve
aleerotrosmboloxysedesplazaaS13.
3. Seagregaenlapilaxyelestado13.EnestemomentoseproduceunareduccinB
x {b}. Como b es el smbolo de adelanto hay que mirar en la fila 13, columna b.
Despus,reduciraBydesplazarBalestado12.
42 C A P T U L O 3. U N C O M P I L A D O R
5. Seextraendoselementosdelapila,porlamismaraznqueenelpasoanterior,yse
aadelareduccindelareglaAysuestadoS7.Ahora,seleeelsiguientesmbolode
lacadenadeentradabysedesplazaaS8.
6. Unavezagregadoslosltimoselementos,seproduceunareduccinAaAbyse
desplazaalestado2paraavanzarelsmboloA.
7. ComolareduccindeanteseraAaAb,ahorahayqueextraer3*2=6elementos
delapilayadicionarAyS2.SevuelveareducirporlaproduccinSAydesplazar
elsmboloSalestado1.
9. Lacadenahasidoaceptada
Pasos
1
2
3
4
5
6
7
8
9
Pila
S0
S5,a,S0
S13,x,S5,a,S0
S12,B,S5,a,S0
S7,A,S5,a,S0
S8,b,S7,A,S5,a,S0
S2,A,S0
S1,S,S0
S,S0
Cadena
axb$
xb$
b$
b$
b$
$
$
$
Acciones
Desplaza(a,S5)
Desplaza(x,S13)
Reduce(Bx)yDesplaza(B,S12)
Reduce(AB)yDesplaza(A,S7)
Desplaza(b,S8)
Reduce(AaAb)yDesplaza(A,S2)
Reduce(SA)yDesplaza(S,S1)
Reduce(SS$)
Aceptar
Figura3.2.13AnalizadorLR(1)
C A P T U L O 3. U N C O M P I L A D O R 43
Al examinar a fondo los estados del autmata LR (1), mostrados en la Figura 3.2.12, se
observa que hay algunos elementos que son muy parecidos a otros conjuntos.
Concretamente,losestadosS5S9sonidnticossiseignoranlossmbolosdeadelantoylo
mismoocurreconS3S12,S7S10yS8S11.Porestemotivo,seintentareducireltamao
delautmataagrupandoestosestados,yasreducireltamaodelatabladeanlisis.Esun
proceso iterativo en el que dos estados se transforman en uno solo siempre que sean
equivalentes.Laequivalenciadeestadossebasaenlassiguientescondiciones:
Slodebendiferirenlossmbolosdeadelantodelasproducciones.Elestadoquese
obtienealunirlosdosestadosequivalentes, contiene encadacasolaunin delos
smbolosdeadelanto.
Elnuevoestadoagrupadodebemantenerlastransicionesdelautmata.
Elprocesoseterminacuandonosepuedanagruparmsestados.
SevanairagrupandolosestadosunoaunohastaformarelautmataLALR(1),mostradoen
laFigura3.2.15.
E S T A D O S S3 S12
Laasociacinesposibleporqulaconfiguracindelosdosestadosslosediferencia
enlossmbolosdeadelanto.LasdostransicionesquellegandesdeS0aS3ydesdeS5
yS9aS12puedenllegaralnuevoestadoS4.Donde:
S3,S12=S4={AB{$,b}}
E S T A D O S S7 S10
Porlasmismasrazonesqueenelcasoanteriorsepuedenjuntarestosdosestadosy
suresultadoes:
S7,S10=S7={AaAb{$,b}}
E S T A D O S S8 S11
Enestasituacinambosestadostienentransicionesdesalida,cosaquenosehaba
44 C A P T U L O 3. U N C O M P I L A D O R
producidoenloscasosanteriores.Launinesposibleporqulasdoslleganalmismo
estado S7, S10=S7. Por eso, se mantiene la transicin en la generacin del nuevo
estado.
S8,S11=S8={AaAb{$,b}}
Esmuyimportanteelordenenelqueserealizanlasuniones.SiseintentaunirlosestadosS8
yS11antesqueS7yS10launinnoesposible.Perocomoesunprocesoiterativo,estono
debedepreocupar,tardeotempranoseunificarnlaparejaS7yS10yluegoS8yS11.[10]
Finalmente, elautmata resultante detodasestasunificacioneseselautmatadelanlisis
LALR(1)ysemuestraenlasiguientefigura:
S1
S' S {$}
S0
S2
S x b{$}
S x{$}
S' S${$}
S
A{$}
S xb{$}
A aAb{$}
A
B{$}
B x{$}
S A {$}
A B {$,b}
S4
A a Ab{$,b}
A aAb{b}
A B{b}
B x{b}
S8
S7
S5
S6
S3
S xb {$}
A aAb{$,b}
x
B x {b}
S9
Figura3.2.14AutmataLALR(1)
A aAb {$,b}
C A P T U L O 3. U N C O M P I L A D O R 45
LacreacindelatabladeanlisisdelautmataLALR(1)semuestraenlaFigura3.2.16yse
construyeexactamenteigualquelatabladeLR(1).
Estados
0
1
2
3
4
5
6
7
8
9
a
D5
D5
D6
R4
D8
R8
R9
x
D3
D9
Aceptar
R2
R3
R4
R6
R8
S
D1
A
D2
D7
B
D4
D4
Figura3.2.15TabladeAnlisisdelAutmataLALR(1)
UnavezcreadalatabladeanlisisLALR(1)mostradaenlaFigura3.2.16.Seanalizalacadena
deentradaaxb$.
ComoyaseexplicarontodoslospasosenelanlisisLR(1),aqunoseexpresarnyaqueson
muyparecido.
Pasos
1
2
3
4
5
6
7
8
9
Pila
S0
S5,a,S0
S9,x,S5,a,S0
S4,B,S5,a,S0
S7,A,S5,a,S0
S8,b,S7,A,S5,a,S0
S2,A,S0
S1,S,S0
S,S0
Cadena
axb$
xb$
b$
b$
b$
$
$
$
Acciones
Desplaza(a,S5)
Desplaza(x,S9)
Reduce(Bx)yDesplaza(B,S4)
Reduce(AB)yDesplaza(A,S7)
Desplaza(b,S8)
Reduce(AaAb)yDesplaza(A,S2)
Reduce(SA)yDesplaza(S,S1)
Reduce(SS$)
Figura3.2.16AnalizadorLALR(1)
46 C A P T U L O 3. U N C O M P I L A D O R
3.3
A NALIZADOR S EMNTICO
rbol
Sintctico
Analizador
Semntico
rbol
Sintcticocon
atributos
Figura3.3.1AnalizadorSemntico
Unavezrealizadoelanlisislxicoysintctico,elanalizadorsemnticorecibecomoentrada
el rbol sintctico del programa (vase Figura 3.3.1). El anlisis semntico genera como
salida, en el caso de no detectar errores, un rbol sintctico con anotaciones semnticas o
atributos.Estosatributosseempleanparacomprobarqueelprogramaessemnticamente
correcto.
Para que los smbolos de una gramtica pueden adquirir significado, se les asocia
informacin(atributos)yalasproduccionesgramaticalesselesasocianaccionessemnticas,
que sern cdigo en un lenguaje de programacin y cuya tarea es evaluar los atributos y
tratar dicha informacin para llevar a cabo las tareas de traduccin. Por este motivo, las
gramticas libres de contexto no son suficientes para realizar el anlisis semntico. Es
necesario,portanto,definiruntipodegramticamsrica,comolasgramticasdeatributos.
[3]
C A P T U L O 3. U N C O M P I L A D O R 47
G RAMTICADEATRIBUTOS
3.3.1
Lasgramticaslibresdecontextoseamplanparapoderdefinirlasemnticadeunlenguaje
deprogramacin.
LagramticadeatributosGA,esunatripleta(G,A,R)donde:
G,esunagramticalibredecontextoG=(T,N,S,P).(VasePg.18)
CadasmbolodelagramticaS,yaseaterminalcomonoterminaltieneasociadoun
conjuntofinitodeatributosA,ycadaatributounconjuntodevalores.Elvalordeun
atributodescribeunapropiedaddependientedecontextodelelementoencuestin.
Por ejemplo, la especificacin X(a,b,c), seala que el no terminal X, tiene tres
atributosa,b,yc.
Cada produccin puede tener asociada una serie de acciones R, que indican cmo
calcularlosvaloresdelosatributosenfuncindelosvaloresdelosatributosdelos
nodosvecinos.Lacorrespondenciaentraatributosyvaloresesesttica,esdecir,un
atributodeunnodoslopuedetomarunvalordeterminado.[8]
Unaaccinsemnticanosoloesunaasociacinaunsmbolo,sinoquetambinselepuede
aadircdigoaunaregla.Enlosejemplosquesevanamostraracontinuacin,lasacciones
se van a representar entre llaves y, para acceder a los atributos, cada smbolo no terminal
tieneasociadotrescampos,elnombredelsmbolonom,eltipodelsmbolotipoyelvalordel
atributoval.Lossmbolosterminales,tienentrescampos,elnombredelsmbololexnom,el
tipodelsmbololextipoyelvalordelatributolexval,yaqueseobtienendelanalizadorlxico.
Se muestra un pequeo ejemplo, donde se escribe por pantalla el valor del atributo del
smboloE1yT.
E1E2+T{cout.print(E1.val,T.lexval)}
48 C A P T U L O 3. U N C O M P I L A D O R
T IPOSDEATRIBUTOS
3.3.2
Losatributospuedenserdedosclases,segnquienlesproporcionasuvalor.
ATRIBUTOSSINTETIZADOS
Se calculan a partir de los valores de atributos de los nodos hijos en cualquier
subrbolqueaparezcan.Portanto,setratadeunainformacinqueasciendeporel
rboldurantesurecorrido.[2]
Enlasiguientegramticatodoslosatributossonsintetizados:
EE{E.val=E.val}
EE+T{E.val=E.val+T.val}
ET{E.val=T.val}
TT*F{T.val=T.val*F.val}
TF{T.val=F.val}
Fnum{F.val=num.lexval}
E'
10
10
10
E
6
T
T
F
4
Figura3.3.2AtributosSintetizados
C A P T U L O 3. U N C O M P I L A D O R 49
ATRIBUTOSHEREDADOS
Se calculan a partir de los valores de atributos del nodo padre o de los nodos
hermanos.Setratadeunainformacindescendentedeunladoalotrodelsubrbol.
[2]
Enelejemplosiguiente,aparecenatributosheredados:
DLT{L.tipo=T.tipo}
Tentero{T.tipo=entero.tipolex}
Lreal{T.tipo=real.tipolex}
LL,id{L.tipo=L.tipo,id.tipolex=L.tipo}
Lid{id.tipolex=L.tipo}
real
Figura3.3.3AtributosHeredados
Siunatributoessintetizadooheredadodebeserlosiempreentodaslasproducciones.Los
atributos terminales son siempre sintetizados y sus valores vienen siempre dados por el
analizadorlxico.Encambio,losheredadossirvenamenudoparaexpresardependenciaen
elcontextoenelqueaparecen.
50 C A P T U L O 3. U N C O M P I L A D O R
3.4
G ENERACINDECDIGO
Es una fase del compilador que se explicar de manera general para dar una idea global
sobresufuncionamiento.
La generacin de cdigo es la ltima fase del compilador y se encarga de convertir un
programa sintctica y semnticamente correcto en una serie de instrucciones para que
puedanserinterpretadasporunamquina.ComosemuestraenlaFigura3.4.1,laentrada
delgeneradordecdigoesunrbolsintcticoconatributos,dondelasalidaesunlenguaje
objeto,queconsigaserdesarrolladoporunamquina.[4]
rbol
Sintcticocon
atributos
Generadorde
cdigo
LenguajeObjeto
Figura3.4.1GeneradordeCdigo
Captulo4
DESARROLLO
En este captulo, se comenta todo el desarrollo del proyecto. Para ello se usa el lenguaje
Cosel y el mdulo Com, que es un generador de compiladores basado en analizadores
descendentes.
Comosehapodidoverenelcaptulo3,eldesarrollodelproyectoconsisteprincipalmenteen
dos etapas. La primera consiste en crear un analizador ascendente partiendo del mdulo
Comparaelanlisisdescendente.Estaeslapartemsimportantedelproyecto,yaquehay
quedesarrollarelanalizadorascendenteLALR(1).Lasegundaetapadeldesarrolloconsiste
en permitir al generador de compiladores Com la introduccin de atributos y acciones
semnticas,quesernrealizadasmedianteCosel.
4.1
L XICO
Enelapartadodeanlisislxico,lonicoqueseharealizadoesaplicarunScannerqueya
existapreviamentesobreelgeneradordecompiladoresComdeCosel.Paradeestaforma
poderleertodoslossmbolosdelacadenadeentrada.
4.2
S INTCTICO
Se parte del modulo Com para el anlisis descendente. El objeto gramtica es muy til, ya
que permite obtener todos los smbolos terminales y no terminales; las producciones, los
anulables,losprimeros,etc.Todoestoeslabaseparacrearunanalizadorascendente.
Loprimeroquesehaceenelanlisissintcticoespensarcomoalmacenarcadaunodelos
estados del autmata LR (1). Una forma de hacerlo es aadir a la GramaticaBNF una
estructurallamadaEstatsformadaporloscampos:
TypeEstat(NumEstat,Produc,Arestes)
52 C A P T U L O 4. D E S A R R O L L O
NumEstat:Elnmerocorrespondienteacadaestado.
Produc:Lasproduccionesquecontienecadaestado.
Arestes:Lastransicionesquevandeunestadoaotro.
PerotambinhayquecrearunaestructuraProducconlossiguientescampos:
TypeProduc(Valor,Punt,SimboloDeAvance,Final)
Valor:Elvalordelaproduccin.
Punt:Laposicindelpuntodentrodelaproduccin.
SmbolosDeAvance:Lossmbolosdeadelantocorrespondientesalaproduccin.
Final:EsunbooleanoqueretornaTruesilaproduccinhasidofinalizadayFalsesino
lohasido.
YArestesconloscorrespondientescampos:
TypeEstat(EstatAbans,Valor,EstSeg)
EstAbans:Estadoanterioralestadocreado(noutilizado).
Valor:Valordelaaristaosmboloconelcualsehacreadoelnuevoestado.
EstSeg:Elnuevoestadocreado.
Alobjetogramtica,selehanaadidotrescampos,elcorrespondientealaestructuraEstats,
elcampoNumEst,delaestructuraEstatsyelcampoTablaLALR,dondesealmacenalatabla
deanlisisascendenteLALR(1).
Type[public]GramaticaBNF(
Inicial, Terminals, NoTerminals, Regles, Produccions,
MaxNoTer, Diccionari, Anullables, Primers, Seguents,
Estats,NumEst,TablaLALR)
C A P T U L O 4. D E S A R R O L L O 53
A UTMATA LR (1)
4.2.1
ParaintroducirlaexplicacinsobreelautmataLR(1),sevaaexponerlospasosrealizados
por el mdulo Com. Estos no son otros que pasar de BNF a Producciones, clculo de
anulables y clculo de primeros. Todas estas funciones son necesarias, para la
implementacindelautmata.
Una vez obtenida toda la estructura para almacenar todos los campos del autmata, se
empiezaaconstruirelautmata.
SeinicializalalistadeestadosenlistavacayNumEstacero,porquinicialmentenoexiste
ningnestado.
Sehadebuscarenelconjuntodesmbolosnoterminales,elquecorrespondeconelsmbolo
inicial de la gramtica (CodInicial). Luego, se examina en todas las producciones de la
gramticalaquecorrespondeconCodInicial.Silaencuentra,secrealanuevaproduccincon
la estructura mencionada arriba, si no provoca un error. Esto funciona correctamente en
gramticas que tengan una nica produccin para el smbolo inicial. Para que funcione
correctamente con todas las gramticas se tendra que generar un smbolo inicial
automticamente.
Se llama a CrearClausura para completar las producciones que pueda haber en un estado.
Luego, se llama a CrearEstado, para crearlo a partir del conjunto de producciones de la
clausuray,porltimo,seaadenlastransiciones.
Elcdigobsicoparacrearelautmataes:
gl.Estats=[];
gl.NumEst=0;
varCodInicial=Found(p<gl.diccionari,p[1]==gl.Inicial.Exp.Function)
p[0];
varInicio=Found(p<gl.Produccions,p[0].cat==CodInicial)
[Prod(p,0,[EOF],False)];
varListaProducciones=gl.CrearClausura(Inicio);
54 C A P T U L O 4. D E S A R R O L L O
varEstat=gl.CrearEstado(ListaProducciones);
gl.Transiciones(Estat);
gl.Estats=reverse(gl.Estats);
Ahoraseexplicancadaunadelasfuncionesdeestealgoritmo.
4.2.1.1
Primeramente,hayqueobtenerelsmboloinicialdelagramtica.Sebuscaelsmboloinicial
hastaencontrarlo,perosinoloencuentra,seretornaError.Unavezencontradoelsmbolo
inicialsecreasuproduccindelsiguientemodo:
Inicio=[Prod(p,0,[EOF],False)]
Dondepeselvalordelaproduccininicial,elvalordelpuntoseencuentraoriginalmenteen
laposicin0,elsmbolodeadelantoesunalistaquecontienefinaldefichero[EOF],porque
yanohayningnsmbolodeadelantomsycomolaproduccinnohasidocompletada,el
valordelbooleanoesFalse.
CONJUNTODEPRODUCCIONESDELESTADOINICIAL
Enestecasoelconjuntodesmbolosdeadelantoesunalistaquecontieneelsmbolo
de fin de cadena [EOF], ya que es el smbolo que sigue al smbolo de inicio de la
gramtica.
C A P T U L O 4. D E S A R R O L L O 55
CONJUNTODEPRODUCCIONESDECUALQUIERESTADO
Cadavezqueseaadaunaproduccin,hayquecalcularsusmbolodeadelanto.Hay
dosposibilidades:
CuandoexisteunsmbolodespusdelnoterminalN,porejemplo,PN
{}. Entonces, el conjunto de smbolos adelantados del nuevo elemento
creadoserPRIMEROS{},yaqueestoesloquepuedecontinuaracadauno
deestoselementos,enparticularenestaposicinenconcreto.
AhorasemostrarelalgoritmodelafuncinCrearClausura:
Fun[public]gl:GramaticaBNF.CrearClausura(ListaProducciones)=>
{
ProcAgregarProduccion(produccion)=>
{
if(ListaProd.MemberP(Produccion))return;
ListaProd=produccion::ListaProd;
if(!produccion.final&&
TypeP(NoTerminalLALR,Produccion.valor[1][Produccion.punt
]))
{
for(p<gl.Produccions,
Produccion.valor[1][Produccion.punt].cat==p[0].cat
)
{
avance=PrimersDe(produccion.valor[1].tail
(produccion.punt+1),
produccion.SimbolosDeAvance);
AgregarProduccion(Prod(p,0,avance,0>=p[1].length);
}
}
}
for(p<ListaProducciones)
AgregarProducciones(p);
returnreverse(ListaProd)
}
56 C A P T U L O 4. D E S A R R O L L O
Unavezseobtieneelconjuntodeproducciones,hayquecomprobarque,sialadelantarel
puntodecadaunadelasproduccionesdelaclausura,sehadegenerarunnuevoestadooya
existeunoconlasmismasproduccionesqueelquesequierecrear.
Parapoderhacerestacomprobacinsemirasiexisteunestadoconlasmismasproducciones
que el que se va ha crear. Si ese estado ya existe, simplemente se aaden los smbolos de
adelantodelaactualproduccinyseretornaunatupla(Estado,False).Mientrasquesino
existe,secreaunnuevoestado,seincrementaelnmerodelestado,seaadeenelcampo
Producel conjuntodeproduccionesestablecidasencrear clausurayseponecomoarestes
unalistavaca.Porltimo,seretornaunatuplacon(EstadoNuevo,True).
As,cuandosecreanlastransicionessesabesihayqueaadirlasaristasono,dependiendo
sielsegundovalordelretornoesTrueoFalse.
Ahora, se muestra el cdigo de la funcin CrearEstado, donde ListaProducciones es un
parmetro que representa el conjunto de producciones, una vez hecha la clausura. Con el
procedimiento AadirAdelanto, se aaden los smbolos de adelanto a las producciones
igualesquecontengandiferentessmbolosdeadelanto.
Fun[public]gl:GramaticaBNF.CrearEstado(ListaProducciones)=>
{
Search(e<gl.Estats,CompararProducciones(e.Produc,ListaProduccione
s)){
AnadirAdelanto(ListaProducciones,e.Produc);
returne,false;
}
else{
varEstado=Estat(gl.NumEst,ListaProducciones,[]);
gl.Estats=estado::gl.Estats;
++gl.NumEst;
returnEstado,true;
}
}
C A P T U L O 4. D E S A R R O L L O 57
Unavezseobtieneelestado,solofaltaaadirsustransiciones.Paraesto,hayquecrearun
procedimiento, que cree una lista de aristas de cada uno de los estados que se vayan
creando.Enesteapartadohayquetenerencuentavariosaspectos:
Si existe una produccin dentro del conjunto de producciones que el punto haya
llegadoalfinal,noseaadelaarista.
Unavezyasehaconstruidolalistadearistas,sehandecrearlosnuevosestadoscon
lasproduccionescorrespondientes.Esenestemomentocuandosecrealaestructura
arestes,enlaqueseaadeelnmerodelestadoquesehabacreado,elsmbolode
laaristayelnmerodelestadoquesehadecrear.Portanto,laestructuraarestes
tienelasiguienteestructura:
Arestes(NumEstatAnterior,ValorArista,NumEstaSiguiente)
SielestadosehacreadonuevohayqueaadiralcampoAristalaestructuraArestes
y, adems, el conjunto de producciones que sean compatibles con la arista. Por
tanto,laestructuradeEstates:
Estat(NumEstat,ConjuntoProducciones,[Arestes(NumEstatAnte
rior,ValorArista,NumEstaSiguiente)])
58 C A P T U L O 4. D E S A R R O L L O
proc[public]gl:GramaticaBNF.Transiciones(estado)=>
{
varlpro=estado.produc;
while(lpro!=[]){
varp=lpro.head;
varresto=if(p.final)[]elsep.valor[1].tail(p.punt);
if(resto==[]){
lpro=lpro.tail;
}
else{
varsym=resto.head.cat;
varlprotran=[p1|p1<
lpro,p1.valor[1].tail(p1.punt)!=[],p1.valor[1].tai
l(p1.punt).head.cat==sym];
lpro=lprolprotran;
lprotran=[prod(p.valor,p.punt+1,p.SimbolosDeAvance,p.pun
t+1>=p.valor[1].length)|p<lprotran];
var|nuevoestado,nuevo|=gl.CrearEstado(gl.CrearClausura(l
protran));
estado.Arestes=Aresta(estado.numestat,sym,nuevoestado.nu
mestat)::estado.Arestes;
if(nuevo)
gl.transiciones(nuevoestado);
}
}
}
4.2.1.5 V ERESTADOS
ElprocedimientoVerEstados,esunaformaderepresentarmsvisualmenteelautmataLR
(1).
EnlaFigura4.2.1sepuedenvertodoslosestadosdelautmataLR(1),delaFigura3.2.12,sin
aplicarlafuncinVerEstados,esdecir,cadaestadoesunaestructuraformadaporelnmero
del estado, el conjunto de las producciones y la lista de aristas, que ya se han explicado
anteriormente.
C A P T U L O 4. D E S A R R O L L O 59
Estat(NumEst,Prod(Valor,Punt,SimbolosDeAvance,Final),
[Aresta(EstAbans,Valor,EstSeg)])
Estat(0,[Prod((0,[1]),0,[[]],False),Prod((1,[xi,bi]),0,[[]],Fal
se),Prod((1,[2]),0,[[]],False),Prod((2,[3]),0,[[]],False),Prod(
(3,[4]),0,[[]],False),Prod((4,[xi]),0,[[]],False),Prod((3,[ai,2
,bi]),0,[[]],False)],[Aresta(0,ai,7),Aresta(0,4,6),Aresta(0,3,5
),Aresta(0,2,4),Aresta(0,xi,2),Aresta(0,1,1)])
Estat(1,[Prod((0,[1]),1,[[]],True)],[])
Estat(2,[Prod((1,[xi,bi]),1,[[]],False),Prod((4,[xi]),1,[[]],Tr
ue)],[Aresta(2,bi,3)])
Estat(3,[Prod((1,[xi,bi]),2,[[]],True)],[])
Estat(4,[Prod((1,[2]),1,[[]],True)],[])
Estat(5,[Prod((2,[3]),1,[[]],True)],[])
Estat(6,[Prod((3,[4]),1,[[]],True)],[])
Estat(7,[Prod((3,[ai,2,bi]),1,[[]],False),Prod((2,[3]),0,[bi],F
alse),Prod((3,[4]),0,[bi],False),Prod((4,[xi]),0,[bi],False),Pr
od((3,[ai,2,bi]),0,[bi],False)],[Aresta(7,ai,13),Aresta(7,xi,12
),Aresta(7,4,11),Aresta(7,3,10),Aresta(7,2,8)])
Estat(8,[Prod((3,[ai,2,bi]),2,[[]],False)],[Aresta(8,bi,9)])
Estat(9,[Prod((3,[ai,2,bi]),3,[[]],True)],[])
Estat(10,[Prod((2,[3]),1,[bi],True)],[])
Estat(11,[Prod((3,[4]),1,[bi],True)],[])
Estat(12,[Prod((4,[xi]),1,[bi],True)],[])
Estat(13,[Prod((3,[ai,2,bi]),1,[bi],False),Prod((2,[3]),0,[bi],
False),Prod((3,[4]),0,[bi],False),Prod((4,[xi]),0,[bi],False),P
rod((3,[ai,2,bi]),0,[bi],False)],[Aresta(13,ai,13),Aresta(13,xi
,12),Aresta(13,4,11),Aresta(13,3,10),Aresta(13,2,14)])
60 C A P T U L O 4. D E S A R R O L L O
Estat(14,[Prod((3,[ai,2,bi]),2,[bi],False)],[Aresta(14,bi,15)])
Estat(15,[Prod((3,[ai,2,bi]),3,[bi],True)],[])
Figura4.2.1EstadosdelautmataLR(1)
EnlaFigura4.2.2selogravertodoslosestadosyaristasdelautmataLR(1),representados
enlaFigura3.2.12deunaformamsvisual,aplicandolafuncinVerEstados.Acontinuacin,
semuestralanotacindecmoserepresentaelautmata.
Estado:NumEst
ProduccionIzquierdaProduccionDerecha{Simboloadelanto}
Aristas
EstadoActualSimboloEstadoSiguiente
C A P T U L O 4. D E S A R R O L L O 61
ESTADO:0
<Si>><Si_1>{<SCHAR:EOF>}
<Si_1>>xibi{<SCHAR:EOF>}
<Si_1>><ao>{<SCHAR:EOF>}
<ao>><ao_1>{<SCHAR:EOF>}
<ao_1>><bo>{<SCHAR:EOF>}
<bo>>xi{<SCHAR:EOF>}
<ao_1>>ai<ao>bi{<SCHAR:EOF>}
ARISTAS
0ai>7
0<bo>>6
0<ao_1>>5
0<ao>>4
0xi>2
0<Si_1>>1
ARISTAS
7ai>13
7xi>12
7<bo>>11
7<ao_1>>10
7<ao>>8
ESTADO:8
<ao_1>>ai<ao>bi{<SCHAR:EOF>}
ARISTAS
8bi>9
ESTADO:9
<ao_1>>ai<ao>bi{<SCHAR:EOF>}
ESTADO:10
<ao>><ao_1>{bi}
ESTADO:11
<ao_1>><bo>{bi}
ESTADO:12
<bo>>xi{bi}
ESTADO:13
<ao_1>>ai<ao>bi{bi}
<ao>><ao_1>{bi}
<ao_1>><bo>{bi}
<bo>>xi{bi}
<ao_1>>ai<ao>bi{bi}
ARISTAS
13ai>13
13xi>12
13<bo>>11
13<ao_1>>10
13<ao>>14
ESTADO:1
<Si>><Si_1>{<SCHAR:EOF>}
ESTADO:2
<Si_1>>xibi{<SCHAR:EOF>}
<bo>>xi{<SCHAR:EOF>}
ARISTAS
2bi>3
ESTADO:3
<Si_1>>xibi{<SCHAR:EOF>}
ESTADO:4
<Si_1>><ao>{<SCHAR:EOF>}
ESTADO:5
<ao>><ao_1>{<SCHAR:EOF>}
ESTADO:6
<ao_1>><bo>{<SCHAR:EOF>}
ESTADO:7
<ao_1>>ai<ao>bi{<SCHAR:EOF>}
<ao>><ao_1>{bi}
<ao_1>><bo>{bi}
<bo>>xi{bi}
<ao_1>>ai<ao>bi{bi}
ESTADO:14
<ao_1>>ai<ao>bi{bi}
ARISTAS
14bi>15
ESTADO:15
<ao_1>>ai<ao>bi{bi}
Figura4.22AutmataLR(1)enCOSEL
62 C A P T U L O 4. D E S A R R O L L O
4.2.2
SepuedeobservarqueenelautmataLR(1)hayestadosquecontienenproduccionesmuy
parecidas, en las que slo se diferencian los smbolos de adelanto. Por esta razn, se crea
unafuncindenominadaCompararProducciones,parapasardeLR(1)aLALR(1)yaspoder
reducireltamaodelautmata,agrupandoestosestadostansimilares.
Primero,secompruebaquelasproduccionesdelosestadosseanigualesaunquecontengan
diferentessmbolosdeadelanto.Despus,secreaunnuevoestadomanteniendolasmismas
producciones y, en el campo de smbolos de adelanto, simplemente se aaden todos los
smbolosdeadelantoquehabaenlosestadosantesdeagrupar.Esunprocesoiterativoque
terminacuandonosepuedanapilarmsestados.
En la siguiente Figura se puede ver, la lista de todos los estados del autmata LALR (1)
representadoenlaFigura3.2.15.
Estat(0,[Prod((0,[1]),0,[[]],False),Prod((1,[xi,bi]),0,[[]],Fal
se),Prod((1,[2]),0,[[]],False),Prod((2,[3]),0,[[]],False),Prod(
(3,[4]),0,[[]],False),Prod((4,[xi]),0,[[]],False),Prod((3,[ai,2
,bi]),0,[[]],False)],[Aresta(0,ai,7),Aresta(0,4,6),Aresta(0,3,5
),Aresta(0,2,4),Aresta(0,xi,2),Aresta(0,1,1)])
Estat(1,[Prod((0,[1]),1,[[]],True)],[])
Estat(2,[Prod((1,[xi,bi]),1,[[]],False),Prod((4,[xi]),1,[[]],Tr
ue)],Aresta(2,bi,3)])
Estat(3,[Prod((1,[xi,bi]),2,[[]],True)],[])
Estat(4,[Prod((1,[2]),1,[[]],True)],[])
Estat(5,[Prod((2,[3]),1,[bi,[]],True)],[])
Estat(6,[Prod((3,[4]),1,[bi,[]],True)],[])
Estat(7,[Prod((3,[ai,2,bi]),1,[bi,[]],False),Prod((2,[3]),0,[bi
],False),Prod((3,[4]),0,[bi],False),Prod((4,[xi]),0,[bi],False)
C A P T U L O 4. D E S A R R O L L O 63
,Prod((3,[ai,2,bi]),0,[bi],False)],[Aresta(7,ai,7),Aresta(7,xi,
10),Aresta(7,4,6),Aresta(7,3,5),Aresta(7,2,8)])
Estat(8,[Prod((3,[ai,2,bi]),2,[[]],False)],[Aresta(8,bi,9)])
Estat(9,[Prod((3,[ai,2,bi]),3,[[]],True)],[])
Estat(10,[Prod((4,[xi]),1,[bi],True)],[])
Figura4.2.3EstadosLALR(1)
ESTADO:0
ESTADO:5
<Si>><Si_1>{<SCHAR:EOF>}
<Si_1>>xibi{<SCHAR:EOF>}
<Si_1>><ao>{<SCHAR:EOF>}
<ao>><ao_1>{<SCHAR:EOF>}
<ao_1><bo>{<SCHAR:EOF>}
<bo>>xi{<SCHAR:EOF>}
<ao_1>>ai<ao>bi{<SCHAR:EOF>}
<ao>><ao_1>{bi,<SCHAR:EOF>}
ARISTAS
ESTADO:7
0ai>7
0<bo>>6
0<ao_1>>5
0<ao>>4
0xi>2
0<Si_1>>1
<ao_1>>ai<ao>bi{bi,
<SCHAR:EOF>}
ESTADO:1
<Si>><Si_1>{<SCHAR:EOF>}
ESTADO:2
<Si_1>>xibi{<SCHAR:EOF>}
<bo>>xi{<SCHAR:EOF>}
ARISTAS
2bi>3
ESTADO:3
<Si_1>>xibi{<SCHAR:EOF>}
ESTADO:6
<ao_1>><bo>{bi,<SCHAR:EOF>}
<ao>><ao_1>{bi}
<ao_1>><bo>{bi}
<bo>>xi{bi}
<ao_1>>ai<ao>bi{bi}
ARISTAS
7ai>7
7xi>10
7<bo>>6
7<ao_1>>5
7<ao>>8
ESTADO:8
<ao_1>>ai<ao>bi
{<SCHAR:EOF>}
ARISTAS
8bi>9
ESTADO:9
64 C A P T U L O 4. D E S A R R O L L O
<ao_1>>ai<ao>bi.{<SCHAR:EOF>}
ESTADO:4
<Si_1>><ao>{<SCHAR:EOF>}
ESTADO:10
<bo>>xi{bi,<SCHAR:EOF>}
Figura4.2.4AutmataLALR(1)enCOSEL
T ABLADEANLISIS
4.2.3
UnavezyaestconstruidoelautmataLALR(1),hayquecrearlatabladeanlisis,peroen
vez de crearla como se muestra en la Figura 3.2.13, se crear un vector de listas llamado
SparceArray.Aunqueseamslentoalrealizarunabsqueda,noconsumetantamemoria,ya
que no existen posiciones vacas en la matriz. Gracias a este vector de listas, tambin se
puederepresentarelautmataLR(1).
Paracrearestevector,primerosecreantresnuevasestructuras,correspondientesalestado
delautmatayalasaccionesReduceyDesplaza.
ESTADOPILA
Slo muestra el estado del autmata donde se encuentra en este momento.
FormadosoloporuncampoEstado.
TypeEstadoPila(Estado);
DESPLAZA
Es una estructura formada por dos campos: el primero, llamado smbolo, indica el
smboloquesehadeleerparapoderdesplazarlaproduccinyelsegundo,estado,
quemuestraelestadodestino.
TypeDesplaza(simbolo,estado);
C A P T U L O 4. D E S A R R O L L O 65
REDUCE
Es una estructura que tiene tres campos: el primero, denominado smbolo, que
muestra el smbolo que se ha de leer para reducir la produccin. El segundo,
SimbolosRegla, que corresponde al tamao de la parte derecha de la produccin,
para saber cuntos elementos se han de extraer de la pila. Y el tercero,
SimboloReduccion,eselsmbolodelaizquierdadelaproduccin,porelcualsehade
sustituirelantiguosmboloconsuestado.
TypeReduce(simbolo,SimbolosRegla,SimboloReduccion);
UnavezsesabecomosonlasestructurasDesplaza,ReduceyEstadoPila,secreaelvectorde
listas.
Una vez obtenido el vector de anlisis, que se muestra en la Figura 4.2.5 a partir de las
accionesproducidasenelautmataLALR(1).Sehaderealizarelanalizadorascendente.
([Desplaza(1,1),Desplaza(xi,2),Desplaza(2,4),Desplaza(3,5),Desplaza(4
,6),Desplaza(ai,7)],[Reduce(<SCHAR:EOF>,1,0)],[Reduce(<SCHAR:EOF>,1,4
),Desplaza(bi,3)],[Reduce(<SCHAR:EOF>,2,1)],[Reduce(<SCHAR:EOF>,1,1)]
,[Reduce(<SCHAR:EOF>,1,2),Reduce(bi,1,2)],[Reduce(<SCHAR:EOF>,1,3),Re
duce(bi,1,3)],[Desplaza(2,8),Desplaza(3,5),Desplaza(4,6),Desplaza(xi,
10),Desplaza(ai,7)],[Desplaza(bi,9)],[Reduce(<SCHAR:EOF>,3,3)],[Reduc
e(bi,1,4)])
Figura4.2.5Vectordelistasdeanlisis
66 C A P T U L O 4. D E S A R R O L L O
4.2.4
SiseempiezaenelestadoS0y,comoentrada,seleeelprimersmbolodelacadenaSi,hay
quebuscarenelvectordelistasycomprobarsihayalgunaaccinparael smboloSienel
estadoS0.Siexiste,simplementehayquemirarcualdelasdosestructurases:
Elsmbolodeadelantoseobtieneapartirdelalecturadelacadenadeentrada.Estesmbolo
correspondealsiguientesmboloaleer.Deestamanera,elanalizadorescapazdesaberqu
direccintomar.Elsmbolodeadelantoseaadeenlapilaenelmomentodedesplazary,se
ha de extraer de la pila a la hora de reducir. En el siguiente desplazamiento se vuelve a
aadir.
D E S P L A Z A ( S M B O L O , E S T A D O )
En caso de encontrar la estructura Desplaza (smbolo, estado), quiere decir que, el
smboloactualdelacadenadeentrada,esunodelosqueesperaunadelasreglasconla
parte derecha parcialmente analizadas. Por este motivo, se puede pasar a un nuevo
estadodelautmatayavanzarunaposicinenlacadenadeentrada,demaneraqueel
smboloactualpaseaserelsiguientealanalizado.Estoimplica:
Introducirenlapilaelcampoestadodelaestructuradesplaza.
Introducirenlapilaelnuevosmbolodeentrada.
R E D U C E ( S I M B O L O , S I M B O L O S R E G L A , S I M B O L O R E D U C C I O N )
Cuando se halla la estructura Reduce (Smbolo, SmbolosRegla, SmboloReduccion),
quieredecirquelaproduccinrepresentadaenelestadoactualsehadedesplazartoda
supartederechacontamaoSmbolosReglaysubstituirlaporelsmbolonoterminalde
laparteizquierdadelaproduccin(SmboloReduccion).Estoconlleva:
Sacardelapilatodalainformacinasociadaconlapartederechadelaregla,
correspondiente al tamao SimbolosRegla. Como al desplazar se almacena
tanto el estado como el smbolo de entrada, se tiene que extraer
2XSimbolosReglaelementos.
Introducirenlapilaelsmbolonoterminaldelaparteizquierdadelaregla
(SimboloReduccion).
C A P T U L O 4. D E S A R R O L L O 67
Alahoradebuscarenelvectordelistas,sinoseencuentraningncampoquecontengael
smboloqueseestleyendoenlacadenadeentrada,entoncesseproduceunerror.
Lacadenaesaceptadacuandosereducehastallegaralsmboloinicial,quecorrespondecon
elvalordelnoterminal0.
Proc[public]gl:GramaticaBNF.AnalizadorLALR(scan)=>
{
varSimboloAdelanto=unbound;
FunLeerSimbolo()=>
{
if(SimboloAdelanto!=unbound){
vartmp=SimboloAdelanto;
SimboloAdelanto=unbound;
returntmp;
}
var|cat,params...|=scan();
TerminalLALR(cat,params)
}
varPila=[LeerSimbolo(),EstadoPila(0)];
for(){
varSimboloActual=Pila.Head;
varEstadoActual=Pila.Tail.Head.Estado;
Search(p<gl.TablaLALR[EstadoActual],p.simbolo==simboloActual.cat)
switch(p){
Desplaza=>{
Pila=EstadoPila(p.Estado)::Pila;
Pila=LeerSimbolo()::Pila;
}
Reduce=>{
varsimboloReduccion=p.FuncionDeReduccion()(Pila);
for(i<1..p.SimbolosRegla*2+1)Pila=Pila.Tail;
Pila=simboloReduccion::Pila;
SimboloAdelanto=SimboloActual;
if(SimboloReduccion.cat==0){
return;
}
}
68 C A P T U L O 4. D E S A R R O L L O
}
}
else{
throw
SyntaxError("no encontrada la
",EstadoActual,"",simboloActual);
transicin
para
}
}
}
4.3
AADIRACCIONESSEMNTICAS
Enestaseccindeldesarrollo,unavezobtenidalaestructuradelanlisissintctico,sehade
poderrealizaraccionessemnticas.Paraello,sehandetenerclarostresconceptos.
Primero,sehadeobtenerlosvaloresdelosatributos.Cadasmbolodelagramtica
S,yaseaterminalonoterminaltieneasociadounconjuntofinitodeatributos.Como
semuestraenesteejemplo,parapoderhacerlasuma,antes,sehadesabercuales
sonlosvaloresdeb,cyd.
A(a)B(b)C(c)D(d){A.a=B.b+C.c+D.d}
Cada produccin puede tener asociada una accin semntica que indica cmo
calcular los valores de los atributos. Esta accin se sita al final de la produccin y
solamenteseaplicacuandolaproduccinsehacumplido.Comosepuedeverenel
casoanterior,laaccinA.a=B.b+C.c+D.dsloseproducecuandolareglahasido
completada.
Primero, hay que extraer los atributos de los smbolos porque, cuando se pasa de BNF a
producciones,sepierdentodoslosparmetrosylossmbolosdeaccin.
Para ello, hay que aadir en las estructuras de los smbolos terminales y no terminales un
campo denominado Parametres. De esta manera, se obtienen estos atributos como se
muestraacontinuacin.
Type[public,Print=Contents]NoTerminal(Exp,Parametres)
C A P T U L O 4. D E S A R R O L L O 69
Type[public,Print=Contents]Terminal(Cat,Parametres)
AlaadirelcampoParametresalaestructuradelossmbolosterminalesynoterminales,se
hamodificadoalgunaspartesdelcdigo,paraqueaceptenlanuevaestructura.
Portanto,lacuestinesquecadanoterminaldelagramticatengaasociadounatributo,y
se aplique la propagacin de estos atributos desde los terminales a los no terminales. Se
logradichapropagacin,reduciendounaregladeproduccincadavezquesequeseejecute
unaaccin.
En el anlisis sintctico slo se almacena en la pila una tupla con el estado y el smbolo.
Mientrasqueahora,parapoderaplicaraccionessemnticas,selehadeaadirunatuplacon
elestado,smboloyatributo.Deestamanera,unatributoesunainformacinasociadaaun
smbolotantoterminalcomonoterminal.Enelsiguienteejemplo,sepuedeverlapilaquese
usa en el anlisis sintctico, y la que se va a emplear para el semntico.
Smbolo
Atributo
Smbolo
Sn
Sn
...
...
Smbolo
Smbolo
Atributo
S0
S0
Figura4.3.1Pilaenanlisissintcticoysemntico
Paraalmacenarlaaccindecadaunadelasproducciones,hayqueaadiruncampomsala
estructuraproduccions,llamadoaccin.
Type Produccions(Parte Izquierda Produc, Parte derecha Produc,
Accion)
70 C A P T U L O 4. D E S A R R O L L O
F UNCINDEREDUCCIN
4.3.1
Parapoderrealizarloexplicadoanteriormente,hayquemodificarlafuncindecreartabla
deanlisis.
Parapoderejecutarunaaccinsemntica,hayqueaadirunafuncinannimaenel
campo SmboloReduccion de la estructura Reduce, que es la que realiza la accin
semntica.
TypeReduce(simbolo,SimbolosRegla,SimboloReduccion)
Lafuncindereduccinconstadetrespartes:
1. Declaracindelosatributosqueseencuentranenlapartederechadela
regla.
2. Realizacindelaaccinsemntica.
3. Construccin del smbolo no terminal de la izquierda de la regla
mediantelosatributosquesehabandeclarado.
Semuestraunpequeoejemplodondeserealizalaaccindev=a*b,paraello,como
sehaexplicado,primerosedeclaranlosatributosdelaparteizquierdadelareglay
se les asigna el valor correspondiente almacenado en la pila. Despus se realiza la
acciny,finalmente,seconstruyeelnoterminalconelvalorobtenidodelaaccin.
Vara=Pila.Head(6).Params[0];
Varb=Pila.Head(2).Params[0];
Varv=(a*b);
NoTerminalLALR(1,Vector(v))
Acontinuacin,semuestraelcdigodelafuncinCrearTablaAccion_Ir,dondesemuestrala
funcindereduccin.
Proc[public]gl:GramaticaBNF.CrearTablaAccion_Ir()=>
{
varMatriz=newvector[gl.Estats.length];
for(i<Matriz:Index)Matriz[i]=[];
C A P T U L O 4. D E S A R R O L L O 71
for(e<gl.Estats)
{
for(ar<e.arestes)
{
Matriz[e.NumEstat]=Desplaza(ar.valor,ar.EstSeg)
::Matriz[e.NumEstat];
}
for(ep<e.Produc,ep.Final)
{
for(sda<ep.SimbolosDeAvance)
{
//Funcindereducci
varp=ep.valor;
varres=newapply(`vector,p[0].params.length);
vardecs=<<{}>>;
for(i<p[0].params:Index){
varparam=p[0].params[i];
res.Arg(i)=param;
}
for(s<p[1],pos<0..;ip<s.params:Index){
vardec=<<var<s.params[ip]>=Pila.Head(<(p[1].Length
pos)*2>).Params[<ip>]>>;
decs=<<<decs>;<dec>>>;
}
var f=Eval(<< AFun(pila)=> { <decs>; <ep.valor[2]>;
NoTerminalLALR(<ep.valor[0].cat>,<res>)}>>);
Matriz[e.NumEstat]=Reduce(sda,ep.valor[1].length,f)::Matriz[
e.NumEstat];
}
}
}
gl.TablaLALR=Matriz;
}
SolamenteseaadealautmataLALR(1)delanlisissintctico,losatributosacadaunode
los smbolos (terminales y no terminales) y las acciones correspondientes al final de cada
produccin.
Seguidamente,semuestraunejemploconunagramticamuysencilla,donde@varv=a+b,
representalaaccinsemnticadelosatributosayb:
72 C A P T U L O 4. D E S A R R O L L O
Rule<ini(v)>::=<inicio(v)>
Rule<inicio(v)>::=<termino(a)>+<termino(b)>@varv=a+b;
Rule<termino(v)>::=numero#(v)
Lanotacinusadapararepresentarelautmataeslasiguiente,
Estado:NumerodelEstado
ProducIzquierdaProducDerecha{Adelanto}@(ACCION)
Aristas
EstadoActualSmboloEstadoSiguiente
Donde accin en vez de ser representada en forma de rbol, se muestra como una simple
operacin,paraqueseamscomprensible.Porejemplo,laaccin
Apply(Var,[],Apply(=,v,Apply(+,a,b)
Serepresentav=a+b
Elautmatageneradoapartirdeestagramticaeselqueseindicaacontinuacin:
ESTADO:0
<ini(v)>><Inicio(v)>{EOF}@(InstrNull)
<Inicio(v)>><termino(a)>+<termino(b)>{EOF}@(v=a+b)
<termino(v)>>Numero#(v){+}@(InstrNull)
ARISTAS
0Numero>5
0<termino>>2
0<Inicio>>1
ESTADO:1
<ini(v)>><Inicio(v)>{EOF}@(InstrNull)
ESTADO:2
<Inicio(v)>><termino(a)>+<termino(b)>{EOF}@(v=a+b)
ARISTAS
2+>3
ESTADO:3
C A P T U L O 4. D E S A R R O L L O 73
<Inicio(v)>><termino(a)>+<termino(b)>{EOF}@(v=a+b)
<termino(v)>>Numero#(v){<EOF>}@(InstrNull)
ARISTAS
3Numero>5
3<termino>>4
ESTADO:4
<Inicio(v)>><termino(a)>+<termino(b)>{EOF}@(v=a+b)
ESTADO:5
<termino(v)>>Numero#(v){+,EOF}@(InstrNull)
Figura4.3.2AutmataLALR(1)conatributos
SepuedeverenlaFigura4.3.2,quelaaccinseaadeentodoslosestadosdondeaparecela
produccin
Rule<inicio(v)>::=<termino(a)>+<termino(b)>
Peroesta,sloseaplicacuandolaproduccinhafinalizado,esdecir,enelestado4.Ahora,
sevecmoactaelanalizadorLALR(1),cuandorecibecomoentrada10+5.
ElresultadodeCoselsemuestradeestaforma:
Pila>[TerminalLALR(Numero,Vector(10)),EstadoPila(0)]
Accion>Desplaza(Numero,5)
Parapoderverlospasosdeunaformamsclarasesimplificadelasiguienteforma,
Pila>[Numero(10),S0]
Accion>Desplaza(Numero,S5)
Ahora,semuestraelresultadodelaejecucindeformamsvisual:
Pila>[Numero(10),S0]
Accion>Desplaza(Numero,S5)
74 C A P T U L O 4. D E S A R R O L L O
Pila>[+(),S5,Numero(10),S0]
Accion>Reduce(+,1,FuncionAnonima)
Pila>[termino(10),S0]
Accion>Desplaza(termino,S2)
Pila>[+(),S2,Termino(10),S0]
Accion>Desplaza(+,S3)
Pila>[Numero(5),S3,+(),S2,Termino(10),S0]
Accion>Desplaza(Numero,S5)
Pila>[EOF(),S5,Numero(5),S3,+(),S2,Termino(10),S0]
Accion>Reduce(EOF,1,FuncionAnonima)
Pila>[Termino(5),S3,+(),S2,Termino(10),S0]
Accion>Desplaza(Termino,S4)
Pila>[EOF(),S4,Termino(5),S3,+(),S2,Termino(10),S0]
Accion>Reduce(EOF,3,FuncionAnonima)
Pila>[Inicio(15),S0]
Accion>Desplaza(Inicio,1)
Pila>[EOF(),S1,Inicio(15),S0]
Accion>Reduce(EOF,1,FuncionAnonima)
Aceptado[ini(15),S0]
Figura4.33AnlisisLALR(1)conatributos
C A P T U L O 4. D E S A R R O L L O 75
4.3.2
A TRIBUTOS H EREDADOS
En este proyecto slo se aplican atributos sintetizados. El nodo padre, puede obtener el
valor de un atributo cuando se efecta la reduccin. Por ejemplo, para que A obtenga el
valor de la suma, se ha de reducir la produccin y, en este momento, se aplica la accin
semnticaA.val=B.val+C.val.
ABC{A.val=B.val+C.val}
B.val
C.val
Reduccin
A A.val
A.val=B.val+C.val
En el caso de atributos heredados, calculados a partir del nodo padre o de los nodos
hermanos,elvalordeestosatributos noseencuentraenlapilahastaque nosereducela
produccin.
Enelejemplosiguiente,
ABC{C.val=A.val+B.val}
76 C A P T U L O 4. D E S A R R O L L O
NosepuedeobtenerelvalordeChastaquenosereduzcalaproduccin,ABC,perola
produccinnosepuedereducirporquefaltaelvalordeA.
YACCresuelveelproblema,mediantedesplazamientosnegativosenlapila.Puedenaparecer
varioscasos:
DondeA.valyX.valsonatributossintetizadosyY.valesheredado.Sepuedeacceder
alvalordeX.valporquetodavaseencuentraenlapila.
Cima
Y.val
X.val
Y.val=X.val
Acceso,alatributoheredadodelnodopadre.SisesuponeAXY.
Los atributos heredados de A no pueden estar almacenados en A, ya que no se
reservaespacioparaAhastaquenosereduce,quitandoXeYdelapila.
Lasolucinesquelosatributosheredadosnosealmacenanconelsmbolosinocon
otrosmboloanteriorintroducido.Porejemplo,
AXY{X.val=A.val}
Inicio
Y.val
X.val
@1 A.h
$1
$0
$1
Reduccin
Inicio
A.val
@1 A.h
$0
$1
C A P T U L O 4. D E S A R R O L L O 77
Captulo5
CONCLUSIONES
Gracias a este proyecto se ha aprendido a crear un generador de compilador basado en
analizadoresascendentes.Todoesteprocesohaservidoparaconoceryentendercadauna
delasfasesdeuncompilador,enespecialalanlisissintcticoLALR(1).
Hayquedestacar,todoslosconocimientosadquiridosconlautilizacindeCosel.Tambin
estaexperienciahaservidoparaponerapruebalosconocimientosadquiridosdurantetoda
lacarrera.
Finalmentelosobjetivoslogradoshansido:
S I N T C T I C O : Se ha conseguido ampliar el modulo Com para examinar un analizador
ascendenteLALR(1).ParaellosehatenidoquecrearunaautmataLALR(1),crearunatabla
deanlisis,quecontienetodaslasaccionesquepuedegenerarlagramticay,finalmente,el
analizadorLALR(1),quecompruebasisepuedecrearelanalizadorapartirdelagramtica
ascendenteLALR(1)ysiunacadenadeentradaesaceptadaporelanalizador.
S E M N T I C O : Se ha logrado aadir a la gramtica de entrada, atributos y acciones a las
producciones.Portanto,elanalizadorascendenteescapazdedeclararestosatributos,para
poder aplicar estas acciones. Pero slo es capaz de aadir atributos sintetizados, no
heredados.
Como lneas futuras se puede considerar la posibilidad de aadir a la gramtica atributos
heredados,parapodertratarlosyfinalizarlageneracindelcompiladorascendente.
Captulo6
ANEXO
6.1 E XPRESIONES R EGULARES
Unaexpresinregularesunafrmulaquedescribeunposibleconjuntoinfinitodecadenas,
que se ajustan a un determinado patrn. Donde , representa una expresin regular que
representalasecuenciavaca.
Laexpresinregularmsbsicaesunpatrnqueseleccionasolouncarcter.Porejemplo,
elpatrna,queseleccionaelcarctera.[9]
Existentrespatronesbsicos:
C O N C AT E NAC I N
Seproduceunaconcatenacinentredoscaracteresayb.abdondeaAybB.
UNIN
Esteoperando|separaalternativas.Porejemplo,ab|cdseleccionaabobc.
R E P E T I C I N
b?:indicauncarcterbopcional
b*:indicaunaposiblesecuenciavacadecaracteresb.Porejemplo,{,b,bb,bbb,..
.}
b+:indicaunaposiblesecuenciadacaracteresb.Porejemplo,{b,bb,bbb,...}
82 C A P T U L O 6. A N E X O
Paratodagramticaesposibledefiniranulablescomoelconjuntodesmbolosnoterminales,
A,quepuedederivar,enunoomspasos,enlapalabravaca().
Se aplica el siguiente algoritmo para encontrar el conjunto de smbolos anulables de la
gramtica.
AnulablesS ={ANoTerminal|A}
Repetir
AnulablesS
=AnulablesS U{ANoTerminal|A , , ,
i1..m AnulablesS }
HastaqueAnulablesS ==AnulablesS
Se muestra un pequeo ejemplo, para una mejor comprensin, donde los smbolos en
maysculassonnoterminalesylosqueestnenminsculasonterminales.[9]
Apartirdelasiguientegramtica:
IDIA
Bg
DCA
Af
Ih
CAB
SepuedeverqueenelprimerpasolossmbolosAyBderivanen.
Enelsegundopaso,secompruebaqueCderivaenAB,portantoCderivatambinen.
ComoelsmboloDcontieneCyAqueyasonanulables,Dtambinloes.Enelsiguientepaso,
secompruebaquenohayningnsmboloquederivenideA,B,CniD.Portantoelconjunto
semantieneigualqueelanterior,yyasehafinalizado.[7]
Anulables ={A,B}
Anulables ={A,B,C}
Anulables ={A,B,C,D}
Anulables ={A,B,C,D}
C A P T U L O 6. A N E X O 83
6.3 C LCULODEPRIMEROS
Siesunacadenadesmbolosgramaticales,seconsideraPRIMEROS()comoelconjunto
determinalesqueinicianlascadenasderivadasde.
Para calcular PRIMEROS () basta con seguir las siguientes reglas para cada regla de
produccindelagramtica:
1.
2.
PRIMEROS()={}
3.
PRIMEROS(A),dondeAesunnoterminal.Hayqueseguirelsiguientealgoritmo:
PRIMEROS(a)={a},dondeaperteneceaunsmboloterminalyesunasubcadena
desmbolos,tantoterminalescomonoterminales.
SiAAnulableentoncesP (A)={}
SiNoP (A)={}
RepetirParacadaProduccintalque:AdeG
(A)=P (A)UPRIMEROS()
HastaqueAnoterminal:P (A)==P
(A)
Se mostrar un ejemplo para ver el clculo detallado de los PRIMEROS, para la siguiente
gramticaquedescribeoperacionesaritmticas:
ITB
Fx
TFC
C*FC|/FC|
B+TB|TB|
Como los smbolos B y C son anulables en el primer paso se aade (B)= (C)= {},
mientrasqueelrestoesconjuntovacio.Elrestodepasossedemuestraenlasiguientetabla.
[7]
84 C A P T U L O 6. A N E X O
Pasos
0
1
2
3
4
P(I)
{x}
{x}
P(T)
{x}
{x}
{x}
P(B)
{}
{,+,}
{,+,}
{,+,}
{,+,}
P(F)
{x}
{x}
{x}
{x}
P(C)
{}
{,*,/}
{,*,/}
{,*,/}
{,*,/}
PortantolosPRIMEROSson:
PRIMEROS(I)={x}
PRIMEROS(F)={x}
PRIMEROS(T)={x}
PRIMEROS(C)={,*,/}
PRIMEROS(B)={,+,}
1. AnlisisLALR(1)apartirdelagramticaquesemuestraenlaFigura3.2.10concadena
deentradaaxb.
Pila>[ai(),S0]
Accion>Desplaza(ai,S8)
Pila>[xi(),S8,ai(),S0]
Accion>Desplaza(xi,S11)
Pila>[bi(),S11,xi(),S8,ai(),S0]
Accion>Reduce(bi,1,FuncionAnonima)
Pila>[bo(),S8,ai(),S0]
Accion>Desplaza(bo,S7)
Pila>[bi(),S7,bo(),S8,ai(),S0]
Accion>Reduce(bi,1,FuncionAnonima)
Pila>[ao1(),S8,ai(),S0]
Accion>Desplaza(ao1,S6)
Pila>[bi(),S6,ao1(),S8,ai(),S0]
C A P T U L O 6. A N E X O 85
Accion>Reduce(bi,1,FuncionAnonima)
Pila>[ao(),S8,ai(),S0]
Accion>Desplaza(ao,S9)
Pila>[bi(),S9,ao(),S8,ai(),S0)]
Accion>Desplaza(bi,S10)
Pila>[EOF(),S10,bi(),S9,ao(),S8,ai(),S0]
Accion>Reduce(EOF,3,FuncionAnonima)
Pila>[ao1(),S0]
Accion>Desplaza(ao1,S6)
Pila>[EOF(),S6,ao1(),S0]
Accion>Reduce(EOF,1,FuncionAnonima)
Pila>[ao(),S0]
Accion>Desplaza(ao,S5)
Pila>[EOF(),S5,ao(),S0)]
Accion>Reduce(EOF,1,FuncionAnonima)
Pila>[Si1(),S0]
Accion>Desplaza(Si1,S2)
Pila>[EOF(),S2,Si1(),S0]
Accion>Reduce(EOF,1,FuncionAnonima)
Pila>[Si(),S0]
Accion>Desplaza(Si,S1)
Pila>[EOF(),S1,Si(),S0]
Accion>Reduce(EOF,1,FuncionAnonima)
Aceptado[ini(),S0]
86 C A P T U L O 6. A N E X O
2. AnlisisLALR(1)apartirdelagramticaquesemuestraenlaFigura3.2.10concadena
deentradaax.Enestecaso,lacadenadeentradaesrechazadaporelanalizadorLALR
(1),debidoaquenoesaceptadaporlagramticaascendente.
Pila>[ai(),S0]
Accion>Desplaza(ai,S8)
Pila>[xi(),S8,ai(),S0]
Accion>Desplaza(xi,S11)
Pila>[EOF(),S11,xi(),S8,ai(),S0]
Errorinline27Fromeja.csl
LoadedFrominit.csl
LoadedFromInicializationinit
aixi
^<SyntaxError:0342625C>
EXCEPTION<SyntaxError:0342625C>:noencontradalatransicinpara
11TerminalLALR(<SCHAR:EOF>,Vector())
ini(v)E(v)
E(v)T(v)
E(v)E(a)>+T(b)@varv=a+b;
T(v)numero#(v)
Pila>[Numero(10),S0]
Accion>Desplaza(Numero,S4)
Pila>[+(),S4,Numero(10),S0]
Accion>Reduce(+,1,FuncionAnonima)
Pila>[T(10),S0]
Accion>Desplaza(T,S5)
C A P T U L O 6. A N E X O 87
Pila>[+(),S5,T(10),S0]
Accion>Reduce(+,1,FuncionAnonima)
Pila>[E(10)),S0]
Accion>Desplaza(E,S1)
Pila>[+(),S1,E(10),S0]
Accion>Desplaza(+,S2)
Pila>[Numero(5),S2,+(),S1,E(10),S0]
Accion>Desplaza(Numero,S4)
Pila>[+(),S4,Numero(5),S2,+(),S1,E(10),S0)]
Accion>Reduce(+,1,FuncionAnonima)
Pila>[T(5),S2,+()),S1),E(10),S0]
Accion>Desplaza(T,S3)
Pila>[+(),S3,T(5),S2,+(),S1,E(10),S0]
Accion>Reduce(+,3,FuncionAnonima)
Pila>[E(15),S0]
Accion>Desplaza(E,S1)
Pila>[+(),S1,E,(15),S0]
Accion>Desplaza(+,S2)
Pila>[Numero(3),S2,+(),S1,E(15),S0]
Accion>Desplaza(Numero,S4)
Pila>[EOF(),S4,Numero(3),S2,+(),S1,E(15),S0)]
Accion>Reduce(EOF,1,FuncionAnonima)
Pila>[T(3),S2,+(),S1,E(15),S0]
Accion>Desplaza(T,S3)
88 C A P T U L O 6. A N E X O
Pila>[EOF(),S3),T(3),S2,+(),S1),E(15),S0)]
Accion>Reduce(EOF,3,FuncionAnonima)
Pila>[E(18),S0]
Accion>Desplaza(E,S1)
Pila>[EOF(),S1),E(18),S0]
Accion>Reduce(EOF,1,FuncionAnonima)
Aceptado[ini(18),S0]
BIBLIOGRAFA
[1] http://www.monografias.com/trabajos11/compil/compil.shtml#cla
[3] KennethC.Louden,ConstruccindeCompiladores.PrincipiosyPrcticas:Thomsom
Paraninfo,S.A.
[4] Aho,A.V.,Sethi,R.Ullman,J.D.,CompiladoresPrincipios,tcnicasyherramientas:
AddisonWesleyIberoamericana,S.A.:1990.
[5] http://www.cvc.uab.es/shared/teach/a20364/teoria/tema2.pdf
[6] SergioGlvezRojas,MiguelngelMoraMata,JAVAatope:Traductoresy
CompiladoresconLEX/YACC,JFLEX/CUPyJAVACC.UniversidaddeMlaga:2005.
[7] http://www.cvc.uab.es/shared/teach/a20364/teoria/tema3.pdf
[8] G.SnchezDueas,J.A.ValverdeAndreu,Compiladoreseintrpretes.Unenfoque
pragmtico.Madrid:ED.DiazSantos:1984.
[9] DickGrune,HenriE.Bal,CerielJ.H.JacobsyKoenG.Langendoen,Diseode
compiladoresmodernos.Espaa:McGrawHill:2007.
[10]ManuelAlfonsecaMoreno,MarinadelaCruzEcheanda,AlfonsoOrtegadela
Puente,EstrellaPulidoCaabate,Compiladoreseintrpretes:teorayprctica.
UniversidadAutnomadeMadrid:PearsonPrenticeHall:2006
NDICE
A
accionessemnticas,46
gramticaslibresdecontexto,16
anlisisascendente,19
anlisisdescendente,19
analizadorlxico,14
analizadorsemntico,46
analizadorsintctico,16,31
rbolsintctico,16,18,46
aristas,57
atributos,46
atributosheredados,49
atributossintetizados,48
B
Bison,4
LALR(1),26,62
lenguajedealtonivel,2
lenguajeensamblador,2
lenguajemquina,2
LEX/FLEX,5
Ll
LL(k),25
L
LR(0),26,27
LR(1),26,36
LR(k),25
C
clausura,37,55
compilador,3,13,14
parser,16
ConflictoDesplazarReduccin,30
pila,32
ConflictoReduccinReduccin,30
PRIMEROS,37
producciones,17
D
derivacin,17,20
derivacinporlaizquierda,20
desplazar,24
punto,23
R
reduccin,20,39
reducir,24
E
expresionesregulares,15
G
generacindecdigo,46,50
gramticasdeatributos,46
reglas,17
S
scanner,2,14,51
smbolodeadelanto,26
smboloinicial,17
smbolosdeadelanto,35,37
tabladesmbolos,14
smbolosgramaticales,17
token,15
smbolosnoterminales,17
traduccin,13
smbolosterminales,16,23
transicin,29
SLR(1),26
transiciones,57
T
tabladeanlisis,31,64
Y
YACC,3
Firmado:LaiaFelipMolina
Bellaterra,18deSeptiembrede2009
RESUMEN
The main objective of this project consists of creating a compiler generator based on
ascendinganalyzers.Tomakethisparser,wewillusetheCosellanguageandCommodule.
Thismoduleisacompilergeneratorbasedondescendinganalyzersandisbeingusedinthe
practiceofCompilersI.Thenewgenerator,whichtakesasinputagrammar,ithastocheckif
itisaLALR(1)ascendinggrammarandanalyzeaninputstringofsymbolsusingthegrammar.