Analizador lexico

Páginas: 6 (1467 palabras) Publicado: 13 de febrero de 2014

ANALIZADOR LEXICO


Un analizador léxico o analizador lexicográfico (en inglés scanner) es la primera fase de un compilador consistente en un programa que recibe como entrada el código fuente de otro programa (secuencia de caracteres) y produce una salida compuesta de tokens (componentes léxicos) o símbolos. Estos tokens sirven para una posterior etapa del proceso de traducción, siendo laentrada para el analizador sintáctico (en inglés parser).

Entre estos analizadores tenemos:

LEX

Lex es un programa para generar analizadores léxicos (en inglés scanners o lexers). Lex se utiliza comúnmente con el programa yacc que se utiliza para generar análisis sintáctico. Lex, escrito originalmente por Eric Schmidt y Mike Lesk, es el analizador léxico estándar en los sistemas Unix, yse incluye en el estándar de POSIX. Lex toma como entrada una especificación de analizador léxico y devuelve como salida el código fuente implementando el analizador léxico en C.

La sección de declaraciones es el lugar para definir macros y para importar los archivos de cabecera escritos en C. También es posible escribir cualquier código de C aquí, que será copiado en el archivo fuente generado.Este código en C debe ir entre los símbolos %{ %}.
También se pueden incluir "atajos" para definir patrones de la Sección de Reglas, por ejemplo en vez del patrón [0-9]* (cero o más dígitos que reconocerían cualquier número natural), se puede definir en esta sección el "atajo":  números [0-9]*, así, en la sección de código pondríamos el patrón {números} {acción_en_C;}. Con esto se clarifica laescritura del código en lex.
La sección de reglas es la sección más importante; asocia patrones a sentencias de C. Los patrones son simplemente expresiones regulares. Cuando el lexer encuentra un texto en la entrada que es asociable a un patrón dado, ejecuta el código asociado de C. Ésta es la base de del funcionamiento de lex.
La sección de código C contiene sentencias en C y funciones que seráncopiadas en el archivo fuente generado. Estas sentencias contienen generalmente el código llamado por las reglas en la sección de las reglas. En programas grandes es más conveniente poner este código en un archivo separado y enlazarlo en tiempo de compilación
Lo siguiente es un ejemplo de archivo lex para la versión Flex de lex. Reconoce cadenas de números (números enteros) en la entrada, ysimplemente los imprime en la salida.





/*** Sección de declaraciones ***/

%{
/* Código en C que será copiado */
#include
%}

/* Esto indica a Flex que lea sólo un fichero de entrada */
%option noyywrap

%%
/*** Sección de reglas ***/

/* [0-9]+ identifica una cadena de uno o más dígitos */
[0-9]+ {
/* yytext es una cadena que contiene el texto coincidente. */printf("Encontrado un entero: %s\n", yytext);
}

. { /* Ignora todos los demás caracteres. */ }

%%
/*** Sección de código en C ***/

int main(void)
{
/* Ejecuta el ''lexer'', y después termina. */
yylex();
return 0;
}


Si se da esta entrada a flex, será convertida en un archivo de C, lex.yy.c. Esto se puede compilar en un ejecutable que encuentre y haga salir cadenas de númerosenteros. Por ejemplo, dando la entrada:
abc123z.!&*2ghj6
el programa imprimirá:
Encontrado un entero: 123
Encontrado un entero: 2
Encontrado un entero: 6

Uso de Lex con Yacc

Lex y Yacc (un generador de analizadores sintácticos) suelen ser utilizados juntos. Yacc utiliza una gramática formal para analizar un flujo de entradas, algo que Lex no puede hacer con expresiones regulares simples(Lex se limita a los autómatas de estados finitos simples). Sin embargo, Yacc no puede leer en un flujo de entradas simple - requiere una serie de símbolos. Lex se utiliza a menudo para proporcionar a Yacc estos símbolos







FLEX
Flex es una herramienta que traduce la especificación de un analizador léxico a un programa escrito en C que lo implementa.
Para especificarlo usaremos...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Analizador Lexico
  • Analizador Lexico
  • Analizador Lexico
  • Analizadores lexicos
  • Analizador Lexico
  • analizador lexico
  • Analizador Lexico
  • Analizador lexico

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS