Вы находитесь на странице: 1из 8

Título de la materia

Lenguaje Autómatas
Semestre
6 Semestre
Equipo #2
Numero de
15820144
15820167
15820151
Profesor:
Dra. Paula Hernández Hernández
Fecha de entrega:
5/05/2018

INSTITUTO TECNOLOGICO DE ALTAMIRA 1


4.1 Funciones de un analizador léxico

El analizador léxico es la primera fase de un compilador. Su principal


función consiste en leer los caracteres de entrada y elaborar como
salida una secuencia de componentes léxicos que utiliza el analizador
sintáctico para hacer el análisis. Con frecuencia el analizador léxico
interactúa también con la tabla de símbolos. Cuando el analizador léxico
descubre un lexema que constituye a un identificador, debe introducir
ese lexema en la tabla de símbolos. En algunos casos, el analizador
léxico puede leer la información relacionada con el tipo de información
de la tabla de símbolos, como ayuda para determinar el token apropiado
que debe pasar al analizador sintáctico.
Por lo regular, la interacción se implementa haciendo que el analizador
sintáctico llame al analizador léxico. La llamada, sugerida por el
comando obtenerSiguienteToken, hace que el analizador léxico lea los
caracteres de su entrada hasta que pueda identificar el siguiente lexema
y producirlo para el siguiente token, el cual devuelve al analizador
sintáctico.

INSTITUTO TECNOLOGICO DE ALTAMIRA 2


Otras funciones secundarias:
• Manejo del fichero de entrada del programa fuente: abrirlo,
• leer sus caracteres, cerrarlo y gestionar posibles errores de
• lectura.
• Eliminar comentarios, espacios en blanco, tabuladores y saltos
• de línea (caracteres no válidos para formar un token).
• Contabilizar el número de líneas y columnas para emitir mensajes
de error.

4.2 Componentes Léxicos, patrones y lexemas


Un token es un par que consiste en un nombre de token y un valor de
atributo opcional. El nombre del token es un símbolo abstracto que
representa un tipo de unidad léxica; por ejemplo, una palabra clave
específica o una secuencia de caracteres de entrada que denotan un
identificador. Los nombres de los tokens son los símbolos de entrada
que procesa el analizador sintáctico.
Un patrón es una descripción de la forma que pueden tomar los
lexemas de un token. En el caso de una palabra clave como token, el
patrón es sólo la secuencia de caracteres que forman la palabra clave.
Para los identificadores y algunos otros tokens, el patrón es una
estructura más compleja que se relaciona mediante muchas cadenas.
Un lexema es una secuencia de caracteres en el programa fuente, que
coinciden con el patrón para un token y que el analizador léxico
identifica como una instancia de ese token.
proporciona algunos tokens comunes, sus patrones descritos de
manera informal y algunos lexemas de ejemplo. La siguiente instrucción
en C nos servirá para ver cómo se utilizan estos conceptos en la
práctica.

INSTITUTO TECNOLOGICO DE ALTAMIRA 3


1. El patrón para una palabra clave es el mismo que para la palabra
clave en sí.
2. Los tokens para los operadores, ya sea en forma individual o en
clases como el token comparación.
3. Un token que representa a todos los identificadores.
4. Uno o más tokens que representan a las constantes, como los
números y las cadenas de literales.
5. Tokens para cada signo de puntuación, como los paréntesis izquierdo
y derecho, la coma y el signo de punto y coma.
4.3 Creación de Tabla de tokens.
La tabla de símbolos es una componente necesaria de un compilador.
Al declarar un identificador (normalmente una sola vez), éste es
insertado en la tabla. Cada vez que se utilice el identificador se realizará
una búsqueda en la tabla para obtener la información asociada (el
valor).
• Búsqueda: dada la clave de un elemento, encontrar su valor.
• Inserción: Dado un par clave-valor, añadir un elemento nuevo a la
tabla.
• Cambio de valor: Buscar el elemento y cambiar su valor.
• Borrado: Eliminar un elemento de la tabla.
• Longitud de búsqueda (o tiempo de acceso)

INSTITUTO TECNOLOGICO DE ALTAMIRA 4


la tabla de símbolos es creada durante el paso de análisis léxico.
Por medio de un índice se entra a la tabla de símbolos para ubicar
la variable.

