1. PONTIFICIA UNIVERSISDA CATOLICA DEL ECUADOR
SEDE SANTO DOMINGO
Capítulo 2
Análisis Lexicográfico
Concepto de analizador léxico
Se encarga de buscar los componentes léxicos o palabras que componen el programa fuente,
según unas reglas o patrones.
Funciones del analizador léxico
El analizador léxico es la primera fase de un compilador. Su principal función consiste en leer
los caracteres de entrada y elaborar como salida una secuencia de componentes léxicos que
utiliza el analizador sintáctico para hacer el análisis.
Simplificación del diseño
U n diseño sencillo es quizás la ventaja más importante. Separar el análisis léxico del análisis
sintáctico a menudo permite simplificar una, otra o ambas fases. Normalmente añadir un
analizador léxico permite simplificar notablemente el analizador sintáctico. Aún más, la
simplificación obtenida se hace especialmente patente cuando es necesario realizar
modificaciones o extensiones al lenguaje inicialmente idead o; en otras palabras, se facilita
el mantenimiento del compilador a medida que el lenguaje evoluciona.
Eficiencia
La división entre análisis léxico y sintáctico también mejora la eficiencia del compilador. Gran
parte del tiempo de compilación se invierte en leer el programa fuente y dividirlo en
componentes léxicos.
Con técnicas especializadas de manejo de buffers para la lectura de caracteres de entrada y
procesamiento de patrones se puede mejorar significativamente el rendimiento de un
compilador.
Portabilidad
Se mejora la portabilidad del compilador, ya que las peculiaridades del alfabeto de
partida, del juego de caracteres base y otras anomalías propias de los dispositivos de entrada
pueden limitarse al analizador léxico.
COMPILADORES
Boris Chungandro
Willian Gallo
2. PONTIFICIA UNIVERSISDA CATOLICA DEL ECUADOR
SEDE SANTO DOMINGO
Token, patrón y lexema
Patrón: es una expresión regular.
Token: es la categoría léxica asociada a un patrón. Cada token se convierte en un número o
código identificador único. En algunos casos, cada número tiene asociada información
adicional necesaria para las fases posteriores de la etapa de análisis. El concepto de token
coincide directamente con el concepto de terminal desde el punto de vista de la gramática
utilizada por el analizador sintáctico.
Lexema: Es cada secuencia de caracteres concreta que encaja con un patrón.
P.ej: “8", “23" y “50" son algunos lexemas que encajan con el patrón (‘0'|’1'|’2'| ... |’9')+. E l
número de lexemas que puede encajar con un patrón puede ser finito o infinito, p.ej. en el
patrón ‘W ’‘H ’‘I’‘L’‘E ’ sólo encaja el lexema “W H ILE ”.
El generador de analizadores lexicográficos: PCLex
Enestasecciónsedescribelaherramientaactualmentemásextendida,llamada
laespecificacióndeanalizadoresléxicosengeneral
Lex,para
Creacióndeunanalizadorléxico
PCLextienesupropiolenguaje,alquellamaremos
Lexyquepermiteespecificarlaestructuraabstractade unanalizadorléxico
Lospasosparacrearunanalizadorléxicoconestaherramientason
ConstruirunficherodetextoenlenguajeLexquecontienelaestructura
abstractadelanalizador.
Metacompilarelficheroanteriorcon
PCLex.Asíseobtendráunfichero
fuenteenCestándar.Algunasveceshayqueefectuarmodificacionesdirectas
enestecódigo,aunquelasúltimasversionesdePCLexhandisminuidoal
máximoestassituaciones.
CompilarelfuenteenCgeneradoporPCLexconuncompiladorC,conlo
queobtendremosunejecutablequesiguelospasosdescritosenelepígrafe
COMPILADORES
Boris Chungandro
Willian Gallo
3. PONTIFICIA UNIVERSISDA CATOLICA DEL ECUADOR
SEDE SANTO DOMINGO
Premisas deLexparareconocerlexemas
Elyylex()generadoporPCLexsiguedosdirectricesfundamentalespara reconocer lexemas
en caso de ambigüedad. Estas directrices son, por orden de prioridad:
1. Entrarsiempreporel patrónquereconoceellexemamáslargoposible.
2. Encasodeconflictousaelpatrónqueapareceenprimeraposición.
CcaracteresespecialesdeLex
Sirveparaencerrarcualquiercadenadeliterales.
Haceliteralalsiguientecarácter.Ej.:”reconoceunascomillas.
Tambiénse
utilizaparaexpresar
aquelloscaracteres
quenotienenrepresentacióndirecta
porpantalla:nparaelretornodecarro,
Caracteresdesensibilidadalcontexto
Lexsuministraciertascapacidades
parareconocer
patronesquenoseajustan
aunaexpresiónregular,sinomásbienaunagramáticadecontextolibre
Estadoléxicos
Losestadosléxicosvienenasercomovariableslógicasexcluyentesquesirvenparaindicar
queunpatrónsólopuede aplicarsesielestadoléxicoquellevaasociadoseencuentra activado
ElgeneradordeanalizadoreslexicográficosJFlex
JFlexesungeneradordeanalizadoreslexicográficosdesarrolladoporGerwin Klein
extensión a la herramienta JLexdesarrollada en la Universidad de Princeton.
JFlexestádesarrolladoenJavaygeneracódigoJava.
como
LosprogramasescritosparaJFlextienenunformatoparecidoalosescritos
enPCLex;dehechotodoslospatronesregularesadmisiblesenLextambiénson
admitidosporJFlex,porloqueenesteapartadonoscentraremostansóloenlas
diferenciasyextensiones, tantodepatronescomodel esqueletoquedebeposeer el
ficherodeentradaaJFlex.
COMPILADORES
Boris Chungandro
Willian Gallo
4. PONTIFICIA UNIVERSISDA CATOLICA DEL ECUADOR
SEDE SANTO DOMINGO
Áreade opciones y declaraciones
Esteárea permite indicar a JFlexuna serie de opcionespara adaptar el fichero
.java resultante de la meta-compilación y que será el que implemente nuestro
analizadorlexicográficoen Java.También permiteasociarun identificadordeusuario
alospatronesmásutilizadoseneláreadereglas.
Opciones
Lasopcionesmásinteresantessepuedenclasificarenopcionesdeclase,de
la
funcióndeanálisis,
defindefichero,dejuegodecaracteresydecontadores.Todas
ellasempiezanporelcarácter%ynopuedenestarprecedidaspornadaenlalíneaen
queaparecen.
Opcionesdeclase
Lasopcionesdeclasemásútilesson:
%classnombreClase.Pordefecto,laclaseque
elanalizadorlexicográficosellamaYylex.
generaJFlexyqueimplementa
%implementsinterface1,interface2,etc.Elprogramadordeberáintroducirlos
métodosnecesariosparahacerefectivadichaimplementación.
%extendsnombreClase.Generaunaclasequeheredadelaclaseindicada.
%public.Generaunaclasepública.
%final.Generaunaclasefinal,delaquenadiepodráheredar.
%abstract.Generaunaclaseabstractadelaquenosepuedencrearobjetos.
COMPILADORES
Boris Chungandro
Willian Gallo
5. PONTIFICIA UNIVERSISDA CATOLICA DEL ECUADOR
SEDE SANTO DOMINGO
%{ bloqueJava%}.El
declaracionesymétodos
programador
también
puede
incluir
sus
propias
%init{códigoJava%init}.Esposibleincluircódigoenel
constructorgenerado
automáticamente por JFlexpara la clase Yylexmediante el uso de esta opción.
Opcionesdelafuncióndeanálisis
Estasopcionespermitenmodificarel
métodoofunciónencargadade
análisislexicográficoensí.Lasopcionesmásútilesson:
realizar
el
%functionnombreFuncionAnalizadora.Estaopción
permitecambiardenombrealafunciónyylex().
%int.Hacequelafunciónyylex()devuelvavaloresdetipointenlugarde
Yytoken.
%intwrap.Hacequelafunciónyylex()devuelvavaloresdetipoIntegeren lugardeYytoken.
%typenombreTipo.Hacequelafunciónyylex()devuelvavaloresdeltipo
especificado(yaseaprimitivoono)enlugardeYytoken
Opcionesdejuegodecaracteres
Estasopcionespermitenespecificareljuegodecaracteresenelqueestará
codificadalaentradaalanalizadorlexicográficogeneradoporJFlex
%7bit.Eslaopciónpordefecto,yasumequecadacarácterdelaentradaestá
formadoporunúnicobytecuyobitmássignificativoes0,loqueda128 caracteres.
%8bit.Asumequecadacarácterestáformadoporunbytecompleto,loqueda
256caracteres.
%unicode.AsumequelaentradaestaráformadaporcaracteresUnicode.Estono
quieredecirquesetomendosbytesdelaentradaporcadacaráctersinoque
larecuperacióndecaracteressedejarecaerenlaplataformasobrelaquese ejecutayylex().
%ignorecase.Hace que yylex()ignore entremayúsculas yminúsculas mediante el
usodelosmétodostoUpperCaseytoLowerCasedelaclaseCharacter.
COMPILADORES
Boris Chungandro
Willian Gallo
6. PONTIFICIA UNIVERSISDA CATOLICA DEL ECUADOR
SEDE SANTO DOMINGO
Opcionesdecontadores
%char.Almacenaenlavariableyycharelnúmerodecaracteresquehayentre
elcomienzodelcanaldeentradayelcomienzodellexemaactual.
%line.Almacenaenlavariableyylineelnúmerodelíneaenquecomienzael lexemaactual.
%column.Almacenaenlavariableyycolumnelnúmerodecolumnaenque
comienzaellexemaactual.
Declaraciones.
Ademásdeopciones,elprogramadorpuedeindicardeclaracionesdedostipos
áreaquenosocupa,asaber,declaracionesdeestadosléxicosydeclaracionesde reglas.
enel
Declaracionesdeestadosléxicos.
Losestadoléxicossedeclaranmediantelaopción:
%stateestado1,estado2,etc.
Declaracionesdereglas.
Encasodequeunpatrónseutilicerepetidas
vecesocuandosucomplejidad
es
elevada,esposibleasignarleunnombreyutilizarlo
posteriormenteen
cualquierotra
reglaencerrándoloentrellaves, demaneraanálogaacomoseestudióenLex.
Áreadereglas.
EláreadereglastienelamismaestructuraqueenLex,conlaúnicadiferencia de que es posible
agruparlas reglas a aplicaren un mismo estado léxico.Comoejemplo,lasreglas:
Patrón
[:jletter:]
[:jletterdigit:]
[:letter:]
[:digit:]
[:uppercase:]
[:lowercase:]
Predicadoasociado
isJavaIdentifierStart()
isJavaIdentifierPart()
isLetter()
isDigit()
isUpperCase()
isLowerCase()
FuncionesyvariablesdelaclaseYylex
Tratadefuncionesyvariablesmiembro,porloque,sisonutilizadasfueradelas
léxicas:
acciones
COMPILADORES
Boris Chungandro
Willian Gallo