Claselexico

2,983 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
2,983
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
86
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Claselexico

  1. 1. Análisis Léxico
  2. 2. Introducción• "Una forma sencilla de crear un analizador léxico consiste en la construcción de un diagrama que ilustren la estructura de los componentes léxicos del lenguaje fuente, y después hacer la traducción "a mano" del diagrama a un programa para encontrar los componente léxicos."
  3. 3. Función del analizador léxico• El análisis léxico o lineal (scanner), reconoce y clasifica todas las “palabras”, componentes léxicos o tokens de un código fuente.• El analizador léxico lee el código fuente caracter a caracter y vá armando uno a uno los componentes léxicos que después entregará al analizador sintáctico, cada que este le de la orden de enviarle el siguiente token.• El analizador léxico puede hacer tareas secundarias como: eliminar comentarios y espacios en blanco y relacionar los mensajes de error.2 de diciembre de 2012
  4. 4. Función del analizador léxico
  5. 5. Componentes léxicos, patrones y lexemas • Estos tres nombres tienen significado específico en análisis sintáctico. • En general hay un conjunto de cadenas de entrada para el cual se produce como salida el mismo componente léxico. • Este conjunto de cadenas se construye mediante una regla llamada patrón asociado al componente léxico.
  6. 6. Estructura de un Compilador
  7. 7. Análisis Léxico• ¿ Qué queremos hacer? Ejemplo: If (i == j) z=0; else z=1;• La entrada es sólo una secuencia de caracteres: tif(i==j)nttz=0;ntelsenttz=1;Meta: Partir la cadena de entrada en subcadenas y clasificar las subcadenas de acuerdo a su role
  8. 8. ¿Qué es un token?• La salida del analizador léxico es un conjunto de tokens.• Un token es una categoría sintáctica – En Español: • Nombres, verbos, adjetivos, … – En un lenguaje de programación • Identificadores, Enteros, palabras reservadas, espacios en blanco, …• La siguiente etapa, toma los tokens. – Ejem. Los identificadores se tratan diferente que las palabras reservadas.
  9. 9. Tokens• Los token corresponden a conjuntos de cadenas.• Identificadores:cadenas de letras o dígitos que comienzan con una letra.• Enteros: una cadena de dígitos.• Palabras reservadas: else, if, begin, …• Espacios en blanco: una secuencia de espacios, nuevas líneas, tabuladores.• Open par: un paréntesis izquierdo.
  10. 10. Implementación del analizador léxico• Una implementación debe hacer dos cosas: – Reconocer las subcadenas que corresponden a tokens. – Regresar el valor o lexema de un token • El lexema es la subcadena.
  11. 11. Ejemplo• Recordar: tif(i==j)nttz=0; ntelsenttz=1:• El par Token-lexema que regresa el analizador léxico: – (Espacio en blanco, ¨t¨ ) – (Palabra reservada, ¨if¨) – (Parentesis abre, ¨(¨) – (Identificador, ¨i¨) – (Relación, ¨==¨) – (Identificador, ¨j¨), etc – …
  12. 12. Implementación del analizador léxico• El A. Léxico por lo regular descarta tokens que no son "importantes" tokens que no contribuyen a generar el árbol.• Ejemplos: Espacios en blanco, comentarios.• Pregunta: ¿Qué pasa si quitamos todos los espacios en blanco y comentarios antes de realizar el análisis léxico?
  13. 13. Mirar por adelantado• Dos puntos importantes: – La meta final es particionar la cadena. Esto se implementa leyendo la cadena de izquierda a derecha, reconociendo un token a la vez. – Mirar por adelantado algunas veces se requiere para decidir donde finaliza un token y donde comienza el último token. i vs if = vs ==
  14. 14. Además• Necesitamos – Una forma de describir los lexemas de cada token. – Una forma de resolver ambigüedades • ¿If describe dos variables? • ¿ == representa dos símbolos = y = ?
  15. 15. Lenguajes Regulares• Existen diferentes formalismos para especificar tokens.• Los lenguajes regulares son los más populares. – Teoría simple y útil – Fácil de entender – Implementaciones eficientes.
  16. 16. Lenguaje• Def. Sea ∑un conjunto de caracteres. Un lenguaje sobre ∑ es un conjunto de cadenas tomadas desde ∑. • (∑ se conoce como el alfabeto)
  17. 17. Ejemplo de lenguajes• Alfabeto = Caracteres • Alfabeto = ASCII del idioma inglés • Lenguaje = programas en C• Lenguaje = sentencias en inglés. • Nota. El conjunto de caracteres ASCII es• No todas las cadenas diferente que el en el alfabeto inglés conjunto de forman sentencias. caracteres inglés.
  18. 18. Componentes léxicos Identificadores Lenguaje Patrón EjemplosC, Pascal, Java, Inician con letra y pueden X1, r_23C# y casi todos ir seguidos de letras,los lenguajes dígitos o carácter subrayadoPHP Inician con $ y van $x, $_POST seguidos de letras o dígitosProlog Inician con letra, seguidas Nombre de létras o dígitos o _. primo(X) Mayúsculas nombre de variable Minúsculas nombre de predicado
  19. 19. Componentes léxicos Literales Numéricos Enteros, reales, reales con notación científica. Lenguaje Patrón EjemplosTodos Enteros: Inician con signo opcional y va seguido de -1223 uno o más dígitos 99882 Reales: Inician con signo opcional y van seguido de 12.323 uno o más dígitos y opcional seguido de un punto y uno o más dígitos. -44.53421 Reales con notación científica: Inicia con signo -32.3e-19 opcional, y van seguidos de uno o más dígitos, seguido de punto “.”, seguido de uno o más dígitos, 7.4e+12 seguido de “E” seguido del signo + ó – opcional y -9.1e10 seguido de uno o más dígitos.Smalltalk, Scheme otros Fraccion: inicia por signo o no, seguido de uno o 43/28 más dígitos, seguido del slash “/” seguido de uno o más dígitos 2/78 -12/43
  20. 20. Componentes léxicos Literales Caracter Lenguaje Patrón Ejemplos C, java, C#, Un símbolo del alfabeto ‘a’ ‘n’ prolog, y encerrado entre comillas ‘Z’ otros sencillas ‘. Algunos caracteres especiales usan el símbolo ‘b’ ‘t’ backslash Pascal Un símbolo del alfabeto “a” “z” encerrado entre comillas dobles “b” “. Smalltalk Un símbolo del alfabeto $a $$ precedido por el signo $ $b Scheme Cualquier símbolo del alfabeto #a precedido por los símbolos # #b2 de diciembre de 2012
  21. 21. Componentes léxicos Literales CadenaLenguaje Patrón EjemplosC, java, Cualquier conjunto de cero “Hola”C#, o más símbolos del alfabeto encerrados entre comillas “Mundo”prolog, dobles “. Prolog permite “Adios Mundo”scheme y cualquier conjunto deotros símbolos que no contengan espacios e inicien por letra minúscula.a Cualquier conjunto de cero ‘Hola Mundo’ o más símbolos del alfabeto encerrados entre comillas sencillas ‘.
  22. 22. Componentes léxicos Literales Booleanos Lenguaje Patrón EjemplosJava, pascal, Constante verdadera: true true, falsesmalltalk, Constante falsa: falsevisual basic En smalltalk, en realidad son objetosScheme Constante verdadera: #t #t, #f, () Constante false: #f ó ()Lenguajes como C no tienen literales booleanas
  23. 23. Componentes léxicos Operadores Matemáticos Lenguaje Patrón EjemplosCasi todos los Suma +, Resta -, multiplicaciónlenguajes *, División /C, java Incremento ++, Decremento --; Modulo % No tiene operador de división enteraPascal Modulo MOD, División entera DIVVisual Basic Potenciación ^ División Entera
  24. 24. Componentes léxicos Operadores Relacionales Lenguaje Patrón EjemplosCasi todos los Mayor que (>), Mayor o igual >, <, >=, <=lenguajes (>=), menor que (<), menor o igual (<=)C, java Diferente !=, igual ==Pascal, prolog, Igual en pascal, prolog y scheme =, diferente ensmalltalk pascal y prolog <>. En scheme es una función.Smalltalk y scheme, no tienen operador para diferente,
  25. 25. Componentes léxicos Operadores Booleanos Lenguaje Patrón EjemplosC, Java And && ó &, Or || ó |, not !Pascal And AND Or OR not NOTLenguajes como prolog, scheme y smalltalk no tienenoperadores relacionales, sino métodos o funciones para esto
  26. 26. Componentes léxicos Operador de Asignación Lenguaje Patrón EjemplosC, java, visual = a=10;Basic, C#Pascal, smalltalk := A:=10;Prolog no tiene operador de asignación, pero tiene unoperador similar que es :-.Scheme no tiene operadores de asignación
  27. 27. Componentes léxicos Operador de Concatenación Lenguaje Patrón EjemplosJava, C# + a=“Hola “; b=“Mundo”; printf(“%s”,a+b);Pascal, C , coma a=‘Hola ‘; b=‘Mundo’; write(a,b);Visual Basic & a=“Hola “ b=“Mundo” Print a & bPHP . punto
  28. 28. Componentes léxicos Separadores. , ; .. ( ) { } [ ] : =
  29. 29. Componentes léxicos Espacios en Blanco Lenguaje Patrón EjemplosEn casi todos los lenguajes comprenden caracteres de Barraespaciadora, Nueva línea, retorno de carro y tabuladorC, java Nueva línea n Retorno de carro f Tabulador tVisual Basic Nueva Linea VBCROtros lenguajes utilizan funciones como char(Ascii) de pascalque imprime el carácter de acuerdo con el codigo Asciiingresado
  30. 30. Componentes léxicos Comentarios Existen comentarios de línea y de Bloque Lenguaje Patrón EjemplosC, java, muchos Línea //lenguajes Bloque /* */ /** */Pascal Bloque { } ó (* *)Prolog Línea % Bloque /* */Visual Basic Línea ‘Smalltalk Bloque “ “Scheme Línea ;
  31. 31. Notacion• Los lenguajes son conjuntos de cadenas.• Necesitamos alguna notación para especificar los conjuntos que necesitamos.• Para el análisis léxico nos interesan los lenguajes regulares, que se pueden describir empleando expresiones regulares.
  32. 32. Expresiones regulares y lenguajes regulares• Cada expresión regular representa una notación para un lenguaje regular (un conjunto de palabras).• Si A es una expresión regular entonces escribimos L(A) para referirnos al lenguaje denotado por A Elaboró: Dr. José Raymundo Marcial Romero
  33. 33. Expresiones Regulares
  34. 34. Expresiones Regulares (ER) => Especificación léxica1. Seleccionar un conjunto de tokens – Número, palabras reservadas, identificadores, …1. Escribir una ER para los lexemas de cada token – Números = digitos* – Palabras reservadas = ´if´ | ´then´ | ´else´ | … – Identificadores = letras (letras | digitos)* – Parentesis que abre = ´(´ – …
  35. 35. Resumen• Las expresiones regulares proveen una forma concisa para detectar cadenas.• Su uso en analizadores léxicos requiere pequeñas extensiones. – Para resolver ambigüedades – Para manejar errores
  36. 36. Autómata finito• Expresión Regular = Especificación.• Autómata finito = implementación.• Un autómata finito consiste de: – Un alfabeto de entrada Σ – Un conjunto de estados S – Un estado inicial n – Un conjunto de estados de aceptación F⊆S – Un conjunto de transiciones estado→estado
  37. 37. Autómata finito• Transición s1 →a s2• Se lee – En el estado s1 teniendo como entrada a "a" moverse al estado s2• Estando al final de la entrada – Si el estado es de aceptación => aceptar, de otra forma => rechazar – Si no existe transición con símbolo "a" => rechazar
  38. 38. Grafos de los estados de un Autómata finito• Un estado• Estado de inicio• Estado de aceptación a• Una transición
  39. 39. Ejemplo• Un autómata finito que acepte ¨1¨ 1Un autómata finito acepta una cadena si podemosseguir las etiquetas de los arcos con los caracteresde la cadena desde el estado de inicio hasta unestado de aceptación
  40. 40. Otro Ejemplo• Un autómata finito que acepta cualquier cantidad de 1´s seguido de un 0.• Alfabeto: 0,1 1 0 Verificar que ¨1110¨ es aceptada pero no ¨111¨
  41. 41. Otro ejemplo• Alfabeto {0,1} La operación del autómata no esta completamente definida por la entrada. En la entrada ¨11¨ el autómata puede estar en cualquier estado
  42. 42. Movimientos λ• Otra clase de transición: movimientos λ λ La máquina se puede mover del estado A al estado B sin leer símbolos de entrada.
  43. 43. Autómatas deterministas y No deterministas• Autómatas Finitos Deterministas (AFD) – Una transición por entrada y por estado. – No hay movimientos λ.• Autómatas Finitos No deterministas (AFN). – Puede tener más de una transición por entrada y por estado. – Puede tener movimientos λ.• Autómata finito tiene memoria finita. – Necesita sólo codificar el estado actual.

×