Sunteți pe pagina 1din 35

Instituto Tecnolgico Superior

De Coatzacoalcos
2016

M.A.S.C. Arturo Ivn Grajales Vzquez.

Competencia a desarrollar.
Construir un analizador lxico a partir de un
lenguaje de programacin o un analizador lxico
(p. e. Flex, Lex, JavaCC).

Subtemas.

5.1
5.2
5.3
5.4
5.5
5.6

Funciones del analizador lxico


Componentes lxicos, patrones y lexemas
Creacin de Tabla de tokens
Errores lxicos
Generadores de analizadores Lxicos
Aplicaciones (Caso de estudio)

Introduccin al analizador
Lxico

Analizador lxico o Scanner.


La fase del anlisis lexicogrfico de un compilador agrupa
secuencia de caracteres en categoras. Aunque esto se conoce tambin
como rastro, realmente podemos distinguir dos tareas separadas:
Un rastreador mueve un apuntador a travs de la entrada un carcter
a la vez para hallar cadenas continuas de caracteres, las cuales
constituyen elementos textuales individuales ( palabras), y clasificadas
cada una de acuerdo con su tipo.

El filtro descarta algunos de los tokens encontrados por el rastreador


( tal vez espacios y comentarios), determina cules otros son smbolos
reservados ( quiz palabras clave u operadores), y coloca el texto de
los restantes en la tabla de nombre.
El analizador lexicogrfico pasa al analizador sintctico el tipo
de token, ms el valor real de ste. En ocasiones, el valor es un
apuntador a la tabla que contiene el valor. Puede haber tablas
separadas para nombres, constantes numricas, cadenas de
caracteres constantes, y operadores, o puede hacer una tabla que
incluya todo lo anterior.

Estructura que muestra el sitio que ocupa el analizador


lxico dentro del compilador.

Analizador
lexicogrfico

Analizador
Sintctico

Analizador
semntico

Optimizacin

Preparacin
Para la
Generacin
de cdigo

Tokens
Manejo de tablas

Tabla de smbolo.
Tabla de literales.
Tabla de ciclos
iterativos
Tabla de representacin intermedia

Manejo
de errores

E/S

Generacin
del cdigo

Tokens
Los tokens ( componentes lxicas ) son las unidades lxicas
bsicas del mismo modo en que las palabras y los signos de puntuacin
son las unidades bsicas de una oracin en ingles. Los tokens varan de
lenguaje en lenguaje, e incluso de compilador en compilador para el
mismo lenguaje. Algunos ejemplos de tokens son:
La palabra clave.
La constantes.
El identificador.
El operador.
Puntuacin.

Problema del anlisis lexicogrfico


Podemos describir el problema del anlisis lexicogrfico como:
Dada una cadena de caracteres, divdase en una cadena de tokens:
Tokens=( tipo, valor)
Al tipo de un tokens a menudo se llama clase; los carcter reales
se conocen como lexema. Existen tres formalismo o modelos comunes
para la descripcin de los tipos de tokens:

Expresiones regulares:- La expresiones regulares describen los tokens


como el conjunto de cadenas permitidas en un lenguaje.
Diagramas de transicin :- Los diagramas de transicin describen los
tokens como cadenas permitidas que toman el diagrama desde un estado
inicial hasta un estado final.
Gramticas lineales:- Las gramticas lineales describen los tokens
como las cadenas generadas por una gramtica en una forma especial
(Llamadas tambin gramticas regulares ).

5.1. Funciones del Analizador


Lxico

Funciones principales de los analizadores lexicogrfico.


Existen tres funciones principales para un analizador lexicogrfico
a medida que va hallando tokens:
Utilidades de caracteres y manejo de lnea:- Se establece un programa
mediante un formato uniforme y compacto, el analizador lexicogrfico
puede eliminar informacin innecesaria como los comentarios. Tambin
procesa directivas de control del compilador ( como la peticin para crear
un archivo del listado de un programa ), introduce informacin preliminar (
como los nombres definidos por el usuario) en tablas y formatos y lista el
programa.
Prueba de predicado: - Tiene como finalidad verificar la membresa de un
conjunto de caracteres. Para un predicado su objetivo es regresar un valor
de verdadero siempre que se cumplan la condicin establecida por el. Las
implementaciones de estas utilidades dependen del lenguaje en que se
haya escrito al analizador lexicogrfico. Por ejemplo:
Esletra ( x ) : A <= x y x <= Z
El predicado Esletra aqu prueba slo letras maysculas ( y presume
que todas las maysculas estn codificadas en forma consecutivas ).

