Você está na página 1de 14

Programacin de Sistemas Analizador lxico

Analizador Lxico
2003
1
Programacin de Sistemas Analizador lxico
ndice
1.- ANALIZADOR LXICO
2.- FUNCION! DL ANALIZADOR LXICO
".-#N$A%A! D !&ARAR L AN'LI!I! LXICO DL !IN$'C$ICO.
(.- LX)A!* &A$RON!* CO)&ONN$! LXICO! + A$RI,U$O!.
-.- !$RUC$URA FUNCIONAL DL ANALIZADOR LXICO.
..- CON!$RUCCI/N D ANALIZADOR! LXICO!
0.- D$CCI/N + RCU&RACI/N D RROR! LXICO!
2
Programacin de Sistemas Analizador lxico
1.- ANALIZADOR LXICO
El objetivo de este analizador es el de aceptar o rechazar el lxico ( las palabras o
caracteres !"e presenta el programa #"ente$ comprobando si pertenece o no al leng"aje
!"e se intenta analizar% Si lo acepta entrega al analizador sint&ctico unidades sintcticas
con "n determinado signi#icado sint&ctico ' sem&ntico% Ejemplo en leng"aje nat"ral(
)' *"an escribe cartas
En castellano se rec+azar,a b' por no estar en el lxico de idioma$ pero el resto
de las palabras ser,an aceptadas entregando al analizador sint&ctico ( s"jeto$ verbo$
complemento directo !"e conc"erda con "na estr"ct"ra gramatical de "na #rase "
oracin en castellano%
As, p"es el an&lisis lxico se realiza en el nivel de los caracteres ' s" misin es a partir
de stos$ compar&ndolos con patrones$ reconocer el conj"nto de caracteres (lexemas
!"e constit"'en "na "nidad sint&ctica$ entregando al analizador sint&ctico dic+a "nidad
sint&ctica o componente lxico$ +abit"almente con in#ormacin adicional (atrib"tos%

2.- FUNCION! DL ANALIZADOR LXICO
&rinci1al2
-eer car&cter a car&cter del programa #"ente$ bajo peticin del analizador
sint&ctico%
Entregar al analizador sint&ctico la "nidad sint&ctica$ llamada
componente lxico (to.en j"nto con in#ormacin adicional relevante
para el analizador sem&ntico ' para el trad"ctor ( atrib"to%
/ec+azar a!"ellos caracteres o conj"nto de stos !"e no pertenezcan al
leng"aje$ indic&ndolo mediante mensaje de error al "s"ario%
!ec3ndaria42
0gnorar del programa #"ente los comentarios$ los espacios en blanco ' los
tab"ladores%
/econocer las palabras reservadas del leng"aje
1ontar los saltos de lnea ' asociar los mensajes de error con el n2mero
de la l,nea del programa #"ente donde se prod"cen%
3"ardar in#ormacin relacionada con los componentes lxicos en "na
llamada tabla de smbolos%
Circ3n45anciale42
4anejar el #ic+ero #"ente ( abrir$ leer $ cerrar%
5tilizar "n preprocesador para expandir macros%
Si el #ormato de l,nea no es libre$ in#ormar del #in de l,nea%
".-#N$A%A! D !&ARAR L AN'LI!I! LXICO DL !IN$'C$ICO.
Se cons"me m"c+o tiempo de compilacin en leer el programa #"ente% Estando
separados los dos an&lisis se p"ede a"mentar la e#icacia con tcnicas especiales
de manejo de b"##ers de entrada%
3
Programacin de Sistemas Analizador lxico
-a sintaxis del lxico es m&s sencilla( corresponde a gram&ticas m&s simples
(expresiones reg"lares %
-as pec"liaridades del al#abeto de entrada ( cdigos AS100$ E)1601$ considerar
ma'2sc"las di#erentes o no !"e las correspondientes min2sc"las p"eden !"edar
limitadas al analizador lxico%
1iertas ambig7edades p"eden resolverse en el analizador lxico ( variable o
sentencia ( 6810 9 :%1; 6810 9 :< 1; %
(.- LX)A!* &A$RON!* CO)&ONN$! LXICO! + A$RI,U$O!.
-os lexemas son caracteres o conj"ntos de caracteres (palabras !"e pertenecen al lxico
del leng"aje%
-os patrones son reglas !"e describen "n conj"nto de lexemas !"e p"eden ser
representados por determinados componentes lxicos en el an&lisis sint&ctico%
-os componentes lxicos son las "nidades sint&cticas o terminales para la gram&tica !"e
de#ine la estr"ct"ra sint&ctica del leng"aje%
-os atrib"tos son las in#ormaciones adicionales para cada componente lxico !"e ser&n
"tilizadas en el an&lisis sem&ntico o en la trad"ccin% =abit"almente los atrib"tos !"e se
g"ardan en la tabla de s,mbolos son relativos a los identi#icadores%
En la ma'or,a de los leng"ajes de programacin$ se consideran componentes lxicos las
sig"ientes constr"cciones(
-as palabras reservadas
-os operadores (de comparacin$ asignacin$ booleanos$ binarios$ aritmticos$
etc%%
-os identi#icadores (de variables$ #"nciones$ constantes$ etc%
-as constantes o literales (enteros$ reales$ cadenas de caracteres$ caracteres $etc%
Signos de p"nt"acin ( parntesis$ coma$ p"nto ' coma$ etc%
Lexe6a &a5r7n $o8en A5ri935o
i# >i#? 0@ A
velocidad - ( - B 6 C 06EDE0@01A68/ Ap"ntador a la tabla
de s,mbolos
2; 6F D54E/8 Galor 2;
H9 >H 9 > 8P/E-A108DA- 1onstante !"e indica
ma'or o ig"al
H >H? 8P/E-A108DA- 1onstante simblica
!"e indica menor
F >F? 8PS54A/ESEA 1onstante simblica
!"e indica s"ma
A > I > 8PS54A/ESEA 1onstante simblica
!"e indica resta
C >C? 8P45-60G 1onstante simblica
!"e indica
m"ltiplicar
J
Programacin de Sistemas Analizador lxico
En ocasiones el atrib"to !"e se "tiliza para "n to.en es el propio lexema o cadena de
caracteres%
-.- !$RUC$URA FUNCIONAL DL ANALIZADOR LXICO.
1omo se +a visto anteriormente la #"ncin m&s importante del analizador lxico es la
entrega de los componentes lxicos ' s"s atrib"tos al analizador lxico% El resto de las
#"nciones dependen del compilador ' del propio leng"aje a procesar$ pero p"eden ser
clasi#icadas seg2n el inter#az con el !"e entra el contacto el analizador lxico(
0nter#az con el #ic+ero !"e contiene el programa #"ente%
0nter#az con el analizador sint&ctico
0nter#az con la tabla de s,mbolos
0nter#az con el tratamiento de errores
-as #"nciones detalladas !"e +a de realizar el analizador lxico son(
-eer el sig"iente car&cter (sigtecar(
Analizarlo
Ac"m"lar el car&cter si no se +a determinado a2n "n to.en (g"adacar(
Emitir "n mensaje de error si se +a encontrado "n error lxico (menserror(
0nstalar en la tabla de s,mbolos si se +a determinado "n identi#icador
(instalaE6S(
Entregar el componente lxico !"e se +a'a determinado ' el atrib"to
correspondiente si +a' l"gar% (ret"rn
En ocasiones slo se p"ede determinar "n to.en c"ando se +a recibido "n
car&cter !"e pertenece al sig"iente to.en% En este caso se debe reinsertar dic+o
;
Analizador
sint&ctico
@ic+ero de entrada
Eratamiento de
errores
Eabla de s,mbolos
Analizador
lxico
Programacin de Sistemas Analizador lxico
car&cter a la entrada para realizar el an&lisis lxico de la sig"iente peticin del
analizador lxico( reinsertar(%

Es!"ema estr"ct"ral del Analex(
In5er:az con el :ic;ero <3e con5iene el 1ro=ra6a :3en5e.
El ADA-EK realiza las sig"ientes tareas con el programa #"ente(
6etectar marcas de #in de #ic+ero de los #ic+eros !"e contienen el programa
#"ente%
L
ADAS0DE
sigteto.en(
ret"rn to.en
sigtecar( Entrada
Programa
#"ente
an&lisis
to.en delimitador
g"ardacar(
menserror
Eratamiento
error
identi#icador
instalaE6S( Eabla de
s,mbolos
otro
prepara
to.en ' atrib"to
Programacin de Sistemas Analizador lxico
Eratamiento de espacios en blanco$ tab"ladores ' caracteres de #in de l,nea%
Estos delimitadores son ignorados excepto el de salto de l,nea !"e se
incrementa "n contador para poder "sarlo en el mensaje de error%
Eliminacin de comentarios
4anejo de "n b"##er con el #ic+ero #"ente% -a lect"ra ' devol"cin de caracteres
al #ic+ero #"ente s"ele +acerse mediante "n b"##er de entrada
In5er:az con el analizador 4in5>c5ico.
El analizador lxico es "na #"ncin llamada por el analizador sint&ctico% El ADA-EK
dev"elve "na estr"ct"ra !"e contenga to.en ' atrib"to$ o slo el to.en si previamente
+a g"ardado el atrib"to en "na variable global%
-os to.en son de#inidos mediante constantes enteras o "n tipo en"merado%
In5er:az con la 5a9la de 4?69olo4 @ $D! A .
-a tabla de s,mbolos es "na estr"ct"ra de datos "tilizada por el compilador para
almacenar toda la in#ormacin ligada a los identi#icadores "tilizados en el programa
#"ente%
El ADA-EK g"arda los lexemas de los identi#icadores en la E6S% -as #ases posteriores
del compilador p"eden aMadir m&s in#ormacin a la tabla% -a in#ormacin m&s com2n
!"e s"ele almacenarse en la E6S son$ adem&s del lexema$ s" tipo$ s" "so (eti!"eta$
#"ncin$ variable ' s" posicin en memoria%
-as operaciones !"e realiza el ADA-EK sobre la E6S son(
0nsercin de identi#icadores
)2s!"eda de identi#icadores
Estas operaciones deben realizarse m"' r&pidamente ' s" velocidad debe ser
independiente del tamaMo de la tabla% Por esta razn +abit"almente se "tilizan mtodos
>+as+?%
Por el momento podemos imaginar "n arra' como tabla$ s"poniendo !"e el campo
donde se g"arda el nombre (lexema del identi#icador es s"#icientemente grande para
!"e p"eda ser escrito c"al!"ier nombre del programa #"ente$ o convenir identi#icadores
de "n tamaMo limitado% Si los identi#icadores no son de tamaMo limitado se necesitar,a
"n campo para g"ardar el p"ntero a la posicin del primer car&cter en el arra' de
caracteres donde se g"ardar,a%
N
Gariable1
Gariable2
@"ncion1
Gariable3
index
P"nteroa A
P"ntero a )
p%a @5D108D1
p%a Gar1
A
)
@
5
D
1
0
8
D
1
v
a
r
1
Programacin de Sistemas Analizador lxico
En estos casos la #"ncin instalaE6S( lexema es invocada con el lexema del
identi#icador como par&metro% -a #"ncin toma el par&metro ' b"sca en la tabla si dic+o
identi#icador est& 'a almacenado% Si no lo est"viera lo inserta en la tabla% Eanto si 'a
est"viera almacenado o se inserte en esta invocacin por no estarlo a2n$ la #"ncin
devolver& la posicin del identi#icador en la tabla (,ndice del arra'$ o p"ntero%
1asos especiales son las palabras reservadas% En la ma'or,a de los leng"ajes los
identi#icadores no p"eden tener el mismo lexema !"e "na palabra reservada$ pero estas
sig"en las mismas reglas de constr"ccin !"e "n identi#icador$ l"ego el ADA-EK
detecta "n posible identi#icador pero antes de devolverlo al ADAS0DE debe
compararlos con todas las palabras reservadas ' cerciorarse !"e no es "na de ellas% 5na
pr&ctica +abit"al es antes de !"e el ADAS0DE llame al ADA-EK inicializar la tabla de
s,mbolos con todas las palabras reservadas$ as, el ADA-EK act2a siempre de la misma
manera intentando instalar ese posible identi#icador en la E6S% Si #"era "na palabra
reservada estar,a en las posiciones iniciales de la tabla por lo !"e al devolver la posicin
el ADA-EK p"ede saber !"e es "na palabra reservada ' en vez de entregar el to.en
06EDE0@01A68/ entrega el correspondiente a la palabra reservada%
In5er:az con el 5ra5a6ien5o de errore4.
1"ando el ADA-EK lee "n car&cter !"e no es del leng"aje o no enc"entra ning2n
lexema !"e conc"erde con "no de los patrones especi#icados$ debe emitir "n mensaje
indicando al menos la l,nea del programa #"ente donde se prod"ce%
En ocasiones se "tiliza "n rec"perador de errores$ !"e no es m&s !"e "na >reparacin?
para contin"ar con el an&lisis% Es m&s #rec"ente pasar el mismo car&cter o "n to.en
especial al ADAS0DE ' dejar !"e ste sea el encargado de realizar el tratamiento%
Re=la4 de la =ra6>5ica 1ara 3n ANALX.
En las reglas del leng"aje +a' !"e identi#icar a!"ellas !"e corresponden a expresiones
reg"lares !"e ser&n las especi#icaciones de los patrones con los !"e tiene !"e comparar
los lexemas% 0denti#icando los to.ens en estas reglas consideraremos para el an&lisis
sint&ctico a!"ellas otras c"'os terminales ser&n los to.ens%
Ejemplo(
P 6 < S
6 6 < 6 B E id
E int B real
S S < S
S id (9 E B i# 1 t+en S
1 E 9 E
E E F E B id B n"m
:
3ram&tica del ADAS0DE
Programacin de Sistemas Analizador lxico
id l B l -
- -6 B O
-6 l B d
n"m d B n"m d B O
..- CON!$RUCCI/N D ANALIZADOR! LXICO!
-as expresiones reg"lares ' los a"tmatas #initos son el medio +abit"al para la
especi#icacin de los componentes lxicos%
-os componentes lxicos tambin p"eden ser especi#icados mediante "n leng"aje
diseMado a tal #in% -os leng"ajes diseMados para constr"ir generadores de analizadores
lxicos (+erramientas lex $ pclex$ etc son otros mtodos para especi#icar%
-a tcnica inicial para constr"ir "n ADA-EK consiste en diseMar "n a"tmata #inito !"e
reconozca todos los componentes lxicos del leng"aje$ de manera !"e en cada estado
#inal dev"elva el componente lxico reconocido%
El ADA-EK +a de reconocer "na sec"encia de patrones% 1"ando reconozca alg"no
tomar& las acciones necesarias !"e deben llevar a la devol"cin del to.en ' atrib"to
correspondientes%
Por lo tanto s" estr"ct"ra ser& la de "n a"tmata #inito para cada to.en conectados en
serie% 1"ando no reconozca "n patrn en "n A@ lo intentar& en el sig"iente%
-os a"tmatas correspondientes a los a"tmatas m&s #rec"entes s"elen ir en los
primeros l"gares ( espacios en blanco$ tab"ladores$ saltos de l,nea$ etc%%
-a implantacin de estos a"tmatas #initos en serie se realizar& mediante sentencia tipo
sPitc+ (estado I case "tilizando las #"nciones identi#icadas en apartados anteriores
c"ando corresponda al tratamiento de estados determinados%
Dia=ra6a4 de 5ran4ici7n B 14e3doc7di=o de 3n analizador lxico 5?1ico
El ADA-EK ser& "na #"ncin !"e$ por ejemplo$ llamaremos sigteto.en ( (
)&sicamente consistir& de "n b"cle ' en s" interior "n sPitc+Acase%
En este caso los to.ens ser&n de#inidos como constantes enteras ' los atrib"tos se
g"ardar&n en "na variable global entera(
Q
3ram&tica del ADA-EK
A@1 A@2 A@3 A@n
6evolver to.en ' atrib"to
Eo.en no
encontrado
0gnorar
caracteres
contin"ar
Programacin de Sistemas Analizador lxico
int sigteto.en( R
int estado 9 1<
c+ar c <
P+ile (1 R
sPitc+ (estado R
case 1(
c9sigtcar( <
i# ( c 99 S S BB c 99Tt estado 9 1<
else i# (c 99 Tn R
contlin FF <
estado 9 1<
Uelse R
estado 9 2<
reinserta ( <
U
brea.<
Deli6i5adore4 (blancos$ tab"ladores$ saltos de l,nea
Se detectan$ se ignoran ' si viene "n car&cter di#erente se cambia de estado% Slo si se
detecta "n salto de l,nea se incrementar& el contador de l,neas%
Iden5i:icadore4 B 1ala9ra4 re4erCada4
Empizan por letra ' p"ede ser seg"ido por letras o d,gitos( l (l B d C
case 2 (
c 9 sigtecar ( <
i# ( isletter ( c R
estado 9 3<
g"ardacar(<
UelseR
reinserta (<
estado 9 ;<
U
brea.<
case 3(
c 9 sigtecar (<
i# ( isletter ( c BB isdigit( cR
estado 93<
g"ardacar(<
U elseR
estada 9 J<
reinserta (<
U
brea.<
10
1
S S B T t
T n
2
otro
2
otro
;
l
3 l B d
J
otro
6ev"elve(
06
0nstalaE6S(
Programacin de Sistemas Analizador lxico
case J(
atrib"to 9 instalaE6S (<
i# (palres (atrib"toR
ret"rn lexemab"##er<
UelseR
ret"rn 06<
U
brea.<
O1eradore4 relacionale4
case ;(
c 9 sigtecar( (
i# (c 99 SHV estado 9 L<
else i# (c99 S9V esatado 9 10<
else i# (c 99VWV estado 9 11<
else R
reinserta(<
estado 9 1J<
R
brea.<
case L(
c9 sigtecar(<
i# (c99 S9V estado 9 N<
else i# (c99VWV estado 9:<
else R
reinserta(<
estado 9 Q<
U
brea.<
11
;
H
L
9 W otro
N : Q
10
9 W
11
9
12 13
otro
otro
1J
oprel
035
oprel
4E0
oprel
60@
oprel
4ED
oprel
4A0
8prel
4AX
Programacin de Sistemas Analizador lxico
case N(
atrib"to 9 4E0 < ret"rn 8P/E-<
brea.<
case :(
atrib"to 9 60@ < ret"rn 8P/E-<
brea. $
case Q(
atrib"to 9 4ED< ret"rn 8P/E-<
brea.<
case 10(
atrib"to 9 035< ret"rn 8P/E-<
brea.<
case 11(
c 9 sigtecar(<
i# (c99 Y9V estado 9 12<
else R
estado 9 13<
reinserta (<
U
brea.<
case 12(
atrib"to 9 4A0< ret"rn 8P/E-<
brea.<
case 13(
atrib"to 9 4AX< ret"rn 8P/E-<
brea.<
O1eradore4 ari565ico4
case 1J(
c 9 sigtecar(<
i# ( c 99 SFV estado 9 1;<
else i# (99VAS estado 9 1L<
else R
reinserta (<
estado 9 1N<
U
brea.<
case 1;(
atrib"to9 4AS< ret"rn 8PS/<
brea.<
case 1;(
atrib"to 9 4ED8S< ret"rn 8PS/<
brea.<
12
1J
F A
1; 1L
otro
1N
8PS/
4AS
8PS/
4ED8S
Programacin de Sistemas Analizador lxico
Con45an5e4 n36rica4
S"poniendo "na constante entera con al menos "n d,gito ' "na real con al menos "n
d,gito de parte entera $ ' p"ede tener cero o m&s d,gitos como decimal%
Es decir (
d F
d F % d C
case 1N(
c 9 sigtecar(<
i# (isdigit (c R
estado 9 1:<
g"ardacar(<
Uelse R
traterror(<
estado 9 1<
U
brea.<
case 1:(
c 9 sigtecar(<
i# (isdigit (c R
estado 9 1:<
g"ardacar(<
Uelse i# ( c99 S%V R
estado 91Q<
g"ardacar(<
UelseR
estado 9 21<
reinserta(<
U
brea.<
case 1Q(
c 9 sigtecar(<
i# (isdigit (c R
estado 9 1Q<
g"ardacar(<
Uelse R
estado 9 20<
reinserta(<
U
brea.<
case 20(
atrib"to 9 ato#(lexema < ret"rn D54E/A-<
brea.<
case 21(
atrib"to 9 atoi (lexema< ret"rn D54EDEE/8<
brea.<
de#a"lt(
traterror(<
estado 9 1<
13
1N
otro
1
d
1:
d
21
D54E
atoi (lexema
%
1Q
d
otro
20
D54/
ato# (lexema
Programacin de Sistemas Analizador lxico
0.- D$CCI/N + RCU&RACI/N D RROR! LXICO!
6eteccin(
imposibilidad de concordar "n pre#ijo de la entrada con ning2n patrn%
necesidad de "n b"en diagnstico$ indicando al menos "na l,nea de la #"ente
Errores m&s #rec"entes(
presencia de "n car&cter !"e no pertenece al vocab"lario terminal%
escrit"ra incorrecta de "n nombre de "s"ario( identi#icador$ constante$ eti!"eta$
etc%
se +a incl"ido "n car&cter extraMo%
Se +a omitido "n car&cter
Se +a aMadido "n car&cter
=an sido perm"tados dos caracteres ad'acentes
comentarios$ comillas$ #in de sentencia$ etc sin cerrar%
/ec"peracin( tomar alg"na accin !"e permita seg"ir con el an&lisis$ tras +aber
advertido del error%
Estrategia ms sencilla y efectiva: Modo pnico
Eliminar caracteres de la entrada restante +asta !"e el analex p"eda reconocer
"n patrn ( por ejemplo "n delimitador %
1J

Você também pode gostar