Analisis lexico 2

3,705 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,705
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
125
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Analisis lexico 2

  1. 1. ANALISIS LEXICO
  2. 2. FASES DE UN COMPILADOR <ul><li>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. </li></ul><ul><li>¿de quién?... </li></ul><ul><li>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. </li></ul>
  3. 3. <ul><li>El análisis que toma al PF como entrada, consiste a su vez de tres fases: </li></ul>FASES DEL ANALISIS
  4. 4. ANALISIS LEXICO <ul><li>TAREA PRINCIPAL </li></ul><ul><li>Consiste en leer de izquierda a derecha el PF. </li></ul><ul><li>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). </li></ul><ul><li>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. </li></ul>La salida de un analizador lexico es un conjunto de tokens
  5. 5. <ul><li>Ademas de su principal funcion, tambien realiza otra de gran importancia: </li></ul><ul><li>Elimina los comentarios del programa. </li></ul><ul><li>Elimina espacios en blanco, tabuladores, retorno de carro, etc y en general todo aquello que carezca de significado según la sintaxis del lenguaje. </li></ul><ul><li>Reconocer los identificadores del usuario, numeros, palabras reservadas, etc. </li></ul><ul><li>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. </li></ul><ul><li>Avisar de errores lexicos, Por ejem, si el carácter “@” no pertenece al lenguaje, se debe emitir un error. </li></ul>ANALISIS LEXICO
  6. 6. 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.
  7. 7. TOKEN, PATRON Y LEXEMA <ul><li>PATRON </li></ul><ul><li>Es una regla que describe el conjunto de lexemas que puede representar a un determinado token en los programas fuentes. </li></ul><ul><li>TOKEN (COMPONENTE LEXICO) </li></ul><ul><li>Es la categoria lexica de un patron. Los cuales son cadenas o secuencias de caracteres que tienen un cierto significado. </li></ul><ul><li>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. </li></ul><ul><li>LEXEMA </li></ul><ul><li>Es cada secuencia de caracteres concreta que encaja con un patron. </li></ul><ul><li>P.ej: “8&quot;, “23&quot; y “50&quot; 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”. </li></ul>
  8. 8. EJEMPLO: TOKEN, PATRON LEXEMA
  9. 9. ESPECIFICACIONES DE LOS COMPONENTES LEXICOS (TOKENS) <ul><li>Cada patron concuerda con una serie de cadenas, de modo que los patrones serviran como nombres para conjuntos de cadenas. </li></ul><ul><li>CADENAS Y LENGUAJES </li></ul><ul><li>Alfabeto: Cualquier conjunto finito de simbolos. Ejem. El conjunto {0,1} es el alfabeto binario, El codigo ASCII es alfabeto del computador. </li></ul><ul><li>Cadena: Es una secuencia finita de simbolos tomados de ese alfabeto. </li></ul><ul><li>La longitud de una cadena s que suele escribirse |s| es el numero de apariciones de simbolos en s. </li></ul><ul><li>Una cadena vacia , representada por є , es una cadena especial de longitud 0. </li></ul>
  10. 11. CADENAS Y LENGUAJES <ul><li>Lenguaje: Es cualquier conjunto de cadenas de un alfabeto fijo. </li></ul><ul><li>Esta definicion no atribuye ningun significado a las cadenas de un lenguaje. </li></ul><ul><li>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. </li></ul><ul><li>Por ejemplo, si x = caza e y= fortunas, entonces xy = casafortunas. </li></ul><ul><li>s є = s </li></ul>
  11. 12. <ul><li>Se considera la concatenacion como un producto, la cual se define de la siguiente manera: </li></ul><ul><li>s 0 = є , </li></ul><ul><li>s 1 = s, </li></ul><ul><li>s 2 = ss, </li></ul><ul><li> s 3 = sss </li></ul>CADENAS Y LENGUAJES
  12. 13. <ul><li>Para el analizador lexico interesan principalmente la union, concatenacion y la cerradura. </li></ul>OPERACIONES APLICADA A LOS LENGUAJES
  13. 14. <ul><li>Ejemplo: </li></ul><ul><li>Sea: L el conjunto {A,B,…,Z,a,b,…,z} y D={0,1,…,9} </li></ul><ul><li>Se puede considerar L y D de la siguiente manera: </li></ul><ul><li>L como el alfabeto de letras mayusculas y minusculas </li></ul><ul><li>D como el alfabeto de los 10 digitos decimales </li></ul><ul><li>Los siguientes son ejemplos de nuevos lenguajes creados a partir de L y D. </li></ul><ul><li>L U D es el conjunto de letras y digitos </li></ul><ul><li>LD es el conjunto de cadenas que consta de una letra seguida de un digito </li></ul><ul><li>L 4 es el conjunto de todas las cadenas de cuatro letras </li></ul><ul><li>L* es el conjunto de todas las cadenas de letras, incluyendo є , la cadena vacia </li></ul><ul><li>L(L U D)* es el conjunto de todas las cadenas de letras y digitos que comienzan con una letra. </li></ul><ul><li>D* es el conjunto de todas las cadenas de uno o mas digitos. </li></ul><ul><li>L? es el conjunto de 0 o una concatenacion de L </li></ul>OPERACIONES APLICADA A LOS LENGUAJES
  14. 15. EJEMPLO <ul><li>Sea A= {A,B,…,Z} y B= {0,1,2,…,9} y </li></ul><ul><li>cad1 = HOLA cad2 = TODOS cad3=T3 </li></ul><ul><li>cad1cad2cad3= HOLATODOST3 </li></ul><ul><li>є cad1 є є cad3 є є є cad2= HOLAT3TODOS </li></ul><ul><li>Longitud = 11 </li></ul><ul><li>cad1=A 4 </li></ul><ul><li>cad2=A 5 </li></ul><ul><li>cad2=L(B) </li></ul>
  15. 16. <ul><li>Sea A= {0,1} B= {a,b,c} y C= {1,2} obtener: </li></ul><ul><li>(a)AUB = {0,1}U{a,b,c} = {0,1,a,b,c} </li></ul><ul><li>(b) (BC) U A </li></ul><ul><li>= {a,b,c} {1,2} U {0,1} </li></ul><ul><li>= {a1,a2,b1,b2,c1,c2} U {0,1} </li></ul><ul><li>= {a1,a2,b1,b2,c1,c2,0,1} </li></ul><ul><li>(c) A* </li></ul><ul><li>= {0,1}* = {0,1} 0 U {0,1} 1 U {0,1} 2 U {0,1} 3 U ... </li></ul><ul><li>= { є } U {0,1} U {0,1}{0,1} U {0,1}{0,1}{0,1} U ... </li></ul><ul><li>= { є ,0,1} U {00,01,10,11} U {000,001,010,011,100,101,110,111}U... </li></ul><ul><li> ={ є ,0,1,00,01,10,11,000,001,010,011,100,101,110,111,...} </li></ul><ul><li>(d) (B+ U C) 0 </li></ul><ul><li>= { є } </li></ul><ul><li>(e) (C? A)? </li></ul><ul><li>= ( {1,2}? {0,1} )? </li></ul><ul><li>= (( {1,2} 0 U {1,2} 1 ) {0,1} )? </li></ul><ul><li>= (( { є } U {1,2} ) {0,1} )? </li></ul><ul><li>= ( { є ,1,2} {0,1} )? </li></ul><ul><li>= {0,1,10,11,20,21}? </li></ul><ul><li>= {0,1,10,11,20,21} 0 U {0,1,10,11,20,21} 1 </li></ul><ul><li>= { є } U {0,1,10,11,20,21} </li></ul><ul><li>= { є ,0,1,10,11,20,21} </li></ul>
  16. 17. continuacion EJERCICIO
  17. 18. EJERCICIO EN CLASE <ul><li>Sea X= {c,d,e}, Y={3,4} y Z={a,b} obtener: </li></ul><ul><li>X U Y </li></ul><ul><li>(Z? X)? </li></ul><ul><li>(Z U X)+ </li></ul><ul><li>(XY) 0 </li></ul><ul><li>(XUZ?)U X 0 </li></ul><ul><li>ZY U YZ </li></ul><ul><li>(XY) U Z </li></ul><ul><li>Sean las cadenas cad1=Ana, cad2=reprobo cad3=la cad4=materia </li></ul><ul><li>1. cad1cad2= </li></ul><ul><li>2. Longitud= </li></ul><ul><li>3. cad1cad2cad3cad4= </li></ul><ul><li>4. Longitud= </li></ul><ul><li>5. є є cad3 є cad4 є є є cad1 є cad2= </li></ul>
  18. 19. EXPRESIONES REGULARES <ul><ul><li>Los tokens son cadenas de caracteres que tienen un significado. </li></ul></ul><ul><ul><li>Por ejem el Token id puede tiene un sin fin de lexemas : iCont, X, iCalinf, iNum, etc. </li></ul></ul><ul><ul><li>Las cadenas que forman parte de este lenguaje, cumple con ciertas reglas: Patron </li></ul></ul><ul><ul><li>El patron que reglamenta a un token, puede especificarse utilizando expresiones regulares. </li></ul></ul><ul><ul><li>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. </li></ul></ul>
  19. 20. <ul><li>Una expresion regular r denota a un lenguaje L(r) </li></ul><ul><li>REGLAS PARA EXPRESIONES REGULARES VALIDAS SOBRE UN ALFABETO Σ </li></ul>
  20. 21. EJEMPLO 1 <ul><li>Obtener la definicion regular para el token con las siguientes caracteristicas: </li></ul><ul><li>Numero entero par </li></ul><ul><li>El cero es considerado par. </li></ul><ul><li>Lexema: 16,7772,14444,222,418 </li></ul><ul><li>Dig ⇒ 0 |1 |2 |3 |4 |5 |6 |7 |8 |9 </li></ul><ul><li>Par ⇒ 0 |2 |4 |6 | 8 </li></ul><ul><li>NumPar ⇒ (Dig*)(Par) </li></ul>
  21. 22. EJEMPLO 1 (continuacion) <ul><li>NumPar ⇒ Dig* Par </li></ul><ul><li>Obtenemos el lenguaje de la expresión regular Dig : </li></ul><ul><li>Dig = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } </li></ul><ul><li>Usaremos la notación 0-9 para indicar 0, 1, ... , 9. </li></ul><ul><li>Calculamos ahora Dig* </li></ul><ul><li>Dig* = { 0-9 }* = { 0-9 }º U { 0-9 }¹ U { 0-9 }² U { 0-9 }³ U ... </li></ul><ul><li>= { є } U { 0-9 }¹ U { 0-9 }{ 0-9 } U { 0-9 }{ 0-9 }{ 0-9 } U ... </li></ul><ul><li>= { є , 0-9 } U { 00-99 } U { 000-999 } U ... </li></ul><ul><li>= { є , 0-9, 00-99, 000-999, ... } </li></ul><ul><li>Por último, efectuamos la concatenación </li></ul><ul><li>NumPar ⇒ Dig* Par </li></ul><ul><li>Dig* Par = { є , 0-9, 00-99, 000-999, ... } { 0, 2, 4, 6, 8 } </li></ul><ul><li>NumPar denota al lenguaje formado por las cadenas de digitos que terminan en par: 0,2,4,6,8 </li></ul>
  22. 23. EJEMPLO 2 <ul><li>Encuentre la definicion regular para el token con las siguientes categorias. </li></ul><ul><li>La cadena empiese con al menos un digito y termina en letra </li></ul><ul><li>El ultimo digito de ser par y la primera letra debe ser vocal (el cero se considera par) </li></ul><ul><li>Lexema: 764a, 6E, 111118am </li></ul><ul><li>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. </li></ul><ul><li>token = (SecDig)(SecLet) </li></ul><ul><li>L(token) = L(SecDig)L(SecLet) </li></ul>
  23. 24. EJEMPLO 2 (continuacion)
  24. 25. EJERCICIO
  25. 26. UN LENGUAJE PARA ESPECIFICACION DE ANALIZADORES LEXICOS <ul><li>Se han desarrollado algunas herramientas para construir analizadores lexicos apartir de notaciones basadas en expresiones regulares. </li></ul><ul><li>Ejem LEX muy utilizada en la especificacion de analizadores lexicos. Esa herramienta se denomina compilador Lex y la especificacion de su entrada, Lenguaje Lex </li></ul>
  26. 27. TRABAJO <ul><li>Investigar todo lo relacionado con la herramienta LEX (PCLEX). </li></ul><ul><li>- Estructura de un programa LEX </li></ul><ul><li>- Funciones y variables suministradas por PCLEX </li></ul><ul><li>- Un ejemplo, </li></ul><ul><li>- Etc. </li></ul><ul><li>Investigar un Analizador Lexico (SCANNER) </li></ul><ul><li>Es trabajo es para entregar para el lunes 27 de septiembre. NO SE RECIBIRAN TRABAJOS DESPUES DE ESTA FECHA. </li></ul>
  27. 28. GRAFOS <ul><li>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. </li></ul><ul><li>Un vértice puede tener cero o más aristas, pero toda arista debe unir exactamente a dos vértices. </li></ul>
  28. 29. <ul><li>Arista :  Son las líneas con las que se unen los nodos de un grafo y con la que se construyen también caminos. </li></ul><ul><li>Si la arista carece de dirección se denota indistintamente ( a, b)  o ( b, a) ,  siendo  a  y  b  los vértices que une. </li></ul><ul><li>Si ( a ,b)  es una arista, a los vértices  a  y  b  se les llama sus  extremos . </li></ul><ul><li>Aristas Adyacentes:  Se dice que dos aristas son adyacentes si convergen en el mismo vértice. </li></ul><ul><li>Aristas Paralelas:  Se dice que dos aristas son paralelas si el vértice inicial y el final son el mismo. </li></ul><ul><li>Aristas Cíclicas:  Arista que parte de un vértice para entrar en el mismo. </li></ul><ul><li>Vértice :  Son los puntos o nodos con los que esta conformado un grafo. </li></ul><ul><li>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. </li></ul><ul><li>•   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 . </li></ul><ul><li>•   Vértice Aislado:  Es un vértice de grado cero. </li></ul><ul><li>•   Vértice Terminal:  Es un vértice de grado  1 . </li></ul>
  29. 30. CLASIFICACION DE GRAFOS <ul><li>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. </li></ul><ul><li>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. </li></ul>
  30. 31. <ul><li>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 : </li></ul><ul><li>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: </li></ul>
  31. 32. 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
  32. 33. <ul><li>En la siguiente figura se muestra un grafo de transiciones de un AFN que reconoce: </li></ul><ul><li>Al lenguaje (a |b)*abb que es el conjunto de todas las cadenas de caracteres de a y b que terminen en abb. </li></ul><ul><li>Conjunto de estados del AFN es {0,1,2,3,} </li></ul><ul><li>El alfabeto de simbolos de entrada es {a,b} </li></ul><ul><li>El estado 0 es el estado de inicio </li></ul><ul><li>El estado de aceptacion 3 esta indicado mendiante un circulo doble. </li></ul>
  33. 34. Tabla de transiciones

×