Acciones : - En general, hay una accin para cada tipo de token. En


algunos casos, podemos necesitar una accin para cada carcter
rastreado. Por ejemplo:
Cuando se rastrean los dgitos en un nmero, podramos tener que
convertir la secuencia de caracteres a un nmero.

5.2. Componentes lxico, patrones


y lexemas

En la fase de anlisis, los trminos componentes lxicos (token), patrn y


lexema se emplean con significados especficos. Un analizador lxico,
inicialmente lee los lexemas y le asigna un significado propio.
Componente lxico es la secuencia lgica y coherente de caracteres
relativo a una categora: identificador, palabra reservada, literales
(cadena/numrica), operador o carcter de puntuacin, adems de que un
componente lxico puede tener uno o varios lexemas.

Patrn es una regla que genera la secuencia de caracteres que puede


representar a un determinado componente lxico (expresin regular).
Lexema es una cadena de caracteres que concuerda con un patrn que
describe un componente lxico (valor de cadena).

Ejemplo de una cadena de cdigo: const pi = 3.1416;

Lexemas

Componentes lxico

Patrn

const

const

Const

Relacion

<o<=o= o <> o > o >=

pi

Identificador

Letra seguida de letras o


nmeros

3.1416

numero

Cualquier literal numerica

hola mundo

literal

Caracteres entre comillas

El analizador lxico recoge informacin sobre los componentes lxicos en sus


atributos asociados. Los tokens influyen en las decisiones del anlisis
sintctico, y los atributos, en la traduccin de los tokens. En la practica los
componentes lxicos suelen tener solo un atributo. Para efectos de diagnostico,
puede considerarse tanto el lexema para un identificador como el numero de
lnea en el que se encontr por primera vez. Esta informacin puede ser
almacenada en la tabla de smbolos para el identificador (estructura de datos).
Para la cadena E=M*C**2 de ejemplo, los componentes lxicos y los valores
de atributo
asociado son:
<identificador, atributo para el smbolo E>
<op_asignacion>
<identificador, atributo para el smbolo M>
<op_multiplica>
<identificador, apuntador al smbolo C>
<op_exponente>
<numero, atributo valor 2>

Tome en cuenta que ciertas parejas no necesitan un valor de atributo. Los


atributos
relacionados con ese token debern ser conservados y
transferidos a alguna estructura de datos para que sean empleados en las
siguientes etapas del anlisis

Diagrama de transicin.
Los diagramas de transicin describen las acciones
necesarias para reconocer un token. Formalmente, un diagrama
de transicin es una grfica dirigida con arcos etiquetados. Y
estos se construyen mediante los siguientes smbolos:
Smbolo

Descripcin
Un circulo simple representa
a los nodos y estos a su vez
se denominan estados .
Un flecha representa a los
arcos que van etiquetados
con caracteres de entrada
que indican Caracteres
entrada
que
pueden
presentarse antes y despus
de cada estado.
Un circulo doble representa
un estado final o de
aceptacin.

Siguiendo un diagrama de transicin desde un estado


inicial hasta un estado final se confirma que los caracteres en el
token corresponden exactamente para los que el diagrama de
transicin fue diseado.
Por ejemplo:
Este diagrama de transicin permite
detectar un
identificador ( nombre de las variables ) se describe con una
letra seguida por un nmero arbitrario de letras o dgitos.
Letra
dgito
Letra

1
No
es
letra
4

3
No es
letra o
dgito

Autmatas finitos.
Los diagramas de transicin son una instrumentacin de
un modelo formal denominado autmatas finitos, conocidos
tambin como maquinas de estado finito o ( con menos frecuencia
en la actualidad) mquinas secuenciales.
Los autmatas finitos vienen diferentes tipos:
No determinsticos (NFA, por su siglas en ingles).
Determinsticos (DFA, por la misma razn ).
Determinsticos mnimos.

Ejemplo : Autmata finito no determinstico.


Letra
dgito, $
0

Ejemplo : Automta finito determinstico.

