Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ANALISIS LEXICO
DEFINICIONES:
Tokens:
Atributos:
Informacin adicional que tiene el token, de utilidad para el anlisis sintctico y semntico.
Lexema:
Una secuencia de caracteres de entrada que comprenden un solo componente lxico se llama lexema; cadena de
caracteres que extrae el componente abstracto del componente lxico.
Patrn:
Descripcin de la forma que han de tomarlos lexemas para ajustarse a un componente lxico.
EJEMPLO:
OTRAS FUNCIONES:
Manejo del fichero de entrada del programa fuente: abrirlo, leer sus
caracteres, cerrarlo y gestionar posibles errores de lectura.
Diseo ms sencillo:
Los smbolos que trata el scanner se describe con una gramtica ms simple
que la del parser, gramtica regular
Mejora la eficiencia:
Mejora la portabilidad:
Se pueden tener varias versiones del scanner una para distintos cdigos
(EBCDID, ASCII, ...), con el mismo parser
oDO 5 I=1.25
oDO 5 I=1,25
COMPONENTE LEXICO: Son las unidades lgicas que genera el analizador lxico. Formar
caracteres en tokenses muy parecido a formar palabras en un lenguaje natural
Es el conjunto de cadenas de entrada que produce como salida el mismo componente lxico.
Cadatokenes una secuencia de caracteres que representa una unidad de informacin en el
programa fuente. Los componentes lxicos ms comunes son los siguientes: palabras clave o
reservadas:
operadores aritmticos
operadores
relacionales
operadores lgicos
operador de asignacin
identificadores
constantes
cadenas
literales
signos de puntuacin
libreras
Lexema:
Representan cadenas de caracteres en el programa fuente que se pueden tratar juntos como una unidad
lxica. Un lexema es una secuencia de caracteres en el programa fuente con la que concuerda el patrn para
un componente lxico.
Patrn:
Regla que describe el conjunto de lexemas que pueden representar a un determinado componente lxico en
los programas fuente. En otras palabras, es la descripcin del componente lxico mediante una regla.
Apuntador a la entrada de la Tabla de smbolos donde se guarda la informacin sobre el componente lxico.
Lm = (S Li)/N
Lm = S pi.Li
Grado de ocupacin:
Valor asociado a una clave k: v(B(k)). Puede ser mltiple, en cuyo caso normalmente se
convierte en un puntero. Si est en la tabla puede almacenarse consecutivamente o en
subtablas paralelas. Tablas de smbolos (identificadores) La clave es el identificador. El valor
est formado por:
Atributos del identificador. Puntero a la posicin de memoria asignada. La clave puede
sustituirse por un puntero. Los identificadores pueden estar empaquetados. La longitud del
identificador puede especificarse en la tabla o delante del nombre, o ser implcita.
Tablas consecutivas: Todos los elementos ocupan posiciones de memoria adyacentes. Tablas
ligadas: cada elemento apunta al siguiente. Tablas doblemente ligadas: cada elemento apunta
al siguiente y al anterior. Tablas no ordenadas Insercin: en el primer lugar vaco.
Suponga que.
una situacin en la cual el analizador lxico no puede continuar porque ninguno
de los patrones concuerda con un prefijo de la entrada. Tal vez la estrategia de
recuperacin ms sencilla sea recuperacin EN MODO PANICO (este mtodo
de recuperacin es donde se borra caracteres sucesivos de la entrada hasta
que el analizador lxico pueda encontrar un componente lxico bien formado).
Los programas no siempre son correctos!!
FLEX
LEX
Es un programa para generar analizadores lxicos (en ingls
scanners o lexers).
Lex se utiliza comnmente con el programa yacc que se utiliza
para generar anlisis sintctico. Lex, escrito originalmente por
Eric Schmidt y Mike Lesk, es el analizador lxico estndar en los
sistemas Unix, y se incluye en el estndar de POSIX. Lex toma
como entrada una especificacin de analizador lxico y
devuelve como salida el cdigo fuente implementando el
analizador lxico en C.
Aunque tradicionalmente se trata de software propietario,
existen versiones libres de lex basadas en el cdigo original de
AT&T en sistemas como OpenSolaris y Plan 9 de los laboratorios
Bell. Otra versin popular de software libre de lex es Flex.
Seccin de declaraciones
%%
Seccin de reglas
%%
Seccin de cdigo en C
La seccin de declaraciones es
el lugar para definir macros y para
importar los archivos de cabecera
escritos en C. Tambin es posible
escribir cualquier cdigo de C aqu,
que ser copiado en el archivo
fuente generado. Este cdigo en C
debe ir entre los smbolos%{%}.
EJEMPLO:
Un ejemplo sencillo de uso de analizadores lxicos ser el trabajo con
ficheros organizados en forma de columnas separadas por tabuladores.
Supongamos que tenemos un fichero de texto en el que aparecen
secuencias de dgitos separadas por tabuladores que definen columnas.
Queremos sumar la columna n de la tabla.
int yylex();
int suma (int ncol) /* Suma los datos de la
columna ncol. */
{
int token, col, res;
res= 0; /* resultado */
nlinea= 0;
while ( (token= yylex())!= 0)
{
col= 1; /* columna actual */
while (1)
{
if ( token!= NUMERO )
error("La l__nea debe comenzar por un
n_umero");
if ( col== ncol )
res+= yyval;
token= yylex();
if ( token!= SEPARACION && token!= LINEA )
error ("Detr_as de un n_umero debe haber un
tabulador o un fin de l__nea.");
if ( token== LINEA )
break;
token= yylex();
col++;
}
if ( col< ncol )
error ("No hay suficientes campos en la
l__nea.");
}return res;}