You are on page 1of 13

Compiladores Analizador Lxico Gaytn Jos Trinidad

Universidad Nacional Autnoma de Mxico 1


acultad de Ingenier!a

Argueta Cortes Jairo I. Mendoza

Compiladores
Grupo 1

Analizador Lxico en LEX

ALUMNOS:
ARGUETA CORTES JAIRO I. MENDO A GA!TAN JOSE TRINIDAD

"RO#ESORA:
ING. LAURA SANDO$AL M.

L%ne& '( de Oc)%*re de (++,

Compiladores Analizador Lxico Gaytn Jos Trinidad

"

Argueta Cortes Jairo I. Mendoza

INDICE
Anlisis######################.. $ %studio preliminar################..$ &laneaci'n###################.....( &ropuesta de ser)icios#.#########.###.* +ise,o#######################.* %xpresiones regulares #############.. +esarrollo##################### . +e/inici'n de to0ens###..########### . Tcnicas de 12s3ueda e inserci'n######. 14 Implementaci'n########.######## 11 %5ecuci'n de programa 67Lex.c#.###### 1-

Analizador lxico en LEX


An-li&i&.

Compiladores Analizador Lxico Gaytn Jos Trinidad

Argueta Cortes Jairo I. Mendoza

E&)%dio .reli/inar. 815eti)o9 %la1orar un analizador lxico en Lex o lex 3ue reconozca los componentes lxicos pertenecientes a las clases de1a5o descritas. Lista de re3uerimientos9 Las clases de los componentes lxicos )alidos para el analizador lxico son9 o o o o o o o o o Clase 4 1 " $ ( * +escripci'n &ala1ras reser)adas Constantes enteras :sin signo; Cadenas encerradas entre apostro/es 8peradores relacionales 8peradores aritmticos Identi/icadores :6'lo letras; 6!m1olos especiales

%l n2mero de las clases es inamo)i1le.

%l analizador lxico tendr como entrada un arc<i)o con el programa /uente. 7ue se de1er dar en la l!nea de comandos al e5ecutar el analizador lxico. Como delimitador de un componente lxico ser uno )arios espacios= ta1uladores o saltos de l!nea= as! como el inicio de otro componente lxico. Cuando detecte un error lxico= de1er seguir el reconocimiento a partir del siguiente s!m1olo )alido. %l analizador de1er crear la ta1la de s!m1olos con" campos9 nom1re y tipo. > otra ta1la de cadenas con un solo campo. Los to0en?s contendrn " campos. o Campo19 la clase :entero de un 1yte;. o Campo"9 el )alor :de acuerdo a las sig. Ta1las;. o %l )alor para el to0en de cada identi/icador es la posici'n dentro de la ta1la de s!m1olos= para las cadenas su posici'n en la ta1la correspondiente y de las constantes enteras su )alor numrico. %l analizador lxico generar una cadena de tomos :de acuerdo a las ta1las presentadas ms a1a5o;.

Compiladores Analizador Lxico Gaytn Jos Trinidad

Argueta Cortes Jairo I. Mendoza

O.eradore& arie)ico& O.erad $alor 1)o/o or C C C D D D E E E

O.eradore& relacionale& O.erad or F GH G H HF GF $alor 4 1 " $ ( * 1)o/o F I G H g l

