ANÁLISIS LÉXICO

42
TEORÍA DE LENGUAJES ANÁLISIS LÉXICO ING. LAURA BAZÁN DÍAZ  

description

Teoria de análisis léxico, TL.

Transcript of ANÁLISIS LÉXICO

Page 1: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 1/42

TEORÍA DELENGUAJESANÁLISIS LÉXICO

ING. LAURABAZÁNDÍAZ  

Page 2: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 2/42

2

Page 3: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 3/42

ANÁLISIS LÉXICO

Es la primera fase de un compilador. Su principal función consiste enleer los caracteres de entrada y elaborar como salida una secuenciade componentes léxicos que utiliza el analizador sintáctico para hacer

el análisis.El explorador, analizador lexicográfico o “scanner”   es la parte delcompilador que lee los caracteres del programa fuente y queconstruye unos símbolos intermedios que llamaremos “tokens”, porejemplo: las variables, los enteros, palabras reservadas y losdelimitadores (“+”, “-”, “*”, etc.).

3

Page 4: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 4/42

ANÁLISIS LÉXICO

4

INTERACCIÓN DE UNANALIZADOR LÉXICO CON

EL ANALIZADORSINTÁCTICO

Page 5: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 5/42

FUNCIONES

Como el analizador léxico es la parte del compilador que lee el texto fuente,también puede realizar ciertas funciones secundarias en la interfaz del usuario,como eliminar del programa fuente comentarios y delimitadores(espacios enblanco, símbolos de puntuación, fin de línea).

Relacionar los mensajes de error del compilador con el programa fuente. Porejemplo, el analizador léxico puede tener localizado el número de caracteres denueva línea detectados, de modo que pueda asociar un número de línea con unmensaje de error.

Introducir los identificadores en la tabla de símbolos.

En algunos compiladores, el analizador léxico se encarga de hacer una copia delprograma fuente en el que están marcados los mensajes de error.

En algunas ocasiones, los analizadores léxicos se dividen en una cascada de dosfases, la primera llamada “examen”, y la segunda “análisis léxico”. El examinador seencarga de realizar tareas sencillas, mientras que el analizador léxico es el querealiza las operaciones más complejas.

5

Page 6: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 6/42

Funciones del explorador

Las funciones principales que deberá realizar el explorador son las siguientes:

La más importante es la formación y la entrega al parser de los tokens. Estostokens que entrega formarán los terminales del analizador sintáctico.

Manejar el fichero del programa fuente, es decir, abrirlo, a continuación leersus caracteres y cerrarlo.

El explorar los literales, por ejemplo los literales o tiras alfabéticas, los númerosflotantes, enteros, etc.

Listar el programa fuente llegando en algún caso a llevar el control exacto decada carácter leído para señalar el carácter ofensivo en caso de un error.

Manejar las macros (expansión del texto fuente) de una maneraindependiente, en general del compilador.

6

Page 7: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 7/42

COMPONENTES LÉXICOSCuando se menciona el analizador sintáctico, los términos “componenteléxico - token”, “patrón”   y “lexema”   se emplean con significadosespecíficos.

Un token es un símbolo terminal de la gramática del analizador sintáctico.En general, hay un conjunto de cadenas en la entrada para el cual seproduce como salida el mismo componente léxico.

Un token se describe mediante un patrón.

Este conjunto de cadenas se describe mediante una regla llamada PATRÓN

asociado al COMPONENTE LÉXICO.

Se dice que el patrón CONCUERDA con cada cadena del conjunto.

7

Page 8: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 8/42

LexemaEs una secuencia de caracteres en el programa fuente con la que concuerdael patrón para un componente léxico.

En cont pi = 3.1416;La subcadena pi es un lexema para el componente léxico “identificador”.

Los componentes léxicos se tratan como símbolos terminales de lagramática del lenguaje fuente, con nombres en negritas pararepresentarlos.

Los lexemas para el componente léxico que concuerdan con el patrónrepresentan cadenas de caracteres en el programa fuente que se puedentratar juntos como unidad léxica.

