Академический Документы
Профессиональный Документы
Культура Документы
Ing. Francisco Ros Acosta Instituto Tecnolgico de la Laguna, a 15 de septiembre del 200. pag. 1 de 2!
Tabla de smbolos en C# y su interaccin con el analizador lxico.
FRA"#I$#% R&%$ A#%$TA
Instituto Tecnolgico de la Laguna
'l(d. Re(olucin ) cal*ada #uau+t,moc s-n
#olonia centro
Torren, #oa+. /,0ico
Contacto : friosam@prodigy.net.mx
Resmen. $e presenta la implementacin de una tabla de smbolos en #1. 2eneralmente la e0plicacin en
clase de este tema, conlle(a una buena cantidad de tiempo 3ue podemos reducir, si empleamos un buen
material donde las especi4icaciones de la tabla, est,n pre(iamente establecidas de manera clara. 5n an6lisis
de los atributos 3ue almacena cada elemento de la tabla de smbolos, re3uiere de una de4inicin clara acerca
de lo 3ue 3ueremos almacenar ) recuperar. 7ste traba8o propone una clase denominada TablaSimbolos con
atributos ) m,todos 3ue permitan interactuar con las 9 etapas de an6lisis de un compilador : an6lisis l,0ico,
an6lisis sint6ctico ) an6lisis sem6ntico. #omo e8emplo, se constru)e una aplicacin 3ue anali*a l,0icamente
una entrada usando un ob8eto oAnaLe0 perteneciente a la clase Le0ico propuesta por R.A. Francisco, 3ue
interact;a con un ob8eto de la clase Tabla$imbolos instalando identi4icadores, n;meros ) cadenas. La
implementacin de la tabla de smbolos se +a +ec+o de acuerdo a la teora e0presada en el libro del <dragn=
A+o, $et+i ) 5llman, asi como del libro de Trembla) ) $orenson, ambos libros tratantes del tema de
#ompiladores.
Tabla de smbolos en C# y su interaccin con el analizador lxico.
Ing. Francisco Ros Acosta Instituto Tecnolgico de la Laguna, a 15 de septiembre del 200. pag. 2 de 2!
I N D I C E.
1. INTRODUCCIN.
3
. !OD"#O CONC"$TU%# D" #% T%&#% D" 'I!&O#O'. 3
3. #"N(U%)" D" ")"!$#O * 'U (R%!+TIC% D" CONT",TO #I&R" -U" #O D"NOT%. .
.. %N%#I'I' #",ICO. /
0. %TRI&UTO' $%R% "# TO1"N id $%R% 'U IN'T%#%CION "N #% T%&#% D" 'I!&O#O'. 12
2. C#%'" Ta34a'im3o4os. 12
5. IN'T%#%CION D" ID"NTI6IC%DOR"'. 17
/. 8I'U%#I9%CION D" #% T%&#% D" 'I!&O#O'. 3
Tabla de smbolos en C# y su interaccin con el analizador lxico.
Ing. Francisco Ros Acosta Instituto Tecnolgico de la Laguna, a 15 de septiembre del 200. pag. 9 de 2!
1 Introduccin.
70isten (arias maneras de implementar una tabla de smbolos. 7n este traba8o trataremos una de ellas : abstraer la tabla de
smbolos como un ob8eto. "os basaremos en la teora e0puesta en el libro del <dragn= ) del Trembla) para reali*ar la
construccin de la tabla de smbolos. 7stableceremos la propuesta de la clase TablaSimbolos de manera 3ue podamos
de4inir un ob8eto oTablaSimb, 3ue interact;e en una aplicacin >indo?s #1 con un ob8eto oAnaex @anali*ador l,0icoA.
7l an6lisis l,0ico lo +aremos sobre sentencias de entrada cu)a sinta0is est6 de4inida por una gram6tica de conte0to libre no
ambigua. Al t,rmino del traba8o tendremos construda una aplicacin >indo?s #1 3ue : inicialice la tabla de smbolos, 3ue
permita 3ue el anali*ador l,0ico instale identi4icadores, n;meros ) cadenas en ella, ) 3ue (isualice a los elementos de la
tabla mostrando los atributos almacenados en la etapa de an6lisis l,0ico.
Los pasos 3ue seguiremos en las secciones siguientes son :
#lase TablaSimbolos.
Eeclaracin de constantes
Eeclaracin de (ariables
Asignacin
7ntrada
$alida
Las reglas de sinta0is para incluir las sentencias en este lengua8e de programacin propuesto son :
La declaracin de constantes debe ir en primer lugar antes de las declaraciones de (ariables, sentencias de asignacin,
de entrada ) de salida. Fuede no incluirse la declaracin de constantes.
La declaracin de (ariables es la segunda en orden de insercin. $i e0iste una declaracin de constantes, la declaracin
de (ariables debe incluirse despu,s de la de constantes. Fuede no e0istir una declaracin de (ariables.
Eespu,s de +aber incluido la declaracin de constantes ) de (ariables, podemos incluir sentencias de asignacin, de
entrada )-o de salida.
7n sentencias de asignacin, slo se permiten operaciones con (alores n;mericos. Los (alores tipo cadena slo se
permite asignarlos no operarlos, es decir, los operadores G, A, H, ) - no se usan para e0presiones con datos cadena.
78emplos de cdigo para este lengua8e los mostramos a continuacin. "otemos 3ue mane8amos 9 tipos de datos :
entero
real
cadena
Ejo. 1.
inicio
const
entero !%,=1:>
cadena !"N'%)"=?&I"N8"NIDO' %# 'I'T"!%?>
rea4 $I=3.1.12>
@isAa Be4 @a4or de pi es = BC$I>
fin
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
Ejo. 2.
inicio
@ar
entero iCcont>
cadena s1CsCs3>
rea4 xCyCareaCradio>
Tabla de smbolos en C# y su interaccin con el analizador lxico.
Ing. Francisco Ros Acosta Instituto Tecnolgico de la Laguna, a 15 de septiembre del 200. pag. 5 de 2!
@isAa Btec4ea e4 @a4or de i : B>
4eer i>
@isAa Btec4ea e4 @a4or de4 radio : B>
4eer radio>
s1 = BDo4a?>
i = i E 1>
fin
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
Ejo. 3.
inicio
@isAa BFO#% !UNDO B>
fin
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
Ejo. 4.
inicio
const
entero !%,=1:>
cadena !"N'%)"=?&I"N8"NIDO' %# 'I'T"!%?>
rea4 $I=3.1.12>
@ar
entero iCcont>
cadena s1CsCs3>
rea4 xCyCareaCradio>
@isAa Btec4ea e4 @a4or de i : B>
4eer i>
@isAa Btec4ea e4 @a4or de4 radio : B>
4eer radio>
area = $I G radio G radio>
fin
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
La gram6tica propuesta para denotar a este lengua8e es :
$ <H inicio C fin
C <H 1 ' I 8 ' I 1 8 ' I '
1 <H const R
R <H R * id = 9 > I * id = 9 >
* <H entero I cadena I rea4
9 <H nAm I cad
8 <H @ar &
& <H & * I > I * I >
I <H I C id I id
' <H ' % I ' # I ' O I % I # I O
% <H id = " > I id = cad>
" <H " E T I " J T I T
T <H T G 6 I T K 6 I 6
6 <H id I nAm I L " M
# <H 4eer id >
O <H @isAa N >
Tabla de smbolos en C# y su interaccin con el analizador lxico.
Ing. Francisco Ros Acosta Instituto Tecnolgico de la Laguna, a 15 de septiembre del 200. pag. ! de 2!
N <H N C id I N C cad I N C nAm I id I nAm I cad
5semos cual3uiera de los 2 so4t?ares did6cticos REA"RF o bien el RAA$LR para reconocer los e8emplos del 1 al D. Antes
deberemos teclear la gram6tica seg;n se muestra en la 4igura 19.1 en el programa REA"RF.
Fig. No. 3.1 Anlisis de la gramtica propuesta usando el RD-NR.
La gram6tica trans4ormada con 7.R.I. ) F.I. agrupada, obtenida con el REA"RF es :
P -> inicio C fin
C -> K C' | V S | S
C' -> S | V S
K -> const R
R -> Y id = Z ; R'
R' -> Y id = Z ; R' |
Y -> entero | cadena | real
Z -> num | cad
V -> var
-> Y ! ; '
' -> Y ! ; ' |
! -> id !'
!' -> " id !' |
S -> # S' | $ S' | % S'
S' -> # S' | $ S' | % S' |
Tabla de smbolos en C# y su interaccin con el analizador lxico.
Ing. Francisco Ros Acosta Instituto Tecnolgico de la Laguna, a 15 de septiembre del 200. pag. J de 2!
# -> id = #'
#' -> & ; | cad ;
& -> ' &'
&' -> ( ' &' | - ' &' |
' -> ) ''
'' -> * ) '' | + ) '' |
) -> id | num | , & -
$ -> leer id ;
% -> visua . ;
. -> id .' | num .' | cad .'
.' -> " . |
7l e8emplo 9 correspondiente al 4amoso <K%LA /5"E%= simul6ndolo obtenemos lo 3ue indica la 4igura 19.2.
Fig. No. 3.2 Reconocimiento de !"#$A M%ND#&' e(o. 3.
Fodemos teclear otro e8emplo en la simulacin, digamos 3ue el e8o 2 el cual debemos teclear tal ) como se indica. La 4igura
19.9 tiene el resultado como e0itoso ) la deri(acin a la i*3uierda A50 producciones usadasA del con8unto de sentencias.
inicio
@ar
entero idCid>
cadena idCidCid>
rea4 idCidCidCid>
@isAa cad>
4eer id>
@isAa cad>
4eer id>
id = cad>
id = id E nAm>
fin
Tabla de smbolos en C# y su interaccin con el analizador lxico.
Ing. Francisco Ros Acosta Instituto Tecnolgico de la Laguna, a 15 de septiembre del 200. pag. de 2!
Fig. No. 3.3 Reconocimiento del e(o. 2.
) Analizador lxico.
7l con8unto de smbolos terminales 3ue el an6lisis l,0ico deber6 reconocer, no depende del tipo de reconocedor )a sea
descendente o bien ascendente, 3ue usemos en el an6lisis sint6ctico. 7l con8unto Bts de la gram6tica es :
Vts = / inicio fin const id = > entero cadena rea4 nAm cad @ar C E <
G K L M 4eer @isAa 0
Agrupemos a los smbolos terminales de manera 3ue a cada grupo le corresponda un AFE en el an6lisis l,0ico :
AFD id y palabras reservadas.A inicio fin const id entero cadena rea4 @ar 4eer @isAa. #on este
AFE reconoceremos tanto a los identi4icadores como a las palabras reser(adas, usando el m,todo EsId() dentro de la
clase Lexico 3ue produce el so4t?are $FAF$1. 7n el caso de las palabras reser(adas almacenaremos la pare8a le0emaA
le0ema, para el id almacenamos la pare8a toLenAle0ema.
AFD cad.A Reconoceremos secuencias de caracteres encerradas entre comillas. Incluimos el reconocimiento de la
cadena nula. Almacenamos la pare8a toLenAle0ema.
AFD otros.A 7n este AFE reconocemos a los dem6s smbolos terminales : = > C E < G K L M.
Almacenamos la pare8a le0emaAle0ema.
AFD delim.A Reconocemos a los delimitadores pero no los almacenamos, ni al toLen, ni al le0ema.
Recomendamos al lector 3ue consulte el documento leeme-analex-C para obtener in4ormacin del uso del so4t?are $FAF$1
para generar cdigo ;til para construir un anali*ador l,0ico. Tambi,n se sugiere consultar los documentos leeme-!D-"!# )
leeme-recasc-C donde se e0plica la modi4icacin de la clase Lexico para cumplir con lo especi4icado en las (iMetas del
p6rra4o anterior. A continuacin mostramos la e0presin regular para cada toLen ) su AFE.
AFD delim.A $ir(e para reconocer a los caracteres delimitadores tales como el blanco, nue(a lnea, retorno de carro, tab. $u
e0presin regular ) AFE ptimo construdo por $FAF$1 son :
Ode4imP <H QR RnRrRtSE QTR RnRrRtS
Tabla de smbolos en C# y su interaccin con el analizador lxico.
Ing. Francisco Ros Acosta Instituto Tecnolgico de la Laguna, a 15 de septiembre del 200. pag. N de 2!
AFD id.A Reconoce al lengua8e de todos los identi4icadores en #. La regla 3ue usaremos est6 restingida a : cadenas 3ue inicien con letra seguida de 0 o mas
letras, dgitos o subra)ado. Tambi,n usaremos este autmata para reconocer a las palabras reser(adas int ) $loat. $u e0presin regular ) su AFE son :
O4etraP <H Q%<9a<US
OdigP <H Q:<7S
OgAion3aVoP <H W
OidP <H O4etraP L O4etraP I OdigP I OgAion3aVoP MG QT%<9a<U:<7WS
AFD num.A Bamos a limitar a los le0emas del toLen num a slo enteros. La e0presin regular ) su AFE ptimo son :
OnAmP <H Q:<7SE QT:<7S
Tabla de smbolos en C# y su interaccin con el analizador lxico.
Ing. Francisco Ros Acosta Instituto Tecnolgico de la Laguna, a 15 de septiembre del 200. pag. 10 de 2!
AFD cad.A Reconoce a las cadenas de caracteres encerradas entre comillas.
OcadP <H RX QTRXSG RX
AFD otros.A $u e0presin regular es :
OotrosP <H = I > I C I RE I R< I RG I K I RL I RM
7l cdigo generado por $FAF$1 para la clase Lexico es @se inclu)en las modi4icacionesA :
c4ass #exico
O
const int TO1R"C = 0>
const int !%,TO1"N' = 0::>
stringQS W4exemas>
stringQS WtoYens>
string W4exema>
int WnoToYens>
int Wi>
int WiniToYen>
%Atomata o%6D>
pA34ic #exicoLM KK constrActor por defecto
O
W4exemas = neZ stringQ!%,TO1"N'S>
WtoYens = neZ stringQ!%,TO1"N'S>
o%6D = neZ %AtomataLM>
Wi = :>
WiniToYen = :>
WnoToYens = :>
Tabla de smbolos en C# y su interaccin con el analizador lxico.
Ing. Francisco Ros Acosta Instituto Tecnolgico de la Laguna, a 15 de septiembre del 200. pag. 11 de 2!
P
pA34ic @oid IniciaLM
O
Wi = :>
WiniToYen = :>
WnoToYens = :>
P
pA34ic @oid %na4iUaLstring textoM
O
3oo4 rec%Ato>
int no%Ato>
ZDi4e LWi [ texto.#engtDM
O
rec%Ato=fa4se>
no%Ato=:>
forL>no%Ato[TO1R"C\\]rec%Ato>M
ifLo%6D.ReconoceLtextoCWiniToYenCref WiCno%AtoMM
rec%Ato=trAe>
e4se
no%AtoEE>
if Lrec%AtoM
O
W4exema = texto.'A3stringLWiniToYenC Wi < WiniToYenM>
sZitcD Lno%AtoM
O
KK<<<<<<<<<<<<<< %Atomata de4im<<<<<<<<<<<<<<
case : : KK WtoYensQWnoToYensS = Xde4imX>
3reaY>
KK<<<<<<<<<<<<<< %Atomata id<<<<<<<<<<<<<<
case 1 : if L"sIdLMM
WtoYensQWnoToYensS = XidX>
e4se
WtoYensQWnoToYensS = W4exema>
3reaY>
KK<<<<<<<<<<<<<< %Atomata nAm<<<<<<<<<<<<<<
case : WtoYensQWnoToYensS = XnAmX>
3reaY>
KK<<<<<<<<<<<<<< %Atomata otros<<<<<<<<<<<<<<
case 3 : WtoYensQWnoToYensS = W4exema>
3reaY>
KK<<<<<<<<<<<<<< %Atomata cad<<<<<<<<<<<<<<
case . : WtoYensQWnoToYensS = XcadX>
3reaY>
P
if Lno%Ato ]= :M
W4exemasQWnoToYensEES = W4exema>
P
e4se
WiEE>
WiniToYen = Wi>
P
P
pri@ate 3oo4 "sIdLM
O
stringQS pa4res =O XinicioXC XfinXC Bconst?C B@ar?C Bentero?C Brea4?C Bcadena?C B4eer?C B@isAa?P>
for Lint i = :> i [ pa4res.#engtD> iEEM
if LW4exema==pa4resQiSM
retArn fa4se>
retArn trAe>
P
P KK fin de 4a c4ase #exico
La clase Automata es :
c4ass %Atomata
O
string WtextoIma>
int Wedo%ct>
Tabla de smbolos en C# y su interaccin con el analizador lxico.
Ing. Francisco Ros Acosta Instituto Tecnolgico de la Laguna, a 15 de septiembre del 200. pag. 12 de 2!
cDar 'igCarLref int iM
O
if Li == WtextoIma.#engtDM
O
iEE>
retArn ^ ^>
P
e4se
retArn WtextoImaQiEES>
P
pA34ic 3oo4 ReconoceLstring textoCint iniToYenCref int iCint no%AtoM
O
cDar c>
WtextoIma = texto>
string 4engAaVe>
sZitcD Lno%AtoM
O
KK<<<<<<<<<<<<<< %Atomata de4im<<<<<<<<<<<<<<
case : : Wedo%ct = :>
3reaY>
KK<<<<<<<<<<<<<< %Atomata id<<<<<<<<<<<<<<
case 1 : Wedo%ct = 3>
3reaY>
KK<<<<<<<<<<<<<< %Atomata nAm<<<<<<<<<<<<<<
case : Wedo%ct = 2>
3reaY>
KK<<<<<<<<<<<<<< %Atomata otros<<<<<<<<<<<<<<
case 3 : Wedo%ct = 7>
3reaY>
KK<<<<<<<<<<<<<< %Atomata cad<<<<<<<<<<<<<<
case . : Wedo%ct = 11>
3reaY>
P
ZDi4eLi[=WtextoIma.#engtDM
sZitcD LWedo%ctM
O
KK<<<<<<<<<<<<<< %Atomata de4im<<<<<<<<<<<<<<
case : : c='igCarLref iM>
if LL4engAaVe=X RnRrRtXM.IndexOfLcMH=:M Wedo%ct=1> e4se
O i=iniToYen>
retArn fa4se> P
3reaY>
case 1 : c='igCarLref iM>
if LL4engAaVe=X RnRrRtXM.IndexOfLcMH=:M Wedo%ct=1> e4se
if LL4engAaVe=X]RX_`a\R^LMGEC<
.K:13.025/7:>[=Hb@%&CD"6(FI)1#!NO$-R'TU8N,*9QRRSTWca3cdefgDiVY4mnopdrstA@ZxyUOIPe f ghi;jklmnop q rs
B?tJuvwxyz {| }~<RfXM.IndexOfLcMH=:M Wedo%ct=> e4se
O i=iniToYen>
retArn fa4se> P
3reaY>
case : i<<>
retArn trAe>
3reaY>
KK<<<<<<<<<<<<<< %Atomata id<<<<<<<<<<<<<<
case 3 : c='igCarLref iM>
if
LL4engAaVe=X%&CD"6(FI)1#!NO$-R'TU8N,*9a3cdefgDiVY4mnopdrstA@ZxyUXM.IndexOfLcMH=:M Wedo%ct=.> e4se
O i=iniToYen>
retArn fa4se> P
3reaY>
case . : c='igCarLref iM>
if
LL4engAaVe=X%&CD"6(FI)1#!NO$-R'TU8N,*9a3cdefgDiVY4mnopdrstA@ZxyUXM.IndexOfLcMH=:M Wedo%ct=.> e4se
if LL4engAaVe=X:13.025/7XM.IndexOfLcMH=:M Wedo%ct=.> e4se
if LL4engAaVe=XWXM.IndexOfLcMH=:M Wedo%ct=.> e4se
if LL4engAaVe=X ]RX_`a\R^LMGEC<.K:>[=Hb@QRRSTcOIPe f ghi;jklmnop q rsB?tJu
vwxyz {| }~<RnRtRrRfXM.IndexOfLcMH=:M Wedo%ct=0> e4se
O i=iniToYen>
retArn fa4se> P
3reaY>
case 0 : i<<>
retArn trAe>
3reaY>
Tabla de smbolos en C# y su interaccin con el analizador lxico.
Ing. Francisco Ros Acosta Instituto Tecnolgico de la Laguna, a 15 de septiembre del 200. pag. 19 de 2!
KK<<<<<<<<<<<<<< %Atomata nAm<<<<<<<<<<<<<<
case 2 : c='igCarLref iM>
if LL4engAaVe=X:13.025/7XM.IndexOfLcMH=:M Wedo%ct=5> e4se
O i=iniToYen>
retArn fa4se> P
3reaY>
case 5 : c='igCarLref iM>
if LL4engAaVe=X:13.025/7XM.IndexOfLcMH=:M Wedo%ct=5> e4se
if LL4engAaVe=X ]RX_`a\R^LMGEC<
.K:>[=Hb@%&CD"6(FI)1#!NO$-R'TU8N,*9QRRSTWca3cdefgDiVY4mnopdrstA@ZxyUOIPe f ghi;jklmnop q rsB?tJu
vwxyz {| }~<RnRtRrRfXM.IndexOfLcMH=:M Wedo%ct=/> e4se
O i=iniToYen>
retArn fa4se> P
3reaY>
case / : i<<>
retArn trAe>
3reaY>
KK<<<<<<<<<<<<<< %Atomata otros<<<<<<<<<<<<<<
case 7 : c='igCarLref iM>
if LL4engAaVe=X=XM.IndexOfLcMH=:M Wedo%ct=1:> e4se
if LL4engAaVe=X>XM.IndexOfLcMH=:M Wedo%ct=1:> e4se
if LL4engAaVe=XCXM.IndexOfLcMH=:M Wedo%ct=1:> e4se
if LL4engAaVe=XEXM.IndexOfLcMH=:M Wedo%ct=1:> e4se
if LL4engAaVe=X<XM.IndexOfLcMH=:M Wedo%ct=1:> e4se
if LL4engAaVe=XGXM.IndexOfLcMH=:M Wedo%ct=1:> e4se
if LL4engAaVe=XKXM.IndexOfLcMH=:M Wedo%ct=1:> e4se
if LL4engAaVe=XLXM.IndexOfLcMH=:M Wedo%ct=1:> e4se
if LL4engAaVe=XMXM.IndexOfLcMH=:M Wedo%ct=1:> e4se
O i=iniToYen>
retArn fa4se> P
3reaY>
case 1: : retArn trAe>
3reaY>
KK<<<<<<<<<<<<<< %Atomata cad<<<<<<<<<<<<<<
case 11 : c='igCarLref iM>
if LL4engAaVe=XRXXM.IndexOfLcMH=:M Wedo%ct=1> e4se
O i=iniToYen>
retArn fa4se> P
3reaY>
case 1 : c='igCarLref iM>
if LL4engAaVe=XRXXM.IndexOfLcMH=:M Wedo%ct=13> e4se
if LL4engAaVe=X ]_`a\R^LMGEC<
.K:13.025/7:>[=Hb@%&CD"6(FI)1#!NO$-R'TU8N,*9QRRSTWca3cdefgDiVY4mnopdrstA@ZxyUOIPe f ghi;jklmnop q rs
B?tJuvwxyz {| }~<RnRtRrRfXM.IndexOfLcMH=:M Wedo%ct=1> e4se
O i=iniToYen>
retArn fa4se> P
3reaY>
case 13 : retArn trAe>
3reaY>
P
sZitcD LWedo%ctM
O
case : KK %Atmata de4im
case 0 : KK %Atmata id
case / : KK %Atmata nAm
<<i>
retArn trAe>
P
retArn fa4se>
P
P KK fin de 4a c4ase %Atomata
#onstru)amos la aplicacin >indo?s #1 3ue sir(a para anali*ar l,0icamente un programa 4uente de entrada, 3ue cumpla
con la sinta0is de la gram6tica 3ue denota al lengua8e propuesto.
La inter4ase gr64ica de la aplicacin >indo?s #1 contiene los componentes : 2 LabelOs, 1 Te0t'o0, 1 data2ridBie? ) 1
'utton. Agrega los componentes de86ndoles su propiedad "ame intacta. #aracteri*a al componente data2ridBie?1 con la
adicin de sus 2 columnas T%P7" ) L7Q7/A.
La inter4ase gr64ica de la aplicacin es la mostrada en la 4igura 1D.1.
Tabla de smbolos en C# y su interaccin con el analizador lxico.
Ing. Francisco Ros Acosta Instituto Tecnolgico de la Laguna, a 15 de septiembre del 200. pag. 1D de 2!
Fig. No. ).1 Aplicaci*n +indo,s -.' para el anlisis l/0ico.
Agregamos la de4inicin del ob8eto oAnalex en Form%&cs :
#exico o%na#ex = neZ #exicoLM>
A+ora aMadimos las clases Lexico ) Automata al pro)ecto ) les pegamos el cdigo 3ue +emos mostrado antes en esta misma
seccin.
Agregamos en el clicL del botn A"ALI$I$ L7QI#% el cdigo siguiente :
pA34ic partia4 c4ass 6orm1 : 6orm
O
#exico o%na#ex = neZ #exicoLM>
pA34ic 6orm1LM
O
Initia4iUeComponentLM>
P
pri@ate @oid 3Atton1WC4icYLo3Vect senderC "@ent%rgs eM
O
o%na#ex.IniciaLM>
o%na#ex.%na4iUaLtext&ox1.TextM>
data(rid8ieZ1.RoZs.C4earLM>
if Lo%na#ex.NoToYens H :M
data(rid8ieZ1.RoZs.%ddLo%na#ex.NoToYensM>
for Lint i = :> i [ o%na#ex.NoToYens> iEEM
O
data(rid8ieZ1.RoZsQiS.Ce44sQ:S.8a4Ae = o%na#ex.ToYenQiS>
data(rid8ieZ1.RoZsQiS.Ce44sQ1S.8a4Ae = o%na#ex.#exemaQiS>
P
P
P
Antes de e8ecuta la aplicacin, debemos agregar a la clase Lexico la propiedades siguientes :
pA34ic int NoToYens
O
get O retArn WnoToYens> P
P
Tabla de smbolos en C# y su interaccin con el analizador lxico.
Ing. Francisco Ros Acosta Instituto Tecnolgico de la Laguna, a 15 de septiembre del 200. pag. 15 de 2!
pA34ic stringQS #exema
O
get O retArn W4exemas> P
P
pA34ic stringQS ToYen
O
get O retArn WtoYens> P
P
La 4igura 1D.2 muestra la e8ecucin de la aplicacin. "otemos 3ue +emos despla*ado la barra de la re8illa de (isuali*acin
de las pare8as toLenAle0ema, con el 4in de mostrar las ;ltimas pare8as reconocidas. 7ntre ellas est6n los toLens cad.
Fig. No. ).2 Aplicaci*n +indo,s -. con la entrada del e(o. 2.
* An'lisis de los atributos de los ob&etos (ue se almacenan en la tabla de smbolos.
Bamos a limitar nuestro uni(erso a los toLens 3ue reconoce el anali*ador l,0ico de nuestro e8emplo ) 3ue necesiten de
instalarse en la tabla de smbolos al momento del proceso del an6lisis l,0ico :
id
num
cad
Ee los anteriores tomaremos para nuestro estudio al toLen id. Los toLens num ) cad los de8aremos para (erlos
posteriormente. 7l toLen id puede representar o una (ariable o una constante. Los atributos 3ue proponemos de inicio son :
+alor, representa el (alor 3ue se le asigna durante los di4erentes procesos de an6lisis a la (ariable o a la constante.
#osicion, se re4iere al ndice de inicio del le0ema donde se reconoci al toLen id dentro del te0to de entrada.
Tabla de smbolos en C# y su interaccin con el analizador lxico.
Ing. Francisco Ros Acosta Instituto Tecnolgico de la Laguna, a 15 de septiembre del 200. pag. 1! de 2!
7l anali*ador l,0ico en lo 3ue respecta al toLen id al momento de reconocerlo, slo puede instalarlo en la tabla de smbolos
) almacenar los atributos nombre ) posicion. Los atributos clase, valor, tipo ) no'ytes son asignados en la etapa del
an6lisis sem6ntico. For lo anterior, la clase Lexico deber6 tener un m,todo 3ue instale a un id en la tabla de smbolos,
asignando slo los atributos nombre ) posicion.
7ntonces, debemos pensar en 3ue los nodos de las listas de la tabla de smbolos contienen ob8etos de una clase, cu)os
atributos sean los mencionados. A esta clase la llamaremos TipoElem.
c4ass Tipo"4em
O
pri@ate string Wc4ase>
pri@ate string Wnom3re>
pri@ate string W@a4or>
pri@ate string Wtipo>
pri@ate int Wno&ytes>
pri@ate int Wposicion>
P
Tui*6 la ;nica con4usin 3ue pudiera e0istir al anali*ar esta de4inicin de atributos, es el tipo strin( 3ue le +emos dado al
atributo valor. 7n cuanto a esta cuestin, pensemos en reali*ar una con(ersin de acuerdo al atributo tipo 3ue el an6lisis
sem6ntico registre.
#on los atributos iniciales )a de4inidos 3uedando especi4icado 3ue slo empe*aremos por instalar al toLen id ) sus atributos
nombre ) posicion durante el an6lisis l,0ico, estamos listos para de4inir la clase TablaSimbolos.
- Clase TablaSimbolos.
Ee acuerdo al modelo conceptual presentado en la seccin 2, la tabla de smbolos es un ob8eto 3ue contiene un arreglo de
listas enla*adas. Iniciemos por de4inir este atributo con elementos de la clase Lista.
Fig. No. 1.1 Aplicaci*n +indo,s -. con la clase TablaSimbolos' su constructor 2 el m/todo Inicia().
Tabla de smbolos en C# y su interaccin con el analizador lxico.
Ing. Francisco Ros Acosta Instituto Tecnolgico de la Laguna, a 15 de septiembre del 200. pag. 1J de 2!
c4ass Ta34a'im3o4os
O
#istaQS We4ems>
P
Agreguemos esta clase a la aplicacin >indo?s #1 3ue )a contiene al anali*ador l,0ico para el lengua8e propuesto. 5na
(e* aMadida la clase TablaSimbolos al pro)ecto, escribamos la sentencia de de4inicin del atributo )elems.
Tambi,n agregamos el constructor para la clase TablaSimbolos, adem6s del m,todo Inicia() utili*ado tantas (eces como sea
necesario e4ectuar la iniciali*acin del ob8eto tabla de smbolos al 3ue mas tarde llamaremos oTablaSimb.
La 4igura 1!.1 contiene la aplicacin >indo?s con la clase aMadida ) el cdigo para los m,todos 3ue +emos mencionado.
7l constructor de la clase TablaSimbolos permite 4i8ar la dimensin del arreglo de listas por medio del par6metro de entrada
no"4ems. Adem6s crea a los ob8etos Lista del arreglo mediante la llamada al operador ne..
A di4erencia del constructor parametri*ado, el m,todo Inicia() no crea a los ob8etos Lista del arreglo @)a 3ue pre(iamente
+an sido creados por el constructorA, sino 3ue asigna las cabeceras de los ob8etos Lista a null ) su n;mero de nodos los
asigna a 0, cumpliendo de esta manera su 4uncin.
#omo )a estamos mane8ando a los ob8etos Lista, debemos agregar la de4inicin de esta clase al pro)ecto. La de4inicin de la
clase Lista es :
c4ass #ista
O
Nodo Wca3#ista>
int WnoNodos>
pA34ic #istaLM
O
Wca3#ista = nA44>
WnoNodos = :>
P
pA34ic Nodo Ca3
O
get O retArn Wca3#ista> P
set O Wca3#ista = @a4Ae>P
P
pA34ic @oid InsInicioLTipo"4em o"4emM
O
Nodo nAe@oNodo = neZ NodoLM>
nAe@oNodo.Info = o"4em>
nAe@oNodo.'ig = Wca3#ista>
Wca3#ista = nAe@oNodo>
WnoNodosEE>
P
pA34ic int NoNodos
O
get O retArn WnoNodos>P
set O WnoNodos = @a4Ae>P
P
P
La clase Lista representa a ob8etos con nodos simplemente enla*ados, con campos de in4ormacin ) de enlace @re4erenciasA.
7n cual3uier curso de estructura de datos es mane8ada esta clase. Realmente los m,todos 3ue se +an incluido son los menos.
5na buena me8ora es agregar el m,todo Ins*rden(oElem) 3ue agrega en orden ascendente al ob8eto o/lem, en la lista
enla*ada.
"otemos 3ue la clase Lista +ace re4erencia a otras 2 clases : "odo ) TipoElem. La 4igura 1!.2 muestra la aplicacin
>indo?s #1 con la clase Lista aMadida.
Tabla de smbolos en C# y su interaccin con el analizador lxico.
Ing. Francisco Ros Acosta Instituto Tecnolgico de la Laguna, a 15 de septiembre del 200. pag. 1 de 2!
Fig. No. 1.2 Aplicaci*n +indo,s -. con la clase Lista incluida.
%bser(emos 3ue la clase Lista 3ue +emos incluido al pro)ecto, contiene un constructor por de4ecto, 2 propiedades #ab )
"o"odos, adem6s del m,todo InsInicioRS.
La clase "odo es la encargada de representar a los elementos de la lista enla*ada. La aMadimos al pro)ecto seg;n el cdigo
3ue mostramos enseguida :
c4ass Nodo
O
Tipo"4em WoInfo>
Nodo Wsig>
pA34ic Tipo"4em Info
O
get O retArn WoInfo>P
set O WoInfo = @a4Ae> P
P
pA34ic Nodo 'ig
O
get O retArn Wsig> P
set O Wsig = @a4Ae> P
P
P
La clase "odo adem6s de sus atributos slo contiene 2 propiedades : In$o ) Si(. Lo 3ue sigue es aMadir al pro)ecto la clase
TipoElem con los atributos 3ue de4inimos anteriormente en esta misma seccin.
For a+ora slo declararemos los atributos en la clase TipoElem, de8ando la insercin de los m,todos para despu,s. La 4igura
muestra a la aplicacin >indo?s despu,s de +aber agregado las 9 clases : Lista, "odo ) TipoElem.
Tabla de smbolos en C# y su interaccin con el analizador lxico.
Ing. Francisco Ros Acosta Instituto Tecnolgico de la Laguna, a 15 de septiembre del 200. pag. 1N de 2!
Fig. No. 1.3 Aplicaci*n +indo,s -. con las clases Nodo 2 TipoElem.
$lo 4alta agregar al ob8eto oTablaSimb dentro del arc+i(o Form%&cs, dimensionando al arreglo de listas en 2!. La ra*n de
esta dimensin, es 3ue la 4uncin de desmenu*amiento @+as+A toma al primer caracter del le0ema del id de manera 3ue si es
una ARaS el id se aMade a la lista con indice 0, si empie*a con 'RbS se agrega a la lista con indice 1, ) as +asta la letra UR*S
en donde se agrega al id a la lista con indice 25.
Agrega la de4inicin del ob8eto oTablaSimb en la siguiente lnea a la de4inicin del ob8eto oAnaex, seg;n se muestra en
el segmento de cdigo de la clase Form% del arc+i(o Form%&cs.
pA34ic partia4 c4ass 6orm1 : 6orm
O
#exico o%na#ex = neZ #exicoLM>
Ta34a'im3o4os oTa34a'im3 = neZ Ta34a'im3o4osL2M>
pA34ic 6orm1LM
O
Initia4iUeComponentLM>
P
C
C
C
#ompilemos la aplicacin slo para obser(ar 3ue no e0istan errores en el cdigo 3ue +emos aMadido. 7l resultado de la
compilacin es e0itoso, sin embargo tenemos unas ad(ertencias 3ue no les (amos a poner atencin. Tecleemos el cdigo
siguiente en la (entana de entrada de te0to, de manera 3ue (eamos las pare8as toLenAle0ema 3ue el anali*ador l,0ico
encuentra.
inicio
@isAa BFO#% !UNDO?>
fin
Kasta este punto, tenemos la de4inicin del ob8eto oTablaSimb en nuestra aplicacin, sin errores. Lo 3ue sigue es instalar a
los id reconocidos durante la etapa del an6lisis l,0ico, en la tabla de smbolos.
0 Instalacin de identi1icadores.
7n la seccin anterior la tabla de smbolos se dimension a 2! listas enla*adas cada una correspondiente a una letra del
abecedario.
Tabla de smbolos en C# y su interaccin con el analizador lxico.
Ing. Francisco Ros Acosta Instituto Tecnolgico de la Laguna, a 15 de septiembre del 200. pag. 20 de 2!
% : null
& 1 null
C null
D 3 null
" . null
6 0 null
( 2 null
; ;
C
; ;
C
; ;
C
, 3 null
* . null
9 0 null
La pregunta es : Ven 3u, parte del cdigo (amos a insertar la instalacin de un id durante el an6lisis l,0icoW. 'ueno,
(a)amonos por pasos, as 3ue lo primero 3ue (amos a +acer es enumerar los pasos a seguir :