analisis lexico 2

34
ANALISIS ANALISIS LEXICO LEXICO

Upload: perlallamas

Post on 13-Jun-2015

2.955 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Analisis lexico 2

ANALISIS LEXICOANALISIS LEXICO

Page 2: Analisis lexico 2

FASES DE UN COMPILADORFASES DE UN COMPILADOR

La fase de análisis tiene como entrada, el PF. En base a este programa fuente, la fase de análisis construye una representación intermedia.

¿de quién?...

Del PF, precisamente. En la fase de síntesis se toma de entrada a esta representación intermedia, para la generación del código que constituye al PO.

Page 3: Analisis lexico 2

El análisis que toma al PF como entrada, consiste a su vez de tres fases:

FASES DEL ANALISISFASES DEL ANALISIS

Page 4: Analisis lexico 2

ANALISIS LEXICOTAREA PRINCIPAL

Consiste en leer de izquierda a derecha el PF.El PF es la entrada al analizador lexico y generalmente es un

archivo de texto (los interpretes reciben una o varias cadenas como entrada, desde el teclado).

Este monitoreo de la entrada (PF) lo efectua el analizador lexico con el fin de identificar tokens, los cuales son cadenas o secuencias de caracteres que tienen un cierto significado.

La salida de un analizador lexico es un conjunto de tokens

Page 5: Analisis lexico 2

Ademas de su principal funcion, tambien realiza otra de gran importancia:

Elimina los comentarios del programa. Elimina espacios en blanco, tabuladores, retorno de carro, etc y

en general todo aquello que carezca de significado según la sintaxis del lenguaje.

Reconocer los identificadores del usuario, numeros, palabras reservadas, etc.

Llevar la cuenta del numero de lineas por la que va leyendo, por si se produce un error, dar informacion acerca de donde se ha producido.

Avisar de errores lexicos, Por ejem, si el carácter “@” no pertenece al lenguaje, se debe emitir un error.

ANALISIS LEXICO

Page 6: Analisis lexico 2

ANALISIS LEXICO

Recibida la orden “Dame el siguiente componente lexico del analizador sintactico, el lexico lee los caracteres de entrada hasta que pueda identificar el siguiente componente lexico.

Page 7: Analisis lexico 2

TOKEN, PATRON Y LEXEMA PATRONEs una regla que describe el conjunto de lexemas que puede

representar a un determinado token en los programas fuentes.

TOKEN (COMPONENTE LEXICO)Es la categoria lexica de un patron. Los cuales son cadenas o

secuencias de caracteres que tienen un cierto significado.En un lenguaje de programación, tenemos varias clases de tokens:

Palabras reservadas, Identificadores, Operadores aritméticos, Operadores relacionales, Operadores lógicos, Constantes Literales (String), Números, Separadores, Operadores de asignación, etc.

LEXEMAEs cada secuencia de caracteres concreta que encaja con un patron.P.ej: “8", “23" y “50" son algunos lexemas que encajan con el

patrón (‘0'|’1'|’2'| ... |’9') . El número de lexemas que puede encajar con un patrón puede ser finito o infinito, p.ej. en el patrón ‘W’‘H’‘I’‘L’‘E’ sólo encaja el lexema “WHILE”.

Page 8: Analisis lexico 2

EJEMPLO:EJEMPLO: TOKEN, PATRON LEXEMA

Page 9: Analisis lexico 2

ESPECIFICACIONES DE LOS ESPECIFICACIONES DE LOS COMPONENTES LEXICOS (TOKENS)COMPONENTES LEXICOS (TOKENS)Cada patron concuerda con una serie de cadenas, de modo que los

patrones serviran como nombres para conjuntos de cadenas.

CADENAS Y LENGUAJES

Alfabeto: Cualquier conjunto finito de simbolos. Ejem. El conjunto {0,1} es el alfabeto binario, El codigo ASCII es alfabeto del computador.

Cadena: Es una secuencia finita de simbolos tomados de ese alfabeto.

La longitud de una cadena s que suele escribirse |s| es el numero de apariciones de simbolos en s.

Una cadena vacia, representada por є, es una cadena especial de longitud 0.

Page 10: Analisis lexico 2
Page 11: Analisis lexico 2

CADENAS Y LENGUAJES

Lenguaje: Es cualquier conjunto de cadenas de un alfabeto fijo.

Esta definicion no atribuye ningun significado a las cadenas de un lenguaje.

Si x e y son cadenas, entonces la concatenacion de x e y, que se escribe xy es la cadena que resulta de agregar y a x.

Por ejemplo, si x = caza e y= fortunas, entonces xy = casafortunas.

sє = s

Page 12: Analisis lexico 2

Se considera la concatenacion como un producto, la cual se define de la siguiente manera:

s0 = є,

s1 = s,

s2 = ss,

s3 = sss

CADENAS Y LENGUAJES

Page 13: Analisis lexico 2

Para el analizador lexico interesan principalmente la union, concatenacion y la cerradura.

OPERACIONES APLICADA A LOS LENGUAJES