8

Page 9: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 9/429

Componente léxico Lexemas de

ejemplo

Descripción Informal del patrón

CONST

IFrelaciónidnúmliteral

const

if <,<=,=,<>,>,>=pi, cuenta, D23.1416, 0, 6.02E23“vaciado de memoria”

const

if < o <= o = o <> o > o >=Letra seguida de letras y/o dígitosCualquier constante numéricaCualquier carácter entre “”

Page 10: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 10/42

En la mayoría de los lenguajes de programación, se consideran componentesléxicos las siguientes construcciones: palabras clave, operadores,identificadores, constantes, cadenas literales y signos de puntuación comoparéntesis, coma y punto y coma.

En el ejemplo anterior, cuando la secuencia de caracteres  pi  aparece en elprograma fuente, se devuelve al analizador sintáctico un componente léxicoque representa un identificador.

La devolución de un componente léxico a menudo se realiza mediante el pasode un número entero correspondiente al componente léxico. Este entero es alque hace referencia el id.

10

Page 11: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 11/42

PatrónUn patrón es una regla que describe el conjunto de lexemas que puedenrepresentar a un determinado componente léxico en los programafuente.

El patrón para el componente léxico  relación es el conjunto de los seisoperadores relacionales de pascal.

Para la descripción de patrones para componentes léxicos máscomplejos, como id(para identificador) y num(para número). Se utilizarácon mayor precisión, la notación de expresiones regulares.

11

Page 12: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 12/42

DO 5 I = 1 25

En la proposición no se puede saber hasta ver el punto decimal si DO es unapalabra clave o es más bien parte del identificador DO5I

Por otro lado en la proposición Do 5 I = 1,25 hay 7 componentes léxicos, que

corresponde a la palabra clave   DO, la etiqueta de la proposición   5, elidentificador I, el operador =, la constante 1, la coma y la constante 25. Aquí no se puede estar seguro hasta encontrar la coma si DO es una palabra clave.

En muchos lenguajes, ciertas cadenas son RESERVADAS, es decir, su significadoestá predefinido y el usuario no lo puede modificar. Si las palabras clave no son

reservadas, entonces el analizador léxico debe distinguir entre una palabraclave y un identificador definido por el usuario.

12

Page 13: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 13/42

if x1>3 then a:=b+x1

Existen una serie de palabras clave (reservadas) en muchos lenguajes queconviene introducir directamente en la tabla de símbolos:

13

Tokens Lexemas

if if  

id x1,a,b

relación >

op +

asign :=

then Then

num 3

Page 14: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 14/42

14

Page 15: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 15/42

Identifique los lexemas que forman los componentesléxicos :

15

Page 16: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 16/42

Atributos de los Componentes

LéxicosCuando concuerda con un lexema más de un patrón, el analizadorléxico debe proporcionar información adicional sobre el lexemaconcreto que concordó con las siguientes fases del compilador.

El analizador léxico recoge información sobre los componentes léxicosen sus atributos asociados. Los componentes léxicos influyen en lasdecisiones del analizador sintáctico, y los atributos, en la traducción delos componentes léxicos.

En la práctica, los componentes léxicos suelen tener un solo atributo –

un apuntador a la entrada de la tabla de símbolos donde se guarda lainformación sobre el componente léxico; el apuntador se convierte enel atributo del componente léxico.

16

Page 17: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 17/42

Ejemplo: Los componentes léxicos y los valores deatributos asociados para la proposición de FORTRAN:

E = M * C * * 2

Se escriben a continuación como una secuencia de parejas:

<id, apuntador a la entrada de la tabla de símbolos para E>

<op_asign,>

<id, apuntador a la entrada de la tabla de símbolos para M>

<op_mult,>

<id, apuntador a la entrada de la tabla de símbolos para C>

<op_exp,>

<id, apuntador a la entrada de la tabla de símbolos para C>

<num, valor entero 2>

17

Page 18: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 18/42

