Documentos de Académico
Documentos de Profesional
Documentos de Cultura
,specificacin lexicogrfica
-e los comentarios anteriores se deduce $ue la forma de una especificacin Lex# cuando se $uiera generar un analizador lexicogrfico para un lenguaje L# es la representada en este es$uema&
. / 0
" "
n). n
%%
37
%%
38
%a relacin de patrones "i est formada por las expresiones regulares $ue definen todas y cada una de las piezas sintcticas del lenguaje L; Vi es el 'alor representati'o de la pieza sintctica "i (el 'alor $ue se comunica al analizador sintctico!; ese 'alor *a de estar asociado de manera biun 'oca a la pieza sintctica. %as cajas dibujadas en el es$uema en la parte final de la seccin de reglas representan la necesidad de completar la especificacin# tal y como se comenta ms adelante.
,specificacin completa
3a se *a comentado $ue# en general# con'iene $ue las especificaciones Lex sean completas; en el caso de la especificacin de un analizador lexicogrfico# esa con'eniencia se transforma en necesidad. ,n el analizador lexicogrfico se *a de pre'er la posible presencia de cual$uier carcter (representable! en el fic*ero de entrada# aun$ue sean caracteres $ue no pertenezcan al alfabeto del lenguaje analizado. 4a de tenerse especial cuidado en no ol'idar en la especificacin los patrones $ue se corresponden con los caracteres& espacio en blanco tabulador \t final de l nea \n $ue tan importante papel tienen en el anlisis lexicogrfico. "ara la mayor a de los lenguajes de programacin (as ocurre en los $ue se codifican con formato libre!# cuando se analiza lexicogrficamente un programa# *ay $ue saltar los espacios en blanco (espacios propiamente dic*os# tabuladores# caracteres indicati'os del final de una l nea!; en consecuencia# a los patrones $ue se corresponden con esos caracteres $ue *an de sobrepasarse se les debe de asociar la accin nula (la accin $ue consiste en no *acer nada! y cuando se acopla uno de esos patrones# no se de'uel'e el control al analizador sintctico. 5tese $ue si no de'uel'e el control# la funcin yylex contin1a a'anzando en la entrada# pasa a acoplar nue'os patrones& de esta manera se consigue saltar los caracteres $ue no constituyen piezas sintcticas. 6omo ejemplo de aplicacin de estas consideraciones puede repasarse el ,jemplo . expuesto en el cap tulo inicial sin explicar los detalles; a continuacin se da otro ejemplo.
39
,jemplo 0
7e considera la especificacin l2xico)sintctica de una sencilla declaracin de tipos de datos (al estilo de las declaraciones de "ascal!; la gramtica est escrita en notacin 859 (mpliada; los corc*etes delimitados mediante apstrofos son s mbolos terminales (no metacaracteres! y las palabras reser'adas estn escritas en may1sculas.
<Tipo> ::= <TipoSimple> | ^ <Id> | TABLA [ <TipoSimple> ] <Tipo> <TipoSimple> ::= ENTEROS | CARACTERES | < um> .. < um> <Id> ::= <Letr!> { <Letr!> | <"i#ito> } <Letr!> ::= a | b | $ $ $ | z | A | B | $ $ $ | Z <"i#ito> ::= 0 | 1 | $ $ $ | 9
40
,n el caso del patrn 7\ \t\n; no se de'uel'e el control# la accin asociada es no *acer nada; por ello# una 'ez acoplado ese patrn# desde yylex se intentar acoplar otro patrn# es decir# se a'anzar en la entrada# *abiendo saltado el espacio en blanco# o el tabulador o el final de l nea# tal y como debe de *acerse en un anlisis lexicogrfico. 5tese $ue el patrn 7\ \t\n;: tambi2n es correcto& en este caso se saltar an 'arios espacios en blanco (o tabuladores o finales de l nea! consecuti'os mediante una 1nica llamada a la funcin yylex. ,l 1ltimo patrn (el metacarcter uni'ersal punto! representa los caracteres $ue no pertenecen al alfabeto del lenguaje especificado y# por ello# corresponde de'ol'er una indicacin de error.
,rrores lexicogrficos
,n una especificacin Lex se pueden a+adir tratamientos relati'os a los distintos errores lexicogrficos detectables durante el anlisis; para ello# se incluye cdigo escrito en ) $ue realiza las tareas de emisin de los mensajes apropiados (y de la *ipot2tica recuperacin de los errores encontrados!. "ero no suele *acerse as . %a prctica *abitual es $ue cuando se encuentra una situacin anmala )en concreto cuando se encuentra un carcter $ue no pertenece al alfabeto del lenguaje analizado) se comunica al analizador sintctico (es decir# se de'uel'e a la funcin llamante! en 'alor especial representati'o de la presencia de un error. 3 ser desde en analizador sintctico desde donde se tomar en consideracin el error encontrado. ,n cierta manera podr a decirse $ue# por facilidad# los errores lexicogrficos se trasladan al analizador sintctico# esto es# se transforman en sintcticos.
9inal de fic*ero
6uando el analizador lexicogrfico (la funcin yylex!# en el intento de encontrar la siguiente pieza sintctica en el fic*ero de entrada (en el intento de acoplar un nue'o patrn! se encuentra con $ue eso es imposible a causa de $ue ya se *a llegado al final del fic*ero# de'uel'e un 'alor representati'o de esta situacin& el 'alor cero. "or esta razn# el n1mero cero no puede emplearse para representar una pieza sintctica# ni para indicar la presencia de un error.