Abe Estrada

lex "lexical analyzer"

Estaba platicando con un profesor en la escuela y me comentaba que a lo mejor l iba a dar la clase el siguiente modulo de “interpretes y compiladores” y que ibamos a tener que realizar un interprete escrito en C y/o C++.

Después de la plática me vino a la mente que yo ya habia leído sobre “Bison”, una aplicación que analiza cdigo y la interpreta. La verdad es que no estoy familiarizado con programación en C/C++.

Pero a raíz de esto, me puse a investigar y me encontré con “lex” que es un analizador de léxico para C, el cual supongo voy a necesitar a la hora de trabajar con interpretes y/o compiladores. Este software fu creado por Mike Lesk y Eric Schmidt, este último, CEO de Google por los ultimos años.

Lo que hace lex, es que analiza la cadena de caracteres que se le envia y empieza a categorizar los “lexemas” por “tokens”.

Ejemplo: sum=3+2;

Un ejemplo de un programa en C creado por lex:

%{
	#include <stdio.h>
%}
%%
start {
	printf("START command\n");
}
stop {
	printf("STOP command\n");
}
%%

Luego lo analizamos con lex:

$ lex example1.l

Y nos genera un archivo en C listo para compilar:

$ cc lex.yy.c -o example1 -ll

Se puede utilizar expresiones regulares para identificar los lexemas.

%{
	#include <stdio.h>
%}
%%
[0-9]+ {
	printf("NUMBER\n");
}
[a-zA-Z0-9]+ {
	printf("WORD\n");
}
%%

Y ahora el ejemplo anterior de sum=3+2;

%{
	#include <stdio.h>
%}
%%
sum {
	printf("IDENTIFIER ");
}
\= {
	printf("ASSIGMENT OPERATOR ");
}
\+ {
	printf("ADITION OPERATOR ");
}
[0-9]+ {
	printf("NUMBER ");
}
; {
	printf("END OF STATEMENT ");
}
\n {
	printf("\n");
}
[ \t]+ /* ignore whitespace */;
%%

Creo que próximamente voy a profundizar más en temas de interpretes y compiladores cuando lleve esa clase, por lo pronto solo les dejo lo que investigue en una hora libre que tuve.