Page 14: Analisis lexico 2

Ejemplo:Sea: L el conjunto {A,B,…,Z,a,b,…,z} y D={0,1,…,9}Se puede considerar L y D de la siguiente manera:L como el alfabeto de letras mayusculas y minusculasD como el alfabeto de los 10 digitos decimalesLos siguientes son ejemplos de nuevos lenguajes creados a partir de

L y D.

1. L U D es el conjunto de letras y digitos2. LD es el conjunto de cadenas que consta de una letra seguida de

un digito3. L4 es el conjunto de todas las cadenas de cuatro letras4. L* es el conjunto de todas las cadenas de letras, incluyendo є, la

cadena vacia5. L(L U D)* es el conjunto de todas las cadenas de letras y digitos

que comienzan con una letra.6. D* es el conjunto de todas las cadenas de uno o mas digitos.7. L? es el conjunto de 0 o una concatenacion de L

OPERACIONES APLICADA A LOS LENGUAJES

Page 15: Analisis lexico 2

EJEMPLO

Sea A={A,B,…,Z} y B={0,1,2,…,9} y cad1 = HOLA cad2 = TODOS cad3=T3

cad1cad2cad3= HOLATODOST3 єcad1 є єcad3 є є єcad2= HOLAT3TODOS Longitud = 11 cad1=A4

cad2=A5

cad2=L(B)

Page 16: Analisis lexico 2

Sea A= {0,1} B= {a,b,c} y C= {1,2} obtener:(a)AUB = {0,1}U{a,b,c} = {0,1,a,b,c} (b) (BC) U A = {a,b,c} {1,2} U {0,1} = {a1,a2,b1,b2,c1,c2} U {0,1} = {a1,a2,b1,b2,c1,c2,0,1} (c) A* = {0,1}* = {0,1}0 U {0,1}1 U {0,1}2 U {0,1}3 U ... = {є } U {0,1} U {0,1}{0,1} U {0,1}{0,1}{0,1} U ... = {є,0,1} U {00,01,10,11} U {000,001,010,011,100,101,110,111}U...

={є,0,1,00,01,10,11,000,001,010,011,100,101,110,111,...} (d) (B+ U C)0 = {є} (e) (C? A)? = ( {1,2}? {0,1} )? = (( {1,2}0 U {1,2}1 ) {0,1} )? = (( {є} U {1,2} ) {0,1} )? = ( {є,1,2} {0,1} )? = {0,1,10,11,20,21}? = {0,1,10,11,20,21}0 U {0,1,10,11,20,21}1

= {є} U {0,1,10,11,20,21} = {є,0,1,10,11,20,21}

Page 17: Analisis lexico 2

continuacion EJERCICIO

Page 18: Analisis lexico 2

EJERCICIO EN CLASESea X={c,d,e}, Y={3,4} y Z={a,b} obtener:a) X U Yb) (Z? X)?c) (Z U X)+d) (XY)0

e) (XUZ?)U X0

f) ZY U YZg) (XY) U ZSean las cadenas cad1=Ana, cad2=reprobo cad3=la cad4=materia1. cad1cad2= 2. Longitud=3. cad1cad2cad3cad4=4. Longitud=5. є єcad3 є cad4 є є є cad1 є cad2=

Page 19: Analisis lexico 2

EXPRESIONES REGULARES Los tokens son cadenas de caracteres que

tienen un significado.Por ejem el Token id puede tiene un sin fin de lexemas: iCont, X, iCalinf, iNum, etc.

Las cadenas que forman parte de este lenguaje, cumple con ciertas reglas: Patron

El patron que reglamenta a un token, puede especificarse utilizando expresiones regulares.

Las expresiones regulares son una notacion, que nos permite definir de manera precisa, al conjunto de cadenas que forman el lenguaje representado por un token.

Page 20: Analisis lexico 2

Una expresion regular r denota a un lenguaje L(r)

REGLAS PARA EXPRESIONES REGULARES VALIDAS SOBRE UN ALFABETO Σ

Page 21: Analisis lexico 2

EJEMPLO 1

Obtener la definicion regular para el token con las siguientes caracteristicas:

Numero entero par El cero es considerado par.

Lexema: 16,7772,14444,222,418

Dig ⇒ 0|1 |2 |3 |4 |5 |6 |7 |8 |9Par ⇒ 0 |2 |4 |6 | 8NumPar ⇒ (Dig*)(Par)

Page 22: Analisis lexico 2

EJEMPLO 1 (continuacion)NumPar ⇒ Dig* Par

Obtenemos el lenguaje de la expresión regular Dig :

Dig = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }

Usaremos la notación 0-9 para indicar 0, 1, ... , 9.

Calculamos ahora Dig*

Dig* = { 0-9 }* = { 0-9 }º U { 0-9 }¹ U { 0-9 }² U { 0-9 }³ U ...

= {є } U { 0-9 }¹ U { 0-9 }{ 0-9 } U { 0-9 }{ 0-9 }{ 0-9 } U ...

= {є, 0-9 } U { 00-99 } U { 000-999 } U ...

