Sunteți pe pagina 1din 26

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!
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 :

/odelo conceptual de una tabla de smbolos.

Lengua8e de e8emplo ) la gram6tica de conte0to libre 3ue denota su sinta0is.

An6li*ador l,0ico para la gram6tica.

An6lisis de los atributos de los ob8etos 3ue se almacenan en la tabla de smbolos.

#lase TablaSimbolos.

Instalacin de identi4icadores, cadenas ) n;meros.

Bisuali*acin de la tabla de smbolos.


! "odelo conce#tual de la tabla de smbolos.
'6sicamente la tabla de smbolos es un arreglo de listas enla*adas. Inicialmente las listas enla*adas deber6n estar (acias o
sea 3ue la re4erencia de su cabecera tiene el (alor de null.
: null
1 null
null
3 null
. null
0 null
2 null
;
C
;
C
;
C
n<3 null
n< null
n<1 null
Fig. No. 2.1 Modelo conceptual de la tabla de smbolos para desmenuzamiento de n entradas.
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. D de 2!
#ada nodo en cada lista enla*ada representa un smbolo instalado en la tabla por cual3uier etapa de la 4ase de an6lisis, sea
l,0ico, sint6ctico o sem6ntico. 7sta 4uera del alcance de estos apuntes, la 4ase de sntesis.
La insercin de los elementos en la tabla de smbolos re3uiere de de4inir una 4uncin de desmenu*amiento @+as+ingA. #ada
smbolo antes de insertarlo en la lista enla*ada correspondiente, debe ser procesado por esta 4uncin 3ue ser6 la encargada
de decidir +acia 3ue lista enla*ada debe instalarse el smbolo en la entrada.
Ee acuerdo a lo anterior, si deseamos construir una tabla de smbolos sigamos las etapas 3ue a continuacin listamos :

Ee4inir la 4uncin de desmenu*amiento.

Ee4inir la clase Lista.

Ee4inir la clase "odo.

Ee4inir la clase Tipo7lem.

Ee4inir la clase Tabla$imbolos.


$ en%ua&e de e&em#lo y su %ram'tica de contexto libre (ue lo denota.
Eurante algunos semestres +emos propuesto un lengua8e para el estudio de las di4erentes 4ases de an6lisis, consistente de las
instrucciones :

Eeclaracin de constantes

Eeclaracin de (ariables

Asignacin

7ntrada

$alida
Las reglas de sinta0is para incluir las sentencias en este lengua8e de programacin propuesto son :

7l cuerpo del programa es encerrado entre 2 sentencias : inicio ) fin.

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 lectura o entrada de datos, slo puede leerse un dato en la sentencia.

7n sentencias de (isuli*acin o de salida, pueden incluirse constantes, (ariables, pero no e0presiones.

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 num.A Reconoceremos slo n;mero enteros. 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 :

clase, sus (alores posibles : variable , constante.

nombre, es el le0ema del toLen id Rtal ) como se encuentra en el te0to de entradaS.

+alor, representa el (alor 3ue se le asigna durante los di4erentes procesos de an6lisis a la (ariable o a la constante.

ti#o, representa el tipo de dato al 3ue pertenece la (ariable o la constante.

no,ytes, n;mero de b)tes en los 3ue se almacena la (ariable o 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 :

/odi4icar la llamada al m,todo Anali+a() de la clase Lexico.

/odi4icar la de4inicin del m,todo Anali+a() en sus par6metros 3ue recibe.

Insertar el mensa8e oTablaSimb&Instalar() dentro del m,todo Anali+a().


Llamada al m,todo Anali+a().A Inicialmente, el m,todo tiene slo un par6metro : el componente Text'ox 3ue contiene a la
cadena 3ue se anali*a l,0icamente. A+ora, tendr6 2 par6metros el 3ue )a conocemos ) el ob8eto oTablaSimb 3ue
en(iaremos como re4erencia, de manera 3ue pueda modi4icarse a este ob8eto, es decir, a la tabla de smbolos. 7ntonces
modi4icamos la llamada al m,todo Anali+a() seg;n se muestra a continuacin :
pri@ate @oid 3Atton1WC4icYLo3Vect senderC "@ent%rgs eM
O
o%na#ex.IniciaLM>
oTa34a'im3.IniciaLM>
o%na#ex.%na4iUaLtext&ox1.TextCoTa34a'im3M>
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
De$inici-n del m,todo Anali+a() en sus par.metros.A Eesde luego 3ue si compilamos e0istir6 un error, as 3ue debemos
tambi,n modi4icar la de4inicin del m,todo Anali+a() en la clase Lexico, seg;n se te indica en el segmento de cdigo
siguiente :
pA34ic @oid %na4iUaLstring textoC Ta34a'im3o4os oTa34a'im3M
O

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. 21 de 2!
#ompilemos ) e8ecutemos slo para obser(ar 3ue no e0istan errores al +acer nuestras modi4icaciones a la aplicacin
>indo?s #1 3ue estamos constru)endo.
Instalaci-n del id dentro del m,todo Anali+a().A 7s tri(ial 3ue la instalacin del id dentro de la tabla de smbolos deber6
e4ectuarse al momento en 3ue un toLen id sea reconocido, dentro del cdigo del m,todo Anali+a(). K6*lo seg;n se muestra
en la 4igura 1J.1.
Fig. No. 3.1 Mensa(e oTablaSimb.Instalar() en la de4inici*n del m/todo Analiza() de la clase Lexico.
Beamos los par6metros 3ue recibe el m,todo Instalar() :
oTa34a'im3.Insta4arLW4exemaC WiniToYenM>

7l par6metro )lexema es el dato con el 3ue se (a a instanciar al atributo )nombre.

7l par6metro )iniTo/en es el (alor con el 3ue se (a a instanciar al atributo )posicion.


7l m,todo Instalar() lo de4inimos en la clase TablaSimbolos ) consiste del cdigo siguiente :
pA34ic @oid Insta4arLstring nom3reC int posicionM
O
cDar car = nom3re.ToUpperLMQ:S>
int indice = Con@ert.ToInt3LcarM < 20>
if L] "ncAentraToYenLindiceCnom3reMM
O
Tipo"4em o"4em=neZ Tipo"4emLnom3reC posicionM>
We4emsQindiceS.InsInicioLo"4emM>
P
P
La 4uncin de +as+ est6 compuesta de 2 lneas de cdigo : la primera toma al primer caracter del identi4icador ) lo con(ierte
a ma);scula, la segunda lnea de cdigo obtiene el ndice 3ue le corresponde a la letra en el arreglo de listas enla*adas de la
tabla de smbolos.
cDar car = nom3re.ToUpperLMQ:S>
int indice = Con@ert.ToInt3LcarM < 20>
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. 22 de 2!
7l identi4icador en instalado slo si no se encuentra en la lista enla*ada correspondiente al ndice 3ue +a calculado la
4uncin de desmenu*amiento @+as+A. 7l m,todo EncuentraTo/en() es el encargado de reali*ar la b;s3ueda, si lo encuentra
retorna true, 1alse de lo contrario. "ecesitamos agregar la de4inicin de este m,todo en la clase TablaSimbolos seg;n lo
mostramos enseguida :
pA34ic 3oo4 "ncAentraToYenLint indiceCstring nom3reM
O
Nodo ref#ista = We4emsQindiceS.Ca3>
ZDi4e Lref#ista ]= nA44M
O
if Lref#ista.Info.Nom3re==nom3reM
retArn trAe>
ref#ista = ref#ista.'ig>
P
retArn fa4se>
P
"otemos 3ue el m,todo retorna true cuando el atributo )nombre de(uelto por la propiedad "ombre, es igual al par6metro
nombre recibido por el m,todo EncuentraTo/en().
$i no se encuentra el identi4icador, entonces insertamos el nue(o elemento en la lista cu)o ndice +a sido calculado por la
4uncin de desmenu*amiento, mediante el uso del m,todo InsInicio(), de4inido en la clase Lista.
Antes de compilar la aplicacin debemos aMadir la propiedad "ombre en la clase TipoElem de acuerdo al cdigo 3ue
mostramos a continuacin :
pA34ic string Nom3re
O
get O retArn Wnom3re> P
set O Wnom3re = @a4Ae> P
P
%bser(emos 3ue e0iste un constructor 3ue debemos de4inir en la clase TipoElem. 7ste constructor es utili*ado en el m,todo
Instalar() de la clase TablaSimbolos, como par6metro al crear el ob8eto 3ue se (a a instalar.
Tipo"4em o"4em = neZ Tipo"4emLnom3reC posicionM>
7l cdigo del constructor es el siguiente, agreguemoslo a la clase TipoElem :
pA34ic Tipo"4emLstring nom3reC int posicionM
O
Wc4ase = B?>
Wnom3re = nom3re>
Wposicion = posicion>
P
#ompilemos el programa slo para probar 3ue no e0istan errores en el cdigo 3ue +emos aMadido. La aplicacin >indo?s
debe e8ecutarse sin problemas @slo ad(ertenciasA.
Kasta a3u, )a tenemos instalados los toLens id 3ue +a)an sido reconocidos en el an6lisis l,0ico, en la tabla de smbolos
representada por el ob8eto oTablaSimb. $lo resta (isuali*ar la tabla de smbolos, cuestin 3ue +aremos en la siguiente
seccin.
2 3isualizacin de la tabla de smbolos.
Fara (isuali*ar la tabla de smbolos utili*aremos una nue(a 4orma Form0&cs, 3ue aMadimos usando la opcin del men;
#ro1ect 2 Add 3indo4s Form. La 4igura 1.1 muestra a nuestro pro)ecto con la 4orma Form0&cs incluida. La propiedad Text
de la 4orma Form0&cs se +a cambiado a : TA'LA E7 $I/'%L%$.
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. 29 de 2!
Fig. No. 5.1 Adici*n de la nue6a Form2.cs al pro2ecto de la aplicaci*n.
"otemos 3ue tambi,n +emos agregado un componente Data5rid6ie4 a la 4orma Form0&cs. 7ste componente se encargar6
de recibir ) (isuali*ar en ,l, los elementos de la tabla de smbolos 3ue se encuentran en el ob8eto oTablaSimb. 7l
componente Data5rid6ie4 es el 3ue aparece con color gris oscuro. La propiedad "ame de este componente es el 3ue por
de4ecto recibe data5rid6ie4%.
Bol(amos a la 4orma Form%&cs para agregar un botn 3ue precisamente (isualice a la 4orma Form0&cs, de manera 3ue
despu,s llenaremos el data5rid6ie4% de la Forma0&cs con los elementos en el b8eto oTablaSimb. Asignemos a la proiedad
Text del nue(o botn button0, el (alor TA'LA E7 $I/'%L%$. La 4igura 1.2 muestra la inter4ase con el botn button0
insertado en la 4orma Form%&cs.
Agreguemos en el e(ento Clic/ del button0 el cdigo 3ue permite (isuali*ar a la 4orma Form0&cs :
pri@ate @oid 3AttonWC4icYLo3Vect senderC "@ent%rgs eM
O
6orm formaTa34a'im3 = neZ 6ormLM>
formaTa34a'im3.'DoZLM>
P
$i compilamos ) e8ecutamos nuestra aplicacin, (eremos 3ue al +acer clicL en el button0 tenemos a nuestra (ista la 4orma
Form0&cs. Lo 3ue resta es caracteri*ar al data5rid6ie4% de la 4orma Form0&cs de manera 3ue acepte a los elementos en el
ob8eto oTablaSimb de4inido en la 4orma Form%&cs.

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. 2D de 2!
Fig. No. 5.2 Adici*n del button2 para 6isualizar la 4orma Form2.cs 7tabla de smbolos-.
Agreguemos a+ora a la aplicacin el mensa8e al ob8eto oTablaSimb para 3ue (isualice a sus elementos en el componente
data5rid6ie4% de Form0&cs. 7ste mensa8e debemos aMadirlo en el cdigo para el clicL del button0.
pri@ate @oid 3AttonWC4icYLo3Vect senderC "@ent%rgs eM
O
6orm formaTa34a'im3 = neZ 6ormLM>
oTa34a'im3.8isAaLformaTa34a'im3.data(rid8ieZ1M>
formaTa34a'im3.'DoZLM>
P
Tambi,n debemos agregar la de4inicin del m,todo 6isua() a la clase TablaSimbolos. 7l cdigo es :
pA34ic @oid 8isAaL'ystem.NindoZs.6orms.Data(rid8ieZ d(8M
O
Nodo refNodo>
int co4 = 1>
d(8.Co4AmnCoAnt = tDis.!ayorLM E 1>
d(8.RoZs.%ddLWe4ems.#engtDM>
for Lint i = :> i [ We4ems.#engtD> iEEM
O
co4 = 1>
refNodo = We4emsQiS.Ca3>
d(8.RoZsQiS.Ce44sQ:S.8a4Ae = Con@ert.ToCDarL20 E iM.To'tringLMEX < XEi.To'tringLM>
ZDi4e LrefNodo ]= nA44M
O
d(8.RoZsQiS.Ce44sQco4EES.8a4Ae = refNodo.Info.C4aseEX < X E refNodo.Info.Nom3re E
X < XErefNodo.Info.$osicion.To'tringLM>
refNodo = refNodo.'ig>
P
P
P
Ee4inimos un nue(o m,todo 7ayor() para calcular el m60imo n;mero de elementos en todas las listas enla*adas. Ee esta
4orma, podemos dimensionar al componente data5rid6ie4% para el mane8o de las columnas del componente.
As 3ue debemos agregarlo a la clase TablaSimbolos.
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. 25 de 2!
pA34ic int !ayorLM
O
int mayor = :>
for Lint i = :> i [ We4ems.#engtD> iEEM
if LWe4emsQiS.NoNodos H mayorM
mayor = We4emsQiS.NoNodos>
retArn mayor>
P
$e nos ol(idaba 3ue debemos agregar la propiedad #osicion a la clase TipoElem, 3ue es usada en el m,todo 6isua() de la
clase TablaSimbolos.
pA34ic int $osicion
O
get O retArn Wposicion> P
set O Wposicion = @a4Ae> P
P
$i compilamos la aplicacin obser(aremos 3ue tenemos un error re4erente al acceso del data5rid6ie4% de la 4orma
Form0&cs. 7ste error es corregido 46cilmente de4iniendo una propiedad en la 4orma Form0&cs, seg;n lo indicamos en la
4igura 1.9.
Fig. No. 5.2 De4inici*n de la propiedad Datarid!ie"# en Form2.cs.
7l m,todo 7ayor() es usado para calcular el n;mero m60imo de columnas en el data5rid6ie4%, su4icientes para (isuali*ar
a cada lista enla*ada de la tabla de smbolos. La columna 0 del componente data5rid6ie4%, es reser(ada para (isuali*ar la
letra e ndice correspondiente a la lista enla*ada cu)os elementos se muestran en el rengln iA,simo. La 4igura 1.9 muestra
la e8ecucin para el grupo de sentencias, donde adem6s se (isuali*a la tabla de smbolos.
inicio
(ar
entero a, a2, b, b2,bD.
real pi, pato, nino,0,),*,*29.
4in
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!
Fig. No. 5.3 8abla de smbolos con elementos 2 atributos.

S-ar putea să vă placă și