Professional Documents
Culture Documents
www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
JLex: UngeneradordeanalizadorlxicoparaJava(TM)
ElliotBerk DepartamentodeCienciasdelaComputacindelaUniversidaddePrinceton Versin1.2,05demayo1997 Revisindelmanual29deoctubre1997 ltimaactualizacin06deseptiembre2000paraJLex1.2.5 (ltimaversinsepuedeobtenerdehttp://www.cs.princeton.edu/~appel/moderna/java/JLex/)
Contenido
1.Introduccin 2.JLexEspecificaciones 2.1CdigodeUsuario 2.2DirectivasJLex 2.2.1ReglamentoInternodeAnalizadorLxicoClase 2.2.2CdigodeinicializacinparaAnalizadorLxicoClase 2.2.3CdigodefindearchivoparaelAnalizadorLxicoClase 2.2.4Definicionesdemacros 2.2.5DeclaracionesdelosEstados 2.2.6Recuentodecaracteres 2.2.7Lneadeconteo 2.2.8JavaCOPACompatibilidad 2.2.9TtulosAnalizadorLxicocomponentes 2.2.10defectoTokenTipo 2.2.11defectoTokenTipoII:EnvueltoEntero 2.2.12YYEOFelfinaldesuarchivo 2.2.13Newlinesycompatibilidaddelsistemaoperativo 2.2.14Juegosdecaracteres 2.2.15Formatodecaracteresaydesdearchivos 2.2.16Excepcionesgeneradasporaccioneslxicas 2.2.17EspecificacindelvalordevueltoenFindearchivo 2.2.18Laespecificacindeuninterfazaimplementar 2.2.19HacerlaClasepblicagenerada
http://www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html 1/22
5/2/2014
www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
2.3ReglasdeExpresionesRegulares 2.3.1lxicoUnidos 2.3.2ExpresionesRegulares 2.3.3AccionesAsociadas 2.3.3.1Accionesyrecursividad: 2.3.3.2Transicionesdeestado: 2.3.3.3Valoresdisponibleslxicas: 3.Analizadoreslxicosgenerados 4.Rendimiento 5.CuestionesdeAplicacin 5.1Caractersticasnoimplementadas 5.2UnicodevsAscii 5.3Lascomasenlistasestatales 5.4Listadecaractersticasnoimplementadas 6.Crditosyderechosdeautor 6.1Crditos 6.2Derechosdeautor
1.Introduccin
Unanalizadorlxicorompeunflujodeentradadecaracteresentokens.Escribiranalizadoreslxicosamano puedeserunprocesotedioso,porloquelasherramientasdesoftwaresehandesarrolladoparafacilitaresta tarea. TalvezelejemplomsconocidoeslautilidaddeLex.Lexesungeneradordeanalizadoressintcticosparael sistemaoperativoUNIX,orientadoallenguajedeprogramacinC.Lextomaunarchivodeespecificacinde formatoespecialquecontienelosdetallesdeunanalizadorlxico.EstaherramientacreaunarchivofuenteC paraelanalizadorlxicotablaimpulsadaasociado. LautilidadJLexsebasaenelmodelodegeneradordeanalizadorlxicoLex.JLextomaunarchivode especificacinsimilaralaceptadoporLex,acontinuacin,creaunarchivofuentedeJavaparaelanalizador lxicocorrespondiente.
2.JLexEspecificaciones
http://www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html 2/22
5/2/2014
www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
2.1CdigodeUsuario
Elcdigodeusuarioprecedealaprimeradirectivadedobleciento(``%%').Estecdigosecopialiteralmente enelarchivodeorigenanalizadorlxicoqueJLexsalidas,enlapartesuperiordelarchivo.Porlotanto,siel archivodeorigenlexernecesitacomenzarconunadeclaracindelpaqueteoconlaimportacindeunaclase externa,laseccindecdigodeusuariodebecomenzarconladeclaracincorrespondiente.Estadeclaracinse copiarenlapartesuperiordelarchivodecdigofuentegenerado.
2.2DirectivasJLex
LaseccindedirectivaJLexcomienzadespusdelaprimera``%%''ycontinahastaelsegundo%% delimitador``''.CadadirectivaJLexdebeestarcontenidoenunasolalneaydebecomenzaresalnea.
http://www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
3/22
5/2/2014
www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
2.2.1ReglamentoInternodeAnalizadorLxicoClase
El%{...%}DirectivapermitealusuarioescribircdigoJavaparasercopiadoenlaclasedeanlisislxico.Esta directivaseusadelasiguientemanera.%{<code>%}Paraserreconocidocorrectamente,el%{y%}deben Estarsituadosenelcomienzodeunalnea.ElcdigoJavaespecificadoen<code>secopiaentoncesenla clasedeanlisislxicocreadoporJLex.claseyylex{...<code>...}Estopermiteladeclaracindevariablesy funcionesinternasdelaclaseanalizadorlxicogenerado.Losnombresdevariablescomienzanconyysedebe evitar,yaqueestosestnreservadosparasuusoporlaclasedeanlisislxicogenerado.
2.2.2CdigodeinicializacinparaAnalizadorLxicoClase
El%init{...%Init}DirectivapermitealusuarioescribircdigoJavaparasercopiadoenelconstructordela clasedeanlisislxico.%init{<code>%init}El%init{y}%init directivasdebensituarsealprincipiode unalnea.ElcdigoJavaespecificadoen<code>secopiaentoncesenellxicoconstructordelaclasedel analizador.claseyylex{yylex(){...<code>...}}Estadirectivapermitelainicializacindeunasolavezdela clasedeanlisislxicodesdeelinteriordesuconstructor.Losnombresdevariablescomienzanconyysedebe evitar,yaqueestosestnreservadosparasuusoporlaclasedeanlisislxicogenerado.
5/2/2014
www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
2.2.3CdigodefindearchivoparaelAnalizadorLxicoClase
El%eof{...%Eof}DirectivapermitealusuarioescribircdigoJavaparasercopiadoenlaclasedeanlisis lxicoparasuejecucindespusdequeelarchivofinaldequesealcance.%eof{<code>%eof}El%eof{ y}%eof directivasdeberanestarsituadoalprincipiodeunalnea.ElcdigoJavaespecificadoen<code>se ejecutaralosumounavez,einmediatamentedespusdequesealcanceelfinaldearchivoparaelarchivode entradadelaclasedeanlisislxicoestprocesando.
http://www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
5/22
5/2/2014
www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
2.2.4Definicionesdemacros
LasdefinicionesdemacrossedanenlaseccindedirectivasJLexdelaespecificacin.Cadadefinicinde macroestcontenidoenunasolalneaysecomponedeunnombredemacroseguidodeunsignoigual(=),y luegoporsudefinicinasociada.Portanto,elformatosepuederesumirdelasiguientemanera.<nombre>= <definition>espacioenblancoparanosaltodelnea,porejemplo,espaciosenblancoytabuladores,es opcionalentreelnombredelamacroyelsignoigualyentreelsignoigualyladefinicindelamacro.Cada definicindemacrodebeestarcontenidoenunasolalnea. Losnombresdemacrodebenseridentificadoresvlidos,porejemplo,secuenciasdeletras,dgitosyguiones bajoscomienceporunaletraounguinbajo. Lasdefinicionesdemacrosdebenserexpresionesregularesvlidas,losdetallesdeloscualessedescribenen otraseccinacontinuacin. Lasdefinicionesdemacrospuedencontenerotrasexpansionesdemacros,enlanorma{}<nombre>formato paramacrosdentrodelasexpresionesregulares.Sinembargo,elusuariodebetenerencuentaqueestas expresionessonmacrosnofuncionesonoterminalesasconstruccionesmutuamenterecursivasutilizando macrossonilegales.Porlotanto,losciclosenlasdefinicionesdemacrostendrnresultadosimpredecibles.
2.2.5DeclaracionesdelosEstados
Estadoslxicosseutilizanparacontrolarcundociertasexpresionesregularescoinciden.stossedeclaranen lasdirectivasJLexdelasiguientemanera.%declaraestado[0][,estatales[1],elestado[2],...]Cada declaracindeunaseriedeestadoslxicosdebeestarcontenidoenunasolalnea.Variasdeclaracionesse puedenincluirenlamismaespecificacinJLex,porloqueladeclaracindemuchosestadossepuededividiren muchasdeclaracionesenvariaslneas. Nombresestatalesdebenseridentificadoresvlidos,porejemplo,secuenciasdeletras,dgitosyguionesbajos comienceporunaletraounguinbajo. UnsoloestadolxicasedeclaraimplcitamenteporJLex.EsteestadosellamaYYINITIAL,yelanalizador lxicogeneradoquecomienceelanlisislxicoenesteestado. Reglasdeanlisislxicocomienzanconunalistadelestadoopcional.Sisedaunalistadelestado,lareglalxica
http://www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html 6/22
5/2/2014
www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
sloescomparablecuandoelanalizadorlxicoseencuentraenunodelosestadosespecificados.Sinoseda unalistadelestado,lareglalxicasecorrespondecuandoelanalizadorlxicoesencualquierestado. SiunaespecificacinJLexnohaceusodelosestados,pornilosestadosquedeclaranniprecedentereglas lxicasconlistasestatales,elanalizadorlxicoresultantepermanecerenestadoYYINITIALlargodela ejecucin.Puestoquelasreglaslxicasnovanprecedidosdelistasestatales,estasreglassecorrespondenen todoslosestadosexistentes,incluyendoelestadodeclaradoimplcitamenteYYINITIAL.Porlotanto,todo funcionacomoseesperasilosestadosnoseutilizanenabsoluto. Unidossondeclaradoscomoenterosconstantesdentrodelaclasedeanlisislxicogenerado.Laconstante enteradeclaradoparaunestadodeclaradotieneelmismonombrequeeseestado.Elusuariodebetener cuidadoparaevitarconflictosdenombresentrelosnombresdeestadoyvariablesdeclaradasenlapartedela accindelasreglasoenotrolugardentrodelaclasedeanlisislxico.Unaconvencinconvenientesera declararlosnombresdeestadoentodaslascapitales,comounrecordatoriodequeestosidentificadoresse conviertenefectivamenteconstantes.
2.2.6Recuentodecaracteres
Conteodecaracteresestdesactivadopordefecto,perosepuedeactivarconelcarbn%directiva.%CharEl ndicebasadoencerodelprimercarcterdelareginacompaadodeltextosecolocaenlavariableentera yychar.
2.2.7Lneadeconteo
ConteoLineestdesactivadapordefecto,perosepuedeactivarconlalnea%directiva.lnea%Elndicede lneadebaseceroeneliniciodelareginacompaadodeltextosecolocaenlavariableenterayyline.
2.2.8JavaCOPACompatibilidad
JavaCUPesungeneradordeanalizadoressintcticosparaJavaescritooriginalmenteporScottHudsondela UniversidadGeorgiaTech,ymantenidoyampliadoporFrankFlannery,DanWang,yC.ScottAnanian.Los
http://www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html 7/22
5/2/2014
www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
2.2.9TtulosAnalizadorLxicocomponentes
Lassiguientesdirectivassepuedenutilizarparacambiarelnombredelaclasegeneradalxicoanalizador,la funcintokenizing,yeltipoderetornosimblico.Paracambiarelnombredelaclasedeanlisislxicodeyylex ,utilicelaclase%directiva.%<nombre>claseParacambiarelnombredelafuncintokenizingdeyylex , utilicelafuncin%directiva.%Funcin<nombre>Paracambiarelnombredeeltipoderetornodelafuncin tokenizingdeYytoken,utiliceeltipo%directiva.escriba%<nombre>Silosnombrespordefectonoestn alterandoelusodeestasdirectivas,lafuncintokenizingseenvokedconunallamadaaYylex.yylex(),que devuelveelYtokentipo.
Paraevitarconflictosdedeterminacindelalcance,nombresquecomienzanconyynormalmentesereservan parafuncionesinternasdeanlisislxicoyvariables.
2.2.10defectoTokenTipo
Parahacerqueelprimitivotipoenterode32bitsint ,eltipoderetornodelafuncintokenizing(yporlotanto
http://www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html 8/22
5/2/2014
www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
Lasfuerzasdetipoderetornoenterocambiaelcomportamientoalfinaldelarchivo.Bajolaconfiguracin predeterminada,losobjetossubclasesdelaclasejava.lang.ObjectsondevueltosporYylex.yylex(). Durantelaejecucindelanalizadorlxicogeneradoyylex ,unobjetodevalorespecialdebeserreservadopara alfinaldesuarchivo.Porlotanto,cuandosealcanzaelfinaldelarchivoparaelarchivodeentradaprocesado(y deahenadelante),Yylex.yylex()devuelvenulo. Cuandoint eseltipoderetornodeYylex.yylex(),nulayanosepuededevolver.Encambio,Yylex.yylex() devuelveelvalor1,quecorrespondealaconstanteenteraYylex.YYEOF.Elnmeroentero%directiva implica%yyeof ,vasemsadelante.
2.2.11defectoTokenTipoII:EnvueltoEntero
Parahacerjava.lang.Integereltipoderetornodelafuncintokenizing(yporlotantoeltipodetoken),utiliceel intwrap%directiva.%intwrapSegnlosajustespredeterminados,Yytokeneseltipoderetornodelafuncin tokenizingYylex.yylex(),comoenelsiguientefragmentodecdigo.claseyylex{...pblicoyylexYytoken(){ ...}Elintwrap%Directivasustituyeelcdigoanteriorconunadeclaracinrevisada,enlaqueeltipodetoken sehacambiadoajava.lang.Integer.claseyylex{...java.lang.Integerpblicayylex(){...}Estadeclaracin permiteaccioneslxicasparavolvercdigosenterosenvueltos,comoenelsiguientefragmentodecdigodeuna accinlxicahipottico.{...returnnewjava.lang.Integer(0)...}
http://www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
9/22
5/2/2014
www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
2.2.12YYEOFelfinaldesuarchivo
Elyyeof%directivahacequelaconstanteenteraYylex.YYEOFseadeclarado.Sielnmeroentero%directiva estpresente,Yylex.YYEOFsevuelvesobrelafinaldearchivo.%yyeof EstadirectivahaceYylex.YYEOFque sedeclaracomosigue:intpublicfinalYYEOF=1Elnmeroentero%directivaimplica%yyeof .
2.2.13Newlinesycompatibilidaddelsistemaoperativo
EnlossistemasoperativosUNIX,lasecuenciadecdigodecaracteresquerepresentaunsaltodelneaesel nicocarcter``\n''.Porelcontrario,enlossistemasoperativosbasados enDOS,lanuevalneaesla secuenciadedoscaracteres``\r\n''queconsisteenelretornodecarroseguidodelanuevalnea.Los% notunix resultadosdirectivanienelretornodecarrooelsaltodelneasiendoreconocidoscomounanueva lnea.%notunix Estacuestindelreconocimientodelasecuenciacorrectadecaracterescomouncarcterde nuevalneaesimportanteparagarantizarlaindependenciadelaplataformaJava.
http://www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html 10/22
5/2/2014
www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
2.2.14Juegosdecaracteres
Laconfiguracinpredeterminadaapoyanunalfabetodecdigosdecaracteresentre0y127,ambosinclusive. Sielanalizadorlxicogeneradorecibeuncdigodecarcterdeentradaqueseencuentrafueradeestoslmites, elanalizadorlxicopuedefallar. Elpleno%directivasepuedeutilizarparaextenderestealfabetoparaincluirtodoslosvaloresde8bits.% completoSieltotal%sedaDirectiva,JLexgenerarunanalizadorlxicoquesoportaunalfabetodecdigos decaracteresentre0y255,ambosinclusive. Elunicode%.puedeutilizarseparaextenderelalfabetoparaincluirelplenode16bitsalfabetoUnicode% unicodeSielunicode%sedaDirectiva,JLexgenerarunanalizadorlxicoquesoportaunalfabetodecdigos decaracteresentre0y2^161,ambosinclusive. Elignorecase%directivasepuededarparagenerarlexersmaysculasyminsculas.%ignorecaseSiel ignorecase%sedaDirectiva,COPAampliaratodaslasclasesdepersonajesdeunamaneraunicode amigableparaquecoincidaconlasdoscartassuperiores,inferiores,yelttulodeloscasos.
2.2.15Formatodecaracteresaydesdearchivos
Bajoelstatusquo,JLexyelanalizadorlxicoquegeneraleeryescribirenarchivosdetextoASCII,con caracteresdetamaobyte.Sinembargo,paraapoyarnuevasprrrogasenlaherramientaJLex,todoel procesamientointernodelospersonajesserealizautilizandoeltipodecarcterdeJavade16bits,aunquenose admitetodalagamadevaloresde16bits.
2.2.16Excepcionesgeneradasporaccioneslxicas
Elcdigoquefiguraenlapartedeaccindelasreglasdeexpresionesregulares,enlaseccinterceradela
http://www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html 11/22
5/2/2014
www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
2.2.17EspecificacindelvalordevueltoenFindearchivo
El%eofval{...%Eofval}directivaespecificaelvalorderetornodelafindefichero.Estadirectivapermiteal usuarioescribircdigoJavaparapasarlaalafuncintokenizinganalizadorlxicoYylex.yylex()parasu ejecucincuandosealcanzaelfinaldelarchivo.Estecdigodebedevolverunvalorcompatibleconeltipodela funcintokenizingYylex.yylex().%eofval{<code>%eofval}ElcdigoJavaespecificadoen<code> determinaelvalorderetornodeYylex.yylex()cuandoelextremodeficheroquesealcanceparaelarchivode entradadelaclasedeanlisislxicoestprocesando.EstetambinserelvalordevueltoporYylex.yylex() cadavezadicionalestafuncinsellamadespusdequesealcanzaunprincipiodefindearchivo,porlo <code>puedaejecutarsemsdeunavez.Porltimo,el%eofval{y}%eofvaldirectivasdebensituarseal principiodeunalnea.
http://www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
12/22
5/2/2014
www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
2.2.18Laespecificacindeuninterfazaimplementar
Textooriginal JLexpermitealusuarioespecificarunainterfazqueel yylex claseimplementar.Mediantelaadicindela siguientedeclaracinenelarchivodeentrada: %implementos<classname>elusuarioespecificaqueyylex [...]Squarebacketsdenoteaclassofcharactersandmatchanyone implementarnombredeclase.Ladeclaracindelaclaseanalizadorgeneradoseveras: characterenclosedinthebackets. c l a s ey y l e x i m p l e m e n t ac l a s s n a m e{ . . .
Sugiereunatraduccinmejor
2.2.19HacerlaClasepblicagenerada
Elpblico%directivahacelaclasedeanlisislxicogeneradoporJLexseaunaclasepblica.%pblicaEl comportamientopredeterminadonoagreganingnespecificadordeaccesoalaclasegenerada,loqueresultaen laclasequeesvisibleslodesdeelpaqueteactual.
2.3ReglasdeExpresionesRegulares
LatercerapartedelaespecificacinJLexconsisteenunaseriedereglaspararomperelflujodeentradaen tokens.Estasreglasespecificanlasexpresionesregulares,acontinuacin,asociarestasexpresionesconlas accionesqueconsistenenelcdigofuentedeJava. Lasreglastienentrespartesbiendiferenciadas:lalistaopcionaldeestado,laexpresinregular,ylaaccin asociada.Esteformatoserepresentadelasiguientemanera. [<estados>]<expresin>{<accin>} Cadapartedelareglasediscuteenunaseccindeabajo. Simsdeunareglacoincideconcuerdasdesuentrada,elanalizadorlxicogeneradoresuelvelosconflictos
http://www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html 13/22
5/2/2014
www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
entrenormaseligiendoavidezlareglaquecoincideconlacadenamslarga.Simsdeunareglacoincideconlas cadenasdelamismalongitud,elanalizadorlxicoelegirlareglaquesedaporprimeravezenlaespecificacin JLex.Porlotanto,sedanreglasqueaparecenanteriormenteenlamemoriaunaprioridadmsaltaporel analizadorlxicogenerado. LasnormasquefiguranenunaespecificacinJLexdebencoincidircontodaslasentradasposibles.Siel analizadorlxicogeneradorecibeinformacinquenocoincideconningunadesusreglas,segenerarunerror. Porlotanto,todalaentradadebeiracompaadadealmenosunaregla.Estosepuedegarantizarmediantela colocacindelasiguientereglaenlaparteinferiordeunaespecificacinJLex:.{Java.lang.System.out.println ("entradasinigual:"+yytext())}(.)Elpunto,segnsedescribeacontinuacin,coincidirconcualquier entradaaexcepcindelanuevalnea.
2.3.1lxicoUnidos
Unalistadelestadolxicaopcionalprecedeacadaregla.Estalistadebeestarenelsiguienteformato:<estado [0][,estatales[1],elestado[2],...]>Elconjuntoexteriordecorchetes([])indicanquevariosestadosson opcionales.Elmayorque(<)ymenorque(>)smbolosrepresentanasmismosydebenrodearlalistaestatal anterioralaexpresinregular.Lalistadelestadoespecificaenquestadosinicialesdelareglapuedeser igualada. Porejemplo,siyylex()sellamaconelanalizadorlxicoenelestadoA,elanalizadorlxicointentarhacer coincidirlaentradaslocontraaquellasreglasquetienenunaensulistadeestado. Sinoseespecificaunalistadeestadoparaunadeterminadanorma,lareglaescomparadacontraentodoslos estadoslxicos.
2.3.2ExpresionesRegulares
Lasexpresionesregularesnodebencontenerningnespacioenblanco,comoelespacioenblancoseinterpreta comoelfindelaexpresinregularactual.Hayunaexcepcin:si(nodenuevalnea)caracteresdeespacioen blancoaparecendentrodelascomillasdobles,setomanestospersonajespararepresentarseasmismos.Por ejemplo,``''seinterpretacomounespacioenblanco. ElalfabetodeJLexeselconjuntodecaracteresASCII,esdecir,loscdigosdecaracteresentre0y127,
http://www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html 14/22
5/2/2014
www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
ambosinclusive. Lossiguientescaracteressonmetacaracteres,consignificadosespecialesenlasexpresionesregularesJLex.
?*+|( )^$ .[ ]{ }" \
Delocontrario,loscaracteresindividualesrepresentanasmismos. ef expresionesregularesconsecutivosrepresentasuconcatenacin. e|f Labarravertical(|)representaunaopcinentrelasexpresionesregularesquelorodean,porloque coincideconunadelasexpresioneseof . Lassiguientessecuenciasdeescapesonreconocidosyampliados: \B Retroceso \N denuevalnea \T \F \R \ddd \Xdd \U dddd Lengeta FORMFEED Retornodecarro Elcdigodecarctercorrespondientealnmeroformadoportresdgitosoctalesddd Elcdigodecarctercorrespondientealnmeroformadopordosdgitoshexadecimalesdd ElcdigodecarcterUnicodecorrespondientealnmeroformadoporcuatrodgitoshexadecimales dddd.
\^C Elcarcterdecontrol \c Unabarrainvertidaseguidadecualquierotrocarcterccoincideconsigomismo $Elsignodedlar($)indicaelfinaldeunalnea.Sielsignodeldlarterminaconunaexpresinregular,la expresinsecorrespondesloalfinaldeunalnea. .Elpunto(.)Coincideconcualquiercarcterexceptoelcarcterdenuevalnea,porloqueestaexpresines equivalentea[^\n]. "..."Losmetacaracterespierdensusignificadodentrodecomillasdoblesyrepresentanasmismos.La secuencia\ " (querepresentaelcarcternico" )eslanicaexcepcin. {name}Lasllavesdenotanunaexpansindelamacro,conelnombreelnombredeclaradodelamacro asociada. *Laestrella(*)representaKleenecierreycoincideconceroomsrepeticionesdelaexpresinregular precedente. +Elsignoms(+)coincideconunaomsrepeticionesdelaexpresinregularprecedente,porloquee+es equivalenteaee*. ?Elsignodeinterrogacin(?)Coincideconceroounarepeticindelaexpresinregularprecedente.
http://www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html 15/22
5/2/2014
www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
(...)Losparntesisseusanparaagrupardentrodelasexpresionesregulares. [...]Backetscuadradosdenotanunaclasedecaracteresycualquiercarcterincluidoenlosbackets.Sielprimer carcterdespusdelcorchetedeapertura([)eslaflechaarriba(^),elconjuntoesnegadoylaexpresin coincideconcualquiercarcterexceptolosqueformenpartedelasBackets.Diferentesreglasmetacaracteres mantienendentrodelosbackets,conlassiguientesexpresionestienenunsignificadoespecial: {Name} ExpansinMacro unb "..." \ RangodecdigosdecaracteresdeunaBqueseincluirnenelconjuntodecaracteres Todoslosmetacaracteresdentrodecomillasdoblespierdensusignificadoespecial.Lasecuencia\ " (querepresentaelcarcternico" )eslanicaexcepcin. Metacarctersiguientebarrainvertida(\)pierdesusignificadoespecial
2.3.3AccionesAsociadas
LaaccinasociadaaunareglalxicaconsisteencdigoJavaencerradoentrellavesenbloquedela delimitacin.{action}ElcdigoJavadeaccinsecopia,comoseindica,enelanalizadorlxicoimpulsadopor elEstadoproducidoporJLex. Todaslasllavescontenidasenlaaccinquenoformanpartedecadenasocomentariosdebenserequilibrados.
5/2/2014
www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
2.3.3.3Valoresdisponibleslxicas: Lossiguientesvaloresinternosalayylex clase,estndisponiblesdentrodelapartedeaccindelasreglas lxicas. Variableomtodo ActivationDirective Descripcin yytext Siempreactiva. PorcinIgualadosdelacorrientedeentradadecaracteres. java.lang.String() intyychar %Caracteres ndicebasadoencerodelprimercarcterenlapartecoincidente delasecuenciadeentrada
17/22
http://www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
5/2/2014
www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
intyyline
Lnea%
Nmerodelneadebasecerodeliniciodelapartecoincidentede lasecuenciadeentrada
3.Analizadoreslxicosgenerados
JLextendrunaespecificacinadecuadamenteformadoytransformarloenunarchivodecdigofuentedeJava paraelanalizadorlxicocorrespondiente. Elanalayzerlxicageneradaresideenlaclaseyylex .Haydosconstructoresaestaclase,tantoquerequierenun nicoargumento:elflujodeentradaatokenizados.Elflujodeentradapuedeserdetipo j a v a . i o . I n p u t S t r e a m oj a v a . i o . R e a d e r (comoS t r i n g R e a d e r ).Tengaencuentaquela j a v a . i o . R e a d e r constructordebeutilizarsesiestgenerandounlexeraceptarcaracteresUnicode,comoel 1.0JDKj a v a . i o . I n p u t S t r e a m clasenosiempreleerunicodecorrectamente. LafuncindeaccesoallxicoesYylex.yylex(),quedevuelveelsiguientetokendelacorrientedeentrada.El tipodevueltoesYytokenylafuncinsedeclaradelasiguientemanera.claseyylex{...pblicoyylexYytoken (){...}ElusuariodebedeclarareltipodeYytokenypuedelograrestoconvenientementeenlaprimeraseccin delaespecificacinJLex,laseccindecdigodeusuario.Porejemplo,parahacerYylex.yylex()devuelveuna envolturaalrededordelosnmerosenteros,elusuariointroduzcaelsiguientecdigoenalgnlugaranterioral primer``%%''.claseYytoken{intfieldYytoken(intf){campo=f}}Luego,enlasaccioneslxicas,enteros envueltosserandevueltos,enalgoascomoas.{...returnnewYytoken(0)...}Delmismomodo,enla seccindecdigodeusuario,unaclasepuedeserdefinidadeclararconstantesquesecorrespondenconcada unodelostiposdetokens.cdigosdetokendeclase{...cadenafinalstatic=0INTEGERpublicstatic final=1...}Acontinuacin,enlasaccioneslxicas,estoscdigossimblicospodranserdevueltos.{... returnnewYytoken(STRING)...}Estossonejemplossimplificadosenelusoreal,unoprobablementedefinir unaclasedetestigoquecontienemsinformacinqueuncdigodenmeroentero.
http://www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
18/22
5/2/2014
www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
Losnombresdelaclaselxicaanalizador,lafuncintokening,yeltipoquedevuelvecadaunopuedenalterarse usandolasdirectivasJLex.Vealaseccin2.2.9paramsdetalles.
4.Rendimiento
Serealizunexperimentodereferencia,compararelrendimientodeunanalizadorlxicogeneradoporJLexala deunanalizadorlxicoescritoamano.Lacomparacinsehizoparalosanalizadoreslxicosdeunlenguajede programacinsencillo``juguete''.Elanalizadorlxicoescritoamano,aligualqueelanalizadorlxicogenerado porJLex,fueescritoenJava. Elexperimentoconsisteenejecutarcadaanalizadorlxicoendosarchivosfuenteescritoenellenguajede juguete,acontinuacin,midiendoeltiemporequeridoparaprocesarestosarchivos.Cadaanalizadorlxicofue invocadoporunconductormaniqutambinescritoenJava. Elanalizadorlxicogeneradoresultserbastanterpido,comoindicanlossiguientesresultados. Tamaodelarchivo GeneradoJLexanalizadorlxico: LxicomanuscritasAnalyzer: deorigen Tiempodeejecucin Tiemposdeejecucin 177lneas 0,42segundos 0,53segundos 897lneas 0,98segundos 1,28segundos
5/2/2014
www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
5.CuestionesdeAplicacin
5.1Caractersticasnoimplementadas
Lasiguienteesuna(posiblementeincompleta)listadecaractersticasnoimplementadasdeJLex. 1. Eloperadorregulardebsquedaanticipadadeexpresinnosehaimplementado,ynoseincluyeenla listademetacaracteresespecialesdeexpresionesregulares. 2. Eloperadordecomienzodelnea(^)asumeelsiguientecomportamientonoestndar.Unpartidoenuna expresinregularqueutilizaesteoperadorharquelanuevalneaqueprecedealpartidoparaser desechados.
5.2UnicodevsAscii
Encontrasteconeltipodecarcterde8bits(char)dispuestoporAnsiC,Javasoportauncharde16bitsyel conjuntodecaracteresUnicode.JavaproporcionaunaclaseincorporadaStringparamanipularestoscaracteres Unicode. Desdelaversin1.2.5,JLexutilizalosJDK1.1L e c t o r yE s c r i t o r clasesparaleerenelarchivode especificacinJLexyescribirelarchivodeorigenanalizadorlxico.Estosignificaquetodosloscaracteres Unicodeselespermiteenambos.ParaqueelanalizadorgeneradoparatrabajarconcaracteresUnicode,debe utilizarelj a v a . i o . R e a d e r constructordelanalizadorgenerado,yell e c t o r queustedproporcionedebe manejaradecuadamentelatraduccindesdeelformatonativodeOSunicode.Tambindebeespecificarel unicode%directivaenlaespecificacin,vaselaseccin2.2.14.
http://www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
20/22
5/2/2014
www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
5.3Lascomasenlistasestatales
Lascomasentrelosnombresdelosestadosenlaslistasdedeclaracinylasreglaslxicassonopcionales.Estas listasseanalizancorrectamenteconelespacioenblancoentrelosnombresdelosestadosysinseparadoresde coma.
5.4Listadecaractersticasnoimplementadas
LassiguientescaractersticasdemenorimportanciaserabuenotenercomopartedeJLex,peronosehan aplicadodebidoasualcanceosuimpactonegativoenelrendimiento. 1. Ladeteccindelosapoyosdesequilibradasdentrodelapartedecomentariosdeaccioneslxicas. 2. Ladeteccindelosciclosenlasdefinicionesdemacros.
6.Crditosyderechosdeautor
6.1Crditos
EltratamientodelosgeneradoresdeanalizadoreslxicosdadosenAlanHolubCompilerDesigninC (PrenticeHall,1990)proporcionaunpuntodepartidaparamiaplicacin. LasdiscusionesconelprofesorAndrewAppeldelaUniversidadDepartamentodeInformticadePrinceton proporcionaronorientacineneldiseodeJLex. JavaesunamarcacomercialdeSunMicrosystemsIncorporated.
http://www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
21/22
5/2/2014
www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
6.2Derechosdeautor
JLexAVISODECOPYRIGHT,DELICENCIAYRENUNCIA. Derechosreservados1996porElliotJoelBerk. Elpermisoparausar,copiar,modificarydistribuirestesoftwareysudocumentacinconcualquierpropsitoy sincargopresenteseconcede,siemprequeelavisodecopyrightanterioraparezcaentodaslascopiasyque tantoelavisodecopyrightyestanotadepermisoyunrepudiodegarantaapareceendocumentacindeapoyo, yqueelnombredeElliotJoelBerknosepuedeutilizarenlapublicidadopropagandarelativaaladistribucin delsoftwaresinespecficaautorizacinpreviaporescrito. ElliotJoelBerkrenunciaacualquiergarantaconrespectoaestesoftware,incluyendotodaslasgarantas implcitasdecomerciabilidadyadecuacin.EnningncasoElliotJoelBerkserresponsableporningndao especial,indirectooconsecuenteocualquierdaoresultantedelaprdidadeuso,datosobeneficios,yaseaen accindecontrato,negligenciauotraaccinilcita,quesurjadeoenconexinconelusoorendimientodeeste software.
FrankFlannery Mi24dejulio199600:27:39EDT
http://www.cs.princeton.edu/~appel/modern/java/JLex/current/manual.html
22/22