= {є, 0-9, 00-99, 000-999, ... } Por último, efectuamos la concatenación

NumPar ⇒ Dig* Par

Dig* Par = {є, 0-9, 00-99, 000-999, ... } { 0, 2, 4, 6, 8 }

NumPar denota al lenguaje formado por las cadenas de digitos que terminan en par: 0,2,4,6,8

Page 23: Analisis lexico 2

EJEMPLO 2Encuentre la definicion regular para el token con las siguientes categorias.

La cadena empiese con al menos un digito y termina en letra

El ultimo digito de ser par y la primera letra debe ser vocal (el cero se considera par)

Lexema: 764a, 6E, 111118am

Analizando los lexemas, observamos que por medio de una concatenacion es posible llegar a la solucion. Dicha concatenacion tiene como operandos: secuencia de digitos y secuencia de letras.

token = (SecDig)(SecLet)

L(token) = L(SecDig)L(SecLet)

Page 24: Analisis lexico 2

EJEMPLO 2 (continuacion)

Page 25: Analisis lexico 2

EJERCICIO

Page 26: Analisis lexico 2

UN LENGUAJE PARA ESPECIFICACION DE ANALIZADORES LEXICOS

Se han desarrollado algunas herramientas para construir analizadores lexicos apartir de notaciones basadas en expresiones regulares.

Ejem LEX muy utilizada en la especificacion de analizadores lexicos. Esa herramienta se denomina compilador Lex y la especificacion de su entrada, Lenguaje Lex

Page 27: Analisis lexico 2

TRABAJO Investigar todo lo relacionado con la herramienta

LEX (PCLEX).- Estructura de un programa LEX- Funciones y variables suministradas por

PCLEX- Un ejemplo,- Etc.

Investigar un Analizador Lexico (SCANNER) Es trabajo es para entregar para el lunes 27 de

septiembre. NO SE RECIBIRAN TRABAJOS DESPUES DE ESTA FECHA.

Page 28: Analisis lexico 2

GRAFOS Grafo: Un grafo, G, es un par ordenado de V y A, donde V es

el conjunto de vértices o nodos del grafo y A es un conjunto de aristas que unen un vertice con otro, a estos también se les llama arcos o ejes del grafo.

Un vértice puede tener cero o más aristas, pero toda arista debe unir exactamente a dos vértices.

Page 29: Analisis lexico 2

Arista: Son las líneas con las que se unen los nodos de un grafo y con la que se construyen también caminos.Si la arista carece de dirección se denota indistintamente (a, b) o (b, a), siendo a y b los vértices que une.

Si (a ,b) es una arista, a los vértices a y b se les llama sus extremos.

Aristas Adyacentes: Se dice que dos aristas son adyacentes si convergen en el mismo vértice.

Aristas Paralelas: Se dice que dos aristas son paralelas si el vértice inicial y el final son el mismo.

Aristas Cíclicas: Arista que parte de un vértice para entrar en el mismo.

Vértice: Son los puntos o nodos con los que esta conformado un grafo.

Llamaremos grado de un vértice al número de aristas de las que es extremo. Se dice que un vértice es par o impar según lo sea su grado.

•  Vértices Adyacentes: Si tenemos un par de vértices de un grafo (U, V) y si tenemos una arista que los une, entonces U y V son vértices adyacentes y se dice que U es el vértice inicial y V el vértice adyacente.

•  Vértice Aislado: Es un vértice de grado cero. •  Vértice Terminal: Es un vértice de grado 1.

Page 30: Analisis lexico 2

CLASIFICACION DE GRAFOS En un grafo no dirigido el par de

vértices que representa un arco no está ordenado. Por lo tanto, los pares (v1, v2) y (v2, v1) representan el mismo arco.

En un grafo dirigido cada arco está representado por un par ordenado de vértices, de forma que los pares (v1, v2) y (v2, v1) representan dos arcos diferentes.

Page 31: Analisis lexico 2

Grafo completo: Aquel con una arista entre cada par de vértices. Un grafo completo con n vértices se denota Kn. A continuación pueden verse los dibujos de K3, K4, K5 y K6:

Grafo nulo: Se dice que un grafo es nulo cuando los vértices que lo componen no están conectados, esto es, que son vértices aislados:

Page 32: Analisis lexico 2

AUTOMATAS FINITOS

Se utiliza para compilar una expresion regular, esto mediante la construccion de un diagrama de transiciones llamado automata finito. Un automata finito puede y ser determinista y no determinista

Page 33: Analisis lexico 2

En la siguiente figura se muestra un grafo de transiciones de un AFN que reconoce:

Al lenguaje (a|b)*abb que es el conjunto de todas las cadenas de caracteres de a y b que terminen en abb.

Conjunto de estados del AFN es {0,1,2,3,} El alfabeto de simbolos de entrada es {a,b} El estado 0 es el estado de inicio El estado de aceptacion 3 esta indicado

mendiante un circulo doble.

Page 34: Analisis lexico 2

Tabla de transiciones