Letra
dgito

3
Letra
dgito
$

Letra
dgito

Ejemplo: Este automta finito permite definir datos numricos como son:
enteros, reales y cientficos.( parte de un analizador lxico).
Dgito

q0

|+|-

q1

Dgito

q2

Dgito

Dgito

q3

Dgito

E|e

q4

E|e

q5

|+|-

q6

Dgito

q7

5.3.-Creacion de Tablas de
tokens

Tablas de Smbolos.
Es una estructura de datos que contiene un registro por
cada identificador, con los campos para los atributos del
identificador. La estructura de datos permite encontrar
rpidamente el registro de cada identificador y almacenar o
consultar rpidamente datos de ese registro.
Se examina la tabla de smbolos cada vez que se
encuentra un nombre en el texto fuente. Si se descubre un
nombre nuevo o nueva informacin sobre un nombre ya
existente, se producen cambios en la tabla.
Muchos compiladores establecen una tabla en el
momento del anlisis lexicogrfico y la llena con la informacin
del ltimo smbolo durante el anlisis semntico, cuando se
conoce ms informacin acerca del smbolo.

Operaciones de la tabla de smbolos.


Las principales operaciones de las tablas de smbolos son :
Operacin Insercin : - Se utiliza para almacenar la informacin
proporcionada por las declaraciones de nombre cuando se procesan
estas declaraciones.
Operacin Bsqueda:Es necesaria para recuperar la
informacin asociada con un nombre cuando ste se utiliza en el
cdigo asociado.

Operacin Eliminacin:- Es necesaria para eliminar la informacin


proporcionada por una declaracin cuando est ya no se aplica.
Las propiedades de ests operaciones son dictadas por las
reglas del lenguaje de programacin que se est traduciendo. En
particular, la informacin que se necesita almacenar en la tabla
smbolo est funcin de la estructura y propsito de las
declaraciones.

Atributos de smbolos.
Los atributos son independientes del lenguaje, pero
podra incluir los caracteres en el nombre, su tipo, e inclusive
informacin de asignacin de almacenamiento tal como cuntos
bytes ocupara el valor. Con frecuencia, el nmero de lnea
donde se declara el nombre que se registra, as como las lneas
donde se hace referencia al smbolo. Si el lenguaje contiene
mbitos, como la mayora los tiene, entonces el mbito se
introduce con frecuencia en la tabla de smbolos.

La clase y los atributos relacionados.


Un nombre en un programa puede representar una
variable, un tipo, una constante, un parmetro, un registro, un
campo de registro, un procedimiento o funcin, un arreglo,
una etiqueta o un archivo, por nombrar slo unas cuantas
posibilidades. stos son valores para un atributo llamado
clase de smbolo. Por supuesto, no todos los lenguajes tienen
todas estas posibilidades o pueden describirse empleando
otros trminos.

Atributo de mbito.
Los lenguajes estructurados en bloques permiten de
declaraciones; es decir, un nombre puede redefinirse para ser de
una clase diferente. Un problema semejante ocurre cuando
procedimientos o paquetes son anidados redefinen un nombre. El
mbito del nombre se limita al bloque o procedimiento en el que
se defina. El mbito, representado quizs el nmero, es entonces
un atributo para el nombre. Una tcnica alternativa es tener una
tabla de smbolos por separada para cada mbito.

Atributos especiales.
Los lenguaje de propsito especficos a menudo tienen
nombres especiales. Los lenguajes orientados a objetos, por
ejemplo, pueden tener nombres de mtodos, nombres de clase y
objeto, as como los tipos usuales. El mbito es de particular
importancia en los lenguajes orientados a objetos, porque los
nombre a menudo heredan operaciones desde la superclases
que las contienen.

Otros atributos.
Otros atributos para nombres incluyen los caracteres
reales en el identificador del nombre, el nmero de lnea en el
programa fuente donde este nombre se declara y los nmeros
de lnea donde ocurren las referencias.
1

Ejemplo de un programa
que ser empleado para
construir su tabla de
smbolo.

PROGRAMA Principal

Global a,b

PROCEDIMIENTO P (PARAMETRO x )

LOCAL a

COMIENZA { P }

..a

..b

..x..

TERMINA { P }

10
11
12