Los atributos de los identificadores se pueden guardar en la tabla desímbolos. Los otros se pueden guardar en otra tabla o devolverlos junto altoken.

Obsérvese que en ciertas parejas no se necesita un valor de atributo; elprimer componente es suficiente para identificar el lexema.

El compilador puede almacenar la cadena de caracteres que forma unnúmero en una tabla de símbolos y dejar que el atributo del componentenum sea un apuntador a la entrada de la tabla(valor entero).

18

Page 19: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 19/42

Errores LéxicosHay pocos detectables por el analizador léxico

Detectables◦  Número de caracteres de los identificadores

◦  Caracteres ilegales◦  Otros (si el lenguaje no admite .5 en lugar de 0.5)...

Programa con K errores: hacen falta K cambios para poder ser correcto

No se suelen utilizar las acciones de corrección de errores por ser muy

costosas

19

Page 20: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 20/42

Errores LéxicosAcciones posibles

◦  Borrar un carácter

◦  Insertar un carácter

◦  Reemplazar un carácter

◦  Intercambiar dos caracteres

20

Page 21: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 21/42

Errores LéxicosSon pocos los errores que se pueden detectar simplemente en el nivel léxicoporque un analizado léxico tiene una visión muy restringida de un programafuente. Si aparece la cadena fi por primera vez en un programa en C en elcontexto:

fi (a == f(x) ) …

Un analizador léxico no puede distinguir si fi es un error de escritura de lapalabra clave if o si es un identificador de función no declarado. Como fi esun identificador válido, el analizador léxico debe devolver el componenteléxico de un identificador y dejar que alguna otra fase del compilador se

ocupe de los errores.

21

Page 22: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 22/42

Errores Léxicos

Pero supóngase que surge una situación en la que el analizador léxico nopuede continuar porque ninguno de los patrones concuerda con un prefijode la estrada restante. Tal vez la estrategia de recuperación más sencilla sea

la recuperación en “modo de pánico”.Se borran caracteres sucesivos de la entrada restante hasta que elanalizador léxico pueda encontrar un componente léxico bien formado.Esta técnica de recuperación puede confundir en ocasiones al analizadorsintáctico, pero en un ambiente de computación interactivo puede resultar

bastante adecuada.

22

Page 23: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 23/42

Representación delAnalizador LéxicoExpresión Regular:

(a|..|z|A|..|Z) (a|..|z|A|..|Z)*

Autómata finito (diagrama o tabla de transición)

Gramática Lineal (regular)

S::= aR | ... | zR | AR | ... | ZRR::= aR | ... | zR | AR | ... | ZR | 0R | ... | 9R | λ

23

Page 24: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 24/42

24

Page 25: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 25/42

25

Page 26: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 26/42

26

Page 27: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 27/42

Implementación de unAnalizador Léxico

Utilizando un lenguaje de alto nivel◦   Programación

◦  Tablas compactas◦  Hashing

◦  Autómata programado

27

Page 28: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 28/42

Implementación de unAnalizador Léxico

Utilizando ensamblador◦  Más eficiente

◦  Más difícil

Utilizando un generador de Analizadores Léxicos (LEX)◦  Más cómodo

Consejo: Ordenar las reglas/transiciones de acuerdo a la frecuenciade utilización

28

Page 29: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 29/42

Programación de unAnalizador Léxico

29

Page 30: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 30/42

30

Page 31: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 31/42

31

Page 32: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 32/42

Implementación con Tablas compactasA)   TABLA COMPACTA

Supongamos que tenemos el autómata que reconoce el lenguaje regularL={dda$, abnca$| n>=0}

32

1 2 3 4 6

5

a

d d

c

b

a   $

a) Diagrama de estados

a b c d $

1 2 - - 5 -

2 - 2 3 - -

3 4 - - - -

4 - - - - 65 - - - 3 -

6 - - - - -

b) Matriz de transición M

Caracteres de entrada

      E

      S      T      A      D      O      S

Page 33: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 33/42