S0/*olo& e&.eciale& S0/*ol $alor 1)o/o o

= @ A : ;

= @ A : ;

= @ A : ;
$alor %3ui)alente en decimal 1)o/o B

Constantes enteras sin signo

Compiladores Analizador Lxico Gaytn Jos Trinidad

Argueta Cortes Jairo I. Mendoza

Cadena de caracteres Identi/icador

&osici'n en la ta1la &osici'n en la ta1la

3 y

Como resultados= el analizador lxico de1er mostrar el contenido de la ta1la de s!m1olos= los to0ens y la cadena de tomos Los errores 3ue )aya encontrando el analizador lxico= los podr ir mostrando en pantalla o escri1irlos en un arc<i)o. "laneaci2n. 6e cuenta con un total de * d!as para la entrega del proyecto por lo 3ue la organizaci'n 3uedara de la siguiente manera9 %l programa del analizador lxico se di)idir en tres m'dulos9 M8+ I9 6e de/inirn las expresiones regulares para tra1a5ar en L%J= as! como sus componentes lxicos y se implementara su c'digo correspondiente. M8+ II9 6e implementaran las /unciones re3ueridas para generar los to0ens= y cadena de tomos M8+ III@ 6e implementaran las /unciones re3ueridas para la creaci'n de la ta1la de s!m1olos y de caracteres.

+istri1uci'n de tiempos9 Tiempo de anlisis y dise,o. Tomando en cuenta los re3uerimientos y alcance del proyecto se realizara en un total de " d!as. Tiempo de desarrollo. 6er el tiempo restante antes de la entrega del proyecto en este caso ser un total de $ d!as naturales. Asignaci'n de la1ores9 Tomando en cuenta el tiempo con el 3ue se cuenta= as! como los recursos y alcance del proyecto se organizara de la siguiente manera9 +esarrollador1.D Argueta Cortes Jairo I. :+1; +esarrollador".D Mendoza Gaytn Jos T. :+"; "ro.%e&)a de &er3icio&. La /orma en la 3ue se dar soluci'n a los re3uerimientos presentados ser la siguiente9 6e cuenta con un total de * d!as para la entrega del proyecto por lo 3ue las acti)idades relacionadas con el desarrollo del proyecto se tendrn 3ue adecuar a este Ko. +e d!as. O*4e)i3o.D 7ue la Ing. Laura 6ando)al Monta,o o1tenga el programa de Analizador lxico en tiempo y /orma esta1lecidos por la misma= cumpliendo con todos y cada uno de los re3uerimientos antes esta1lecidos.

Compiladores Analizador Lxico Gaytn Jos Trinidad

Argueta Cortes Jairo I. Mendoza

En)re5a*le& del .ro6ec)o.D se realizara la entrega de9 %l anlisis= dise,o y desarrollo as! como la /orma en la 3ue el programa se puede implementar. 6e entregara adems el c'digo /uente del programa as! como un arc<i)o e5ecuta1le del mismo= esto se realizara de manera electr'nica mediante el correo electr'nico y de /orma escrita mediante un documento. Di&e7o. &ara poder cumplir con los re3uerimientos especi/icados en el presente programa se tendr 3ue partir desde la creaci'n de expresiones regulares <asta su implementaci'n en L%J.

Ex.re&ione& re5%lare& Iden)i8icadore&. GletH F ALML#LNLaL1#Lz 9iden):; 9le):< S0/*olo& 9&0/*olo: ; => ? > @> A > B O.erador ari)/)ico 9o.Ari): ; <> C > D O.erador Relacional 9o.Rel: ; 9:>9>:>9;>:; Cadena& GcaracterHF ALML#LNLaL1#LzLILOLBLPLQLRLEL:L;LFLSLTLELALDLCLULHLGLVLULWLX GcomillaHF? 9cadena: ;9co/illa:9carac)er:@9co/illa: Con&)an)e& en)era&

Compiladores Analizador Lxico Gaytn Jos Trinidad

Argueta Cortes Jairo I. Mendoza

GdigHF 4L1L"L$L(L*L-L.LYLZ 9en)ero:;9di5:< "ala*ra& re&er3ada& 9.alre&: ;CONCAT>CREATE>DE#AULT>DRO">#ROM>INSERT>INTO>EE!> NOT>NULL>"RIMAR!>SELECT>TAFLE>$ALUES>GHERE>CHAR>INTEGER

De&arrollo.
De8inici2n de la )a*la de &0/*olo& 6 de carac)ere& &ara tra1a5ar con la ta1la de s!m1olos :identi/icadores; la de/inimos de la siguiente manera9 Cla&e TAFLA DE SIMFOLOS No/*re $alor TAFLA DE CADENAS No/*re $alor &ara lo cual tra1a5amos con una estructura en C. de/inida de la siguiente manera typedef struct sim { int ClaseS; //Clase del Smbolo int valorS; //Valor del smbolo char simbolo[20]; //Smbolo struct sim si!uiente; //"untero al si!uiente smbolo # tablaSimbolos; %sta estructura nos permitir tra1a5ar con listas ligadas= es por eso 3ue tra1a5amos con struct sim si!uiente 3ue es un apuntador al siguiente elemento. %ste tipo de utilizaci'n de estructuras de datos nos permitir optimizar memoria= ya 3ue podr!amos <a1er utilizado una matriz multidimensional de un

Compiladores Analizador Lxico Gaytn Jos Trinidad

Argueta Cortes Jairo I. Mendoza

tama,o /i5o= lo 3ue ser!a di/!cil de modi/icar en su tama,o aun3ue simpli/icar!a mas el c'digo. De8inici2n de ToIenJ& Cada T8[%K tiene dos campos de/inidos de la siguiente manera :Clase= \alor; Cla&e + "ala*ra& re&er3ada&
//$structura para definir "alabras reservadas {palabra%valor%atomo# 2& struct palabraS{ 2' char palabra[(0]; //"alabra 2) int valor; //Valor *0 char atomo; //atomo *( # palabra+es[(&] , {{-C./C01-%0%2u2#%{-C+$01$-%(%2c2#%{-3$40561-%2%2d2#%{-3+."-%*%2b2#% *2 {-4+.7-%8%2f2#%{-9/S$+1-%:%2i2#%{-9/1.-%;%2a2#%{-<$=-%&%2>2#% ** {-/.1-%'%2n2#%{-/566-%)%2e2#%{-"+970+=-%(0%2p2#%{-S$6$C1-%((%2s2#% *8 {-10?6$-%(2%2t2#%{-V065$S-%(*%2v2#%{-@A$+$-%(8%2B2#%{-CA0+-%(:%2h2#% *: {-9/1$C$+-%(;%2D2# *; #;

Cla&e ' Con&)an)e& en)era& A&in &i5noB Cla&e ( Cadena& encerrada& en)re a.o&)ro8e& Cla&e K O.eradore& relacionale&
8: //$structura para definir .peradores relacionales {operador%valor%atomo# 8; struct op+elacional { 8& char operador[2]; //.perador 8' int valor; //Valor 8) char atomo; //atomo :0 # operador+el[;] , {{-,-%0%2,2#%{-EF-%(%2G2#%{-E-%2%2E2#%{-F-%*%2F2#%{-F,-%8%2!2#% {-E,-%:%2l2##;

Cla&e L O.eradore& ari)/)ico&


*' //$structura para definir .peradores arimeticos {operador%valor%atomo# *) struct op0ritmetico { 80 char operador; //.perador 8( char valor; //Valor 82 char atomo; //atomo 8* # operador0rit[*] , {{2H2%2H2%2H2#%{2I2%2I2%2I2#%{2/2%2/2%2/2##;

Cla&e M Iden)i8icadore& AS2lo le)ra&B Cla&e N S0/*olo& e&.eciale&


:2 //$structura para definir Simbolos especiales {simbolo%valor%atomo# :* struct simbolos {

Compiladores Analizador Lxico Gaytn Jos Trinidad :8 :: :; char simbolo; //.perador char valor; //Valor char atomo; //atomo

Argueta Cortes Jairo I. Mendoza

57 } simboloEsp[5] = {{',' , ',' , ','},{';', ';' ,';'},{'*', '*' ,'*'},{'(', '(' ,'('},{')', ')' ,')'}};

Tcnica& de *O&P%eda e in&erci2n La tcnica de 12s3ueda es lineal para nuestras listas ligadas 3ue )iene siendo la ta1la de s!m1olos por lo tanto cuando el aut'mata reconoce un Identi/icador= primero lo 1usca en la ta1la de s!m1olos y si este se encuentra toma el )alor correspondiente en la ta1la se s!m1olos y genera en To0en. %n caso de 3ue el s!m1olo no se encuentre en la ta1la= lo inserta y le asigna un )alor para poder generar el To0en correspondiente.

%l algoritmo est de/inido en C de la siguiente manera9


void buscaSimboloJint Clase?% char Cadena?K {

//auL apunta al inicio de la tabla de simbolos auL , inicio1abla; //?andera Mue indica si encontro el simbolo int encontro , 0; //9nicialiDacion de la tabla por primera veD ifJContadorS,,0K { insertaSimboloJClase?% Cadena?K; auL , inicio1abla; printfJ-J Nd % Nd KQn-% auLIFClaseS% auLIFvalorSK; encontro,(; # //6oop Mue busca un simbolo en la tabla Bhile Jencontro,,0K { //Si encuentra el simbolo en la tabla //imprime clase y valor correspondiente ifJstrcmpJauLIFsimbolo%Cadena?K,,0K { printfJ-J Nd % Nd KQn-% auLIFClaseS% auLIFvalorSK; encontro,(; # //0punta al si!uiente elemento de la tabla else auL , auLIFsi!uiente; //Si no encuetra el simbolo lo inserta en la tabla ifJauL,,/566K {

Compiladores Analizador Lxico Gaytn Jos Trinidad

14

Argueta Cortes Jairo I. Mendoza

insertaSimboloJClase?% Cadena?K; auL , inicio1abla; printfJ-J Nd % Nd KQn-% auLIFClaseS% auLIFvalorSK; encontro,(; # #

La implementaci'n de la ta1la de caracteres es idntica 3ue una ta1la de s!m1olos. 6olamente asignamos nue)os nom1res a las )aria1les a utilizar.

E4ec%ci2n de "ro5ra/a SRLlex.c %n una terminal de Linux teclear lo siguiente9 1oxerX1oxerDdes0top9_E%scritorioP/lex 67Lex.l 1oxerX1oxerDdes0top9_E%scritorioP gcc lex.yy.c Dl/l 1oxerX1oxerDdes0top9_E%scritorioP.Ea.out ]nombreArchivo^.txt

%n ]nombreArchivo^ se sustituye por el nom1re del arc<i)o /uente= para nuestro caso de e5emplo utilizamos SQL.txt %l arc<i)o 67L.txt contiene el siguiente texto9
C+$01$ 10?6$ J nombre CA0+J(0K"+970+= <$= 3$40561 2Oairo2 K; S$6$C1 4+.7 1+0?0P03.+ @A$+$ nombre,2Oairo2 ;

9/S$+1 9/1. trabaOador Jnombre%tel%dirK V065$SJ2Oose2%:;*0*8*:%2la cruD2K; , F E EF F, E, H I / QQQQ-------{#{#{#{#{# % ;

Compiladores Analizador Lxico Gaytn Jos Trinidad

11

Argueta Cortes Jairo I. Mendoza

Al teclear en consola9 1oxerX1oxerDdes0top9_E%scritorioP .Ea.out 67L.txt

Las respecti)as salidas se presentan en tres arc<i)os de escritura9 Error.)x): Contiene los errores detectados por el analizador lxico ToIen&.)x): Contiene la lista de to0ens= la ta1la de s!m1olos :identi/icadores; y la ta1la de cadenas Cadena.)x)? Contiene la cadena de tomos. Analizando los resultados primero o1ser)amos una lista de T8[%K6 generados por el analizador L%Jico= la ta1la de s!m1olos= as! como la ta1la de cadenas9 ToIen&.)x)
I I I I I 1.<$/SR I I I I I I 0 % ( 0 % (2 ; % J : % 0 0 % (: ; % J ( % (0 ; % K 0 % (0 0 % & 0 % 2 2 % 0 ; % K ; % ; 0 % (( ; % 0 % 8 : % ( 0 % (8 : % 0 * % 0 2 % 0 ; % ; 0 % : 0 % ; : % 2 ; % J : % 0 ; % % : % * ; % % : % 8 ; % K 0 % (* ; % J 2 % (

Compiladores Analizador Lxico Gaytn Jos Trinidad

1"

Argueta Cortes Jairo I. Mendoza

; % % ( % :;*0*8*: ; % % 2 % 2 ; % K ; % ; * % 0 * % * * % 2 * % ( * % 8 * % : 8 % H 8 % I 8 % / ; % % ; % ; ; %

10?60 3$ S97?.6.S IIIIIIIIIIIIIIIIIIIIIIIIII S Clase S /ombre S Valor S IIIIIIIIIIIIIIIIIIIIIIIIII S : dir 8S S : tel *S S : trabaOador 2S S : 1+0?0P03.+ (S S : nombre 0S IIIIIIIIIIIIIIIIIIIIIIIIII 10?60 3$ C03$/0S IIIIIIIIIIIIIIIIIIIIIIIIII S /ombre S Valor S IIIIIIIIIIIIIIIIIIIIIIIIII S 2la cruD2 2S S 2Oose2 (S S 2Oairo2 0S IIIIIIIIIIIIIIIIIIIIIIIIII

Cadena.)x)
I I I I I 6a cadena de 0tomos es la si!uienteT I I I I I I ctJyhJmKp>dLK;s fyBy,L;iayJy%y%yKvJL%m%LK;,FEG!lHI/%;

Error.)x)
I I I I I $rrores encontrados en el archivo SU6 dadoR I I I I I I Q Q Q Q es es es es es es es es es es un un un un un un un un un un $rror $rror $rror $rror $rror $rror $rror $rror $rror $rror

Compiladores Analizador Lxico Gaytn Jos Trinidad

1$

Argueta Cortes Jairo I. Mendoza

{ # { # { # { # { #

es es es es es es es es es es es

un un un un un un un un un un un

$rror $rror $rror $rror $rror $rror $rror $rror $rror $rror $rror

You might also like