COMIENZA { PRINCIPAL }
Llama P (a)
TERMINA { PRINCIPAL }

Tabla de smbolo obtenida del programa anterior.


Otros atributos
Caracteres
Principal

Clase

mbito

Declaracin

Referencia

Programa

Lnea 1

Variable

Lnea 2

Lnea 11

Variable

Lnea 2

Lnea 7

Procedimiento

Lnea 3

Lnea 11

Parmetro

Lnea 3

Lnea 8

Variable

Lnea 4

Lnea 6

otros

1 parmetro, x

5.4.-Errores lxico

Manejo de errores.
Los programadores a menudo escriben programas
incorrectos, y un buen compilador deber ayudar al programador a
identificar y localizar errores. Es ms, considerar desde el principio
el manejo de errores puede simplificar la estructura de un
compilador y mejorar su respuesta a los errores.
La mitad del espacio ocupado por el cdigo de muchos
compiladores se dedica al manejo de errores. La deteccin, informe
y recuperacin de errores son mucho ms notorios para el usuario
promedio que la rapidez de un compilador o la rapidez del cdigo
emitido. Existen realmente cuatro facetas del manejo de errores :

Creacin de errores.
Deteccin de errores.
Informe de errores.
Recuperacin de errores.

Creacin de errores.
EL diseo de un lenguaje afecta la clase de errores que pueden
ocurrir, y es la manera ms fcil de cometer los errores.
Cuando un programador no complet entre comillas la cadena
definida y se dirigi a una nueva lnea. De nueva cuenta esto es un
error muy fcil de cometer. Por ejemplo:
String cad= Si no cierra las comillas, entonces todo el resto del
programa ser parte de la cadena de caracteres;

System. out. println (Escribe la cadena + cad );


Estos probablemente fueron cometidos por un programador al
agregar comentarios despus de que el programa se haba escrito. Por
ejemplo:
int x=0 ;

// esta es una variable de tipo entero.

float y=0.0F ;

esta es una variable de tipo flotante.

Informe de errores.
Con el fin de ser til, un mensaje de error debera
informar al usuario dnde se encuentra el error y, tanto como sea
posible, qu error es. Ms formalmente los mensajes de error
deberan informar la fuente del error y parametrizar el mensaje.
Por ejemplo:
En lnea 2, la palabra reservada inicial est mal escrita.
Fuente

Parmetros

Un manejador de errores se puede escribir en una forma modular


cuando contiene una pequeo nmero de esquemas tal como
En Fuente Tipo Valor est mal escrita.
Cuando se llama al manejador, los valores reales se sustituyen por
las plantillas Fuente, Tipo y Valor.

Otra cuestin del informe de errores es si se contina


informando apariciones repetidas del mismo error. Debera
emitirse un mensaje de error todo el tiempo que se utiliza una
variable no declarada ? .

Deteccin y recuperacin de errores.


La deteccin y la recuperacin de errores son temas
combinados en el que la deteccin de un error, a menudo,
proporciona una firme pista acerca de cmo resolverlo. La
deteccin de errores encuentra el error; la recuperacin de errores
intenta reparar el error lo suficiente para continuar con el anlisis (
y quiz hallar ms errores). La recuperacin es algo heurstico, en el
sentido de que es muy difcil asegurar que la correccin no
informe de errores espurios ( los que no estaban all ), o ignore
otros errores que se encontraban ah. Por ejemplo:
Como palabras reservadas extraviadas.
Delimitadores olvidados como los signos de punto y coma.

Los nombres de variables no declaradas.


Una recuperacin de error simple es saltarse al final de la
construccin actual, o al principio de la siguiente.

Los errores en la programacin pueden ser de los siguientes tipos:


Lxicos, producidos al escribir mal un identificador, una palabra
clave o un operador.
Sintctico, por una expresin aritmticas o parntesis no
equilibrados.
Semnticos,
incompatible.

como

un

operador

aplicado

un

operador

Lgicos, puede ser una llamada infinitamente recursiva.


Un buen compilador debe hacerse siempre teniendo tambin en
mente los errores que se puede producir; con ello se consigue:
Simplificar la estructura del compilador.
Mejorar la respuesta ante los errores.

5.5.-Generadores de analizadores
lxicos

5.6.-Aplicaciones ( Casos de estudios)

S-ar putea să vă placă și