Un token o componente léxico es una cadena de caracteres que


tiene un significado coherente en cierto lenguaje de programación.
Ejemplos de tokens, podrían ser palabras clave (if, while, int),
identificadores, números, signos, o un operador de varios
caracteres
4.4 Errores Léxicos
Los errores léxicos se detectan cuando el analizador léxico intenta
reconocer componentes léxicos y la cadena de caracteres de la
entrada no encaja con ningún patrón. Son situaciones en las que
usa un carácter invalido (@,$,”,¿,...), que no pertenece al
vocabulario del lenguaje de programación, al escribir mal un
identificador, palabra reservada u operador.
Errores léxicos típicos son:
1.nombre ilegal de identificadores
2.numeros incorrectos: un numero contiene caracteres inválidos o
́
no está formado correctamente, por ejemplo 3,14 en vez de 3.14 o
0.3.14.
3.Errores de ortografía en palabras reservadas: caracteres
omitidos, adicionales o cambiados de sitio, por ejemplo, la palabra
wihle vez de while.
4.fin de archivo: se detecta un fin de archivo a la mitad de un
componente lexico
INSTITUTO TECNOLOGICO DE ALTAMIRA 5
4.5 Generadores de analizadores léxicos
• es un módulo destinado a leer caracteres del archivo de entrada,
donde se encuentra la cadena a analizar, reconocer subcadenas
que correspondan a símbolos del lenguaje y retornar los tokens
correspondientes y sus atributos.
• Generadores de analizadores léxicos:
• FLEX
• LEX
• JTLex

Generador Flex
• primer lugar veremos algunos ejemplos simples para una toma
de contacto con el uso de flex. La siguiente entrada de flex
especifica un escáner que siempre que encuentre la cadena
"username" la reemplazará por el nombre de entrada al sistema
del usuario: lee los archivos de entrada dados, o la entrada
estándar si no se le ha indicado ningún nombre de archivo, con la
descripción de un escáner a generar.

%%
username printf( "%s", getlogin() );

GENERADOR LEX
Se utiliza comúnmente con el programa yacc que se utiliza para
generar análisis sintáctico, es el analizador léxico estándar en los
sistemas Unix, y se incluye en el estándar de POSIX. Lex toma
como entrada una especificación de analizador léxico y devuelve
como salida el codigo fuente implementando el analizador léxico
en C.

INSTITUTO TECNOLOGICO DE ALTAMIRA 6


GENERADOR DE ANALIZADORES LÉXICOS JTLex
JTLex en cambio permite expresar conjuntamente sintaxis y
semántica al estilo de los esquemas de traducción. A su vez el
proceso de computo de atributos es implementado por JTLex por
un autómata finito traductor con las ventajas de eficiencia que esto
supone.
4.6 aplicaciones (caso de estudio)
El análisis léxico es una técnica que se encuentra basada en un
conjunto de reglas que relacionan un conjunto de partes para
formar un CPU.
Algunas aplicaciones de los analizadores léxicos son:
• El analizador léxico divide la entrada en componentes léxicos.
• Los componentes se agrupan en categorías léxicas.
• Asociamos atributos a las categorías léxicas.
• Especificamos las categorías mediante expresiones regulares.
• Para reconocer los lenguajes asociados a las expresiones
regulares empleamos autómatas de estados finitos(AFD).
• se pueden crear los AFD directamente a partir de la expresión
regular.
• El analizador léxico utiliza la maquina discriminadora determinista.

Bibliografía
aho, a. V. (2008). La función del analizador léxico. En a. V. aho, Compiladores principios, técnicas y
herramienta (págs. 134-137). mexico: PEARSON EDUCACIÓN.

Aho, A.V., Sethi, R., Ullman, J.D. (1990), Compiladores: principios, técnicas y herramientas, capitulo
1, páginas: 1- 25, 743-747.

Aho, A.V., Sethi, R., Ullman, J.D. (1990), Compiladores: principios, técnicas y herramientas, capitulo
3, páginas: 135-138.

http://informatica.uv.es/docencia/iiguia/asignatu/2000/PL/2008/tema2.pdf

INSTITUTO TECNOLOGICO DE ALTAMIRA 7


INSTITUTO TECNOLOGICO DE ALTAMIRA 8