Procesadores de lenguaje Tema 2 – Anlisis l© .Ejemplos 0(0|1)0*: 010, 000, 010000, 01, etc

  • View
    214

  • Download
    0

Embed Size (px)

Text of Procesadores de lenguaje Tema 2 – Anlisis l© .Ejemplos 0(0|1)0*: 010, 000,...

  • 1

    Procesadores de lenguajeTema 2 Anlisis lxico

    Salvador Snchez, Daniel Rodrguez

    Departamento de Ciencias de la Computacin

    Universidad de Alcal de Henares

    Procesadores de lenguaje Tema 2: Anlisis lxicoSalvador Snchez, Daniel Rodrguez

    Resumen del tema

    Objetivo: comprender la estructura, organizacin y funcionamiento general del analizador lxico.

    Contenidos: Formalismos de especificacin lxica:

    Expresiones regulares

    Autmatas finitos

    Tratamiento de errores lxicos y palabras reservadas

    Construccin de un analizador lxico

    Generadores automticos de analizadores lxicos

    Procesadores de lenguaje Tema 2: Anlisis lxicoSalvador Snchez, Daniel Rodrguez

    Descripcin de un analizador lxico

    Un analizador lxico lee carcter a carcter del programa fuente y genera una secuencia de componentes lxicos (tokens) que corresponden a unos patrones a los que asocia, si es necesario, unos atributos.

    __________

    __________

    __________

    __________

    __________

    Programa fuente

  • 2

    Procesadores de lenguaje Tema 2: Anlisis lxicoSalvador Snchez, Daniel Rodrguez

    Tareas Analizador Lxico

    Reconocer los componentes lxicos en la entrada.

    Eliminar los espacios en blanco, los caracteres de tabulacin, los saltos de lnea y de pgina y otroscaracteres propios del dispositivo de entrada.

    Eliminar los comentarios de entrada.

    Detectar errores lxicos.

    En lenguajes de programacin, adems: Reconocer los identificadores de variable, tipo, constantes, etc. y

    guardarlos en la tabla de smbolos.

    Relacionar los mensajes de error del compilador con el lugar en el queaparecen en el programa fuente (lnea, columna, etc.).

    Procesadores de lenguaje Tema 2: Anlisis lxicoSalvador Snchez, Daniel Rodrguez

    Necesidad de un analizador lxico

    Al comparar las expresiones

    a:=b*7+4;

    a:=b*7+4;

    La estructura de las dos expresiones es equivalente,

    La posicin de los caracteres que las componen, aunque siguen el mismo orden, son diferentes.

    Si las distintas fases del compilador tuvieran que trabajar con los caracteres directamente sera ms complicado descubrir la estructura de un programa.

    Procesadores de lenguaje Tema 2: Anlisis lxicoSalvador Snchez, Daniel Rodrguez

    Independencia de lxico y sintctico

    El analizador lxico suele convertirse en una subrutinadel analizador sintctico.

    Varias razones para su independencia:- Se simplifica el diseo del analizador sintctico.

    - Se consigue un compilador ms eficiente

    - Un sistema de entrada optimizado aumenta la velocidad de lectura.

    - Aade portabilidad al compilador: independencia del alfabeto.

    Se comunican mediante: Buffer intermedio.

    Llamada a subrutina.

  • 3

    Procesadores de lenguaje Tema 2: Anlisis lxicoSalvador Snchez, Daniel Rodrguez

    Conceptos bsicos

    Token (o componente lxico): Secuencia de caracteres con significado sintctico propio.

    Lexema: Secuencia de caracteres cuya estructura se corresponde con el patrn de un token.

    Patrn: Regla que describe los lexemas correspondientes a un token.

    Procesadores de lenguaje Tema 2: Anlisis lxicoSalvador Snchez, Daniel Rodrguez

    Componentes lxicos

    En la mayora de los lenguajes de programacin, se consideran componentes lxicos (tokens):

    palabras reservadas

    operadores (de comparacin, asignacin, lgicos, aritmticos )

    identificadores

    constantes

    signos de puntuacin (parntesis, punto y coma )

    marcas de comienzo y fin de bloque

    Los delimitadores no sern considerados, en general, tokens.

    Cuando un patrn puede concordar con ms de un lexema es

    necesario conocer informacin adicional:

    Esta informacin se almacena como atributos del token.

    Procesadores de lenguaje Tema 2: Anlisis lxicoSalvador Snchez, Daniel Rodrguez

    Descripcin de un analizador lxico

    El anlisis lxico es un anlisis de los caracteres Parte de stos y por medio de patrones reconoce los lexemas

    Enva al analizador sintctico el componente lxico y sus atributos

    Puede hacer tareas adicionales: eliminar blancos, control lneas

  • 4

    Procesadores de lenguaje Tema 2: Anlisis lxicoSalvador Snchez, Daniel Rodrguez

    El analizador lxico como interfaz

    El analizador lxico y el sintctico forman un par productor-consumidor.

    En algunas situaciones, el analizador lxico tiene que leer algunos caracteres por adelantado para decidir de qutoken se trata.

    Entrada Analizador

    lxico

    Analizador

    sintctico

    Lee carcter

    Reinserta

    carcter

    token

    Procesadores de lenguaje Tema 2: Anlisis lxicoSalvador Snchez, Daniel Rodrguez

    Ejemplo

    Para la sentencia en Pascal:

    IF x < 10 THEN x := x + y

    El analizador lexicogrfico dara como resultado inicialmente la siguiente cadena de caracteres:

    O lo que es lo mismo:

    if identificador op_menor literal_entero then identificador

    asignacin identificador op_suma identificador

    Procesadores de lenguaje Tema 2: Anlisis lxicoSalvador Snchez, Daniel Rodrguez

    Ejemplo

    El resultado final sera:

    Es decir:

  • 5

    Procesadores de lenguaje Tema 2: Anlisis lxicoSalvador Snchez, Daniel Rodrguez

    Atributos

    Los identificadores tienen asociados como atributos el lugar de la tabla de smbolos donde se han guardado:

    < identificador, 32 >

    A veces el analizador sintctico es el nico que maneja la tabla de

    smbolos, en ese caso llevan asociado el propio lexema:

    < identificador, x >

    Los literales tienen asociados como atributos el propio lexema:

    < literal_entero, 10 >

    Procesadores de lenguaje Tema 2: Anlisis lxicoSalvador Snchez, Daniel Rodrguez

    Errores lxicos

    El analizador lxico rechaza texto con caracteres ilegales (no recogidos en el alfabeto) o combinaciones ilegales. Ejemplos:

    , (caracteres que no pertenecen al alfabeto del lenguaje)

    :=, ::: (no coinciden con ningn patrn de los tokens posibles)

    Se debe mostrar un mensaje de error claro y exacto.

    En vez de

    Error 124

    Falta declaracin

    Error en la lnea 85

    Se ha producido un error

    Sera mejor

    int nmero = 1 ;

    ^

    ERROR 124: lnea 85, columna 6, carcter no vlido

    Procesadores de lenguaje Tema 2: Anlisis lxicoSalvador Snchez, Daniel Rodrguez

    Recuperacin de Errores lxicos

    Posibles acciones del analizador lxico para detectar errores, recuperarse y seguir trabajando:

    Modo de pnico: Ignorar los caracteres no vlidos hasta un carcter en

    el cual se considera que podra empezar un lexema correcto.

    Distancia mnima de correccin de un error, i.e., recuperacin inteligente con correcciones como:

    Borrar los caracteres extraos.

    Insertar un carcter que pudiera faltar.

    Reemplazar un carcter incorrecto por uno correcto.

    Conmutar las posiciones de dos caracteres adyacentes.

  • 6

    Procesadores de lenguaje Tema 2: Anlisis lxicoSalvador Snchez, Daniel Rodrguez

    Especificacin de componentes lxicos

    Alfabeto: Conjunto finito de smbolos.

    Cadena sobre un alfabeto: secuencia finita de smbolos de ese alfabeto.

    Cadena vaca:

    Operaciones con cadenas: concatenacin y exponenciacin

    Lenguaje: conjunto de cadenas sobre un alfabeto. Operaciones con lenguajes: Unin, Concatenacin, Cerradura de

    Kleene (Cierre *) y Cerradura positiva (Cierre +)

    Procesadores de lenguaje Tema 2: Anlisis lxicoSalvador Snchez, Daniel Rodrguez

    Expresiones regulares

    Notacin que facilita la especificacin de lenguajes.

    : cadena vaca

    a: cadena a si a alfabeto.

    Si r y s son cadenas que pertenecen respectivamente a los lenguajes

    L(r) y L(s), son expresiones regulares:

    r|s L(r) U L(s)

    rs L(r)L(s)

    r* (L(r))*

    Abreviaturas:

    0 ms a*

    1 ms aa* a+

    0 1 | a a?

    clases de caracteres a | b | c [abc] . Tambin: a | b | c | ... | z [a-z]

    Los parntesis agrupan subexpresiones: (a|b|c)*

    Procesadores de lenguaje Tema 2: Anlisis lxicoSalvador Snchez, Daniel Rodrguez

    Ejemplos

    0(0|1)0*: 010, 000, 010000, 01, etc.

    a(ab)+b*: aab, aababb, aabbbbb, aababababbb, etc.

    [1-9]?0 : 0, 10, 20, 30,..., 90

    [a-zA-Z]

    [0-9]+

    [a-zA-Z]([a-zA-Z]|[0-9])*

    [0-9]+(.[0-9]+)?

  • 7

    Procesadores de lenguaje Tema 2: Anlisis lxicoSalvador Snchez, Daniel Rodrguez

    Definiciones regulares

    Nombre que se da a una expresin regular por

    conveniencia, definindola como si fuera un smbolo:

    Letra [a-zA-Z]

    Dgito 0|1|2|3|4|5|6|7|8|9

    Identificador Letra(Letra|Digito)*

    NmeroReal Digito+(.Digito+)?

    Procesadores de lenguaje Tema 2: Anlisis lxicoSalvador Snchez, Daniel Rodrguez

    Definiciones regulares

    Dgito [0-9]

    Dgitos Digito+

    Fraccin (.Dgitos)?

    Exponente (E(+|-)?Dgitos)?

    NmeroReal Dgitos Fraccin Exponente

    Procesadores de lenguaje Tema 2: Anlisis lxicoSalvador Snchez, Daniel Rodrguez

    Diagramas de transiciones

    Compuestos por estados y transiciones entre stos Crculos: estados

    Arcos etiquetados: transiciones

    Sirven para representar lo que sucede a medida que se toman caracteres de la entrada

    Cada crculo = un estado

    Cada arista = un carcter en la entrada

    Doble crculo = aceptacin de un elemento lxico

    Asterisco = el ltimo carcter se debe devolver a la entrada (retroceso)

    Otro = cualquier carcter no asignado a otra flecha

    No tiene estados de err