Tabla compacta

Con el fin de ahorrar memoria en el ordenador se pueden guardar sólo loselementos no nulos de la matriz de transición M en un vector VALOR,numerándolos con un índice, que en el ejemplo va de 1 a 7. Luego se añadeuna columna adicional COL indicando en qué columna estaba el elemento nonulo correspondiente de VALOR.

Finalmente se crea otra tabla con los datos siguientes:◦  Dónde está el primer VALOR de cada línea (PRIFIL).

◦  Número de elementos (no nulos) de VALOR para esa línea (NUMFIL).

33

Page 34: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 34/42

Tablas compactas

34

Núm. delelemento

  VALOR COL

1 2 1

2 5 4

3 2 2

4 3 3

5 4 1

6 6 5

7 3 4

Núm. de lafila

  PRIFIL NUMFIL

1 1 2

2 3 2

3 5 1

4 6 1

5 7 1

6 0 0

a) Valores no nulos de M y suscolumnas.

b) Tabla para localización de los

elementos no nulos.

Como medida de la reducción alcanzada, si M tuviera 100x100elementos con solo 110 elementos no nulos, se tendría de esta forma2+(100+110)=420 elementos almacenados en total en vez de los

10,000 originales.

Page 35: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 35/42

M(2,3)?

PRIFIL(2)=3

FIL=2, esto significa que los elementos 3 y 4 de VALOR contienen lastransiciones del estado 2, de los dos el que tiene valor COL=3 tiene unatransición a 3.

Otra forma de programar un analizador léxico es creando una tabla hash con el

autómata.

35

Page 36: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 36/42

En cada iteración, se lee un carácter de la entrada y se transita a unestado dependiendo de la tabla de transiciones. Si el autómata esdeterminista, sólo habrá una transición posible para cada símbolo deentrada y no hace falta retroceso.

36

Page 37: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 37/42

HASHING

Técnica muy simple de proceder, considerando como clave de hashing laconcatenación formada por los dos valores de la fila y columna delelemento no nulo de la matriz (si no está almacenado, su valor es nulo).

37

AUTÓMATA PROGRAMADOConsiste en representar directamente con un programa al autómata en

cuestión. Este método puede ser muy rápido si el ordenador dispone dealguna instrucción para determinar si un carácter pertenece a unconjunto dado.

Page 38: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 38/42

38

O

Page 39: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 39/42

39

Page 40: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 40/42

40

Page 41: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 41/42

Acciones Semánticas

El autómata no debe mostrar únicamente “si” o “no”.

Realmente realiza una “Traducción”.

El explorador realiza comprobaciones en la tabla de símbolos.

Las acciones semánticas más comunes son:◦  AÑADIR: concatena caracteres para construir símbolos.

◦  LEECAR: lee caracteres de la entrada.

◦  VER: Comprueba si un identificador está o no en la TdS.

◦  ADD: Añade un identificador a la TdS.

41

Page 42: ANÁLISIS LÉXICO

7/17/2019 ANÁLISIS LÉXICO

http://slidepdf.com/reader/full/analisis-lexico-568d7ccd7c8b1 42/42

Analizador Léxico y Lenguajesde Programación

El AL agrupa caracteres para formar tokens, por tanto es importante definir el“delimitador” : Carácter que delimita el token sin pertenecer a él.

Otro concepto importante es el de “palabra reservada”. El lenguaje prohíbe eluso libre al programador de determinadas palabras que tienen un significado

específico y único en el lenguaje.

Se pueden clasificar los lenguajes de programación por el uso de losdelimitadores y palabras reservadas:

◦  Delimitadores blancos con palabras reservadas.◦   Caso más sencillo de lenguaje (PASCAL, COBOL)

◦  Delimitadores blancos sin palabras reservadas◦   PL/I

◦  Blancos se ignoran sin palabras reservadas◦   El tipo más difícil de lenguaje, aparecen ambigüedades (FORTRAN)

◦  Blancos se ignoran con palabras reservadas