• Like
  • Save
Cap5
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Published

 

Published in Education , Technology , Business
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • asdasd
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
3,056
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
1
Likes
6

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Análisis Léxico
    Capítulo 5
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.
    1
  • 2. Analizador de Léxico
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.
    2
    ¿Quéhacemos en procesamiento de lenguaje natural?
    Primero “tokenizamos”
    Ejemplo:
    Holacomoestantodos
    Se convierte en:
    Holacomoestantodos
    Ejemplos de Tokens:
    Operadores:
    =, +, -, >, (, {, :=, ==, <>, etc.
    Keywords:
    if., while, for, int, double, etc.
    Literalesnuméricos:
    43 6.035 -3.6e10 0x13f3a
    Literales de caracter:
    'a' '~' '''
    Strings literales :
    "6.983"
    "compiladores" """"
    Ejemplos de no-tokens
    Espacios en blanco:
    espacio(' ') tab(' ') eol(' ')
    Comentarios:
    /* este no es un token */
    Programa fuente->Tokens
    Tokens
    “Tokenizar”: separar, organizar.
  • 3. Analizador Léxico
    Los analizadores de léxicodeben:
    Particionar el texto del programa de entrada en unasubsecuencia de caracterescorrespondientes a tokens.
    Adjuntarleslosatributoscorrespondientes a los tokens.
    Eliminarespacios en blanco y comentarios.
    Separarprecisamente el stream de texto en el stream correcto de tokens:
    ID("var1") NO ID("var") Num(1)
    ID("var1") leq_opNO ID("var1<=")
    3
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.
  • 4. El Papel del Analizador Léxico
    La función primordial es agrupar caracteres de la entrada en tokens.
    Estos tokens son suministrados (“bajo demanda”) al analizador sintáctico.
    4
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.
  • 5. El Papel del Analizador Léxico
    prog: cabecera bloque ‘.’
    cabecera: tkPROGtkID
    cabecera: tkPROGtkIDlistaParsProg
    listaParsProg: ‘(‘listaID ‘)’listaID: listaID ‘,’ID
    listaID: ID
    ....
    5
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.
    El papel del A. Léxico es “tokenizar”
  • 6. El Papel del Analizador Léxico
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.
    6
    Además:
    Procesar directivas al compilador.
    Introducir información preliminar en la tabla de símbolos.
    Eliminar separadores innecesarios (cuando no lo ha hecho un preprocesador).
    Sustituir macros.
    Formatear y listar el fuente.
    A, veces cuando el lenguaje es sintácticamente complejo, dos fases:
    Fase de examen.
    Fase de análisis (propiamente dicho).
    Los tokens se pasan como valores “simples”.
    Algunos tokens requieren algo más que su propia identificación:
    Constantes: su valor.
    Identificadores: el string.
    Operadores relacionales: su identificación
    Etc.
    Por lo tanto, el scanner debe realizar, a veces, una doble función:
    Identificar el token.
    Evaluar el token.
  • 7. Lexema del Componente
    La fase de análisis léxico lee los caracteres de un programa fuente y los agrupa en una cadena de componentes léxicos en los que cada componente representa una secuencia lógicamente coherente de caracteres, como un identificador, una palabra clave (if, while, etc), un caracter de puntuación, o un operador de varios caracteres, como “:=“.
    La secuencia de caracteres que forman un componente léxico se denomina lexema del componente.
    A ciertos componentes léxicos se les agregará un “valor léxico”.
    Así, cuando se encuentra un identificador como velocidad, el analizador léxico no sólo genera un componente léxico, por ejemplo “ID”, sino que también introduce el lexema velocidad en la tabla de símbolos, si aún no estaba allí.
    El valor léxico asociado con esta aparición de ID señala la entrada de la tabla de símbolos correspondiente a velocidad.
    Usaremos id1 , id2 e id3 para posición, inicial y velocidad, respectivamente, para enfatizar que la representación interna de un identificador es diferente de la secuencia de caracteres que forman el identificador.
    Por tanto, la representación de:
    Posición := inicial + velocidad * 60
    después del análisis léxico queda sugerida por:
    id1 := id2 + id3 * 60
    Se deberían construir componentes para el operador de varios caracteres “:=“ y el número 60, para reflejar su representación interna.
    7
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.
  • 8. El Papel del Analizador Léxico
    Esquema de procesamiento:
    8
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.
  • 9. if Plazo >= 30
    then Tasa := Base + Recargo / 100
    else Tasa := Base
    [if][Plazo][>=][30]
    [then][Tasa][:=][Base][+][Recargo] [/][100]
    [else][Tasa][:=][Base]
    [59][Plazo][>=][30]
    [then][Tasa][:=][Base][+][Recargo][/][100]
    [else][Tasa][:=][Base]
    [59][27][>=][30]
    [then][Tasa][:=][Base][+][Recargo][/][100]
    [else][Tasa][:=][Base]
    [59][27][80][30]
    [then][Tasa][:=][Base][+][Recargo][/][100]
    [else][Tasa][:=][Base]
    [59][27][80][28]
    [then][Tasa][:=][Base][+][Recargo][/][100]
    [else][Tasa][:=][Base]
    [59][27][80][28]
    [60][27][85][27][70][27][73][28]
    [61][27][85][27]
    [59][27, ‘Plazo’][80][28, ‘30’]
    [60][27, ‘Tasa’][85][27, ‘Base’][70][27,’Recargo’][73][28, ‘100’]
    [61][27,’Tasa’][85][27,‘Base’]
    [59][27][80][28][60][27][85][27][70][27]
    [73][28] [61][27][85][27]
    IF ID >= CTE THEN ID := ID + ID/ CTEELSE ID := ID
    Ejemplo de Análisis Léxico
    9
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.
  • 10. Tokens, Lexemas y Patrones Léxicos
    Definiciones:
    10
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.
  • 11. Tokens, Lexemas y Patrones Léxicos
    Además
    Un token se corresponde con un patrón.
    Un token se puede corresponder con muchos lexemas.
    Ejemplo: Identificadores.
    11
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.
  • 12. Tokens, Lexemas y Patrones Léxicos
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.
    12
    Tokens más habituales:
    Palabras reservadas.
    Identificadores.
    Operadores.
    Constantes.
    Símbolos de puntuación: ; , . :
    Símbolos especiales: ( ) [ ]
    Pero, a la vez que el propio token, el scanner puede (debe) devolver más información.
    Si es un token CONSTANTE, su valor.
    Si es un identificador, el string correspondiente.
    Si es un símbolo de puntuación, cuál.
    Esta información, se devuelve mediante “atributos”.
    Pero aún puede hacer algo más:
    Puede detectar algunos (pocos) errores léxicos.
    No hay concordancia con ningún patrón.
    Puede llevar a cabo algunas recuperaciones de errores.
    Filtrado de caracteres “extraños”.
    Completar algún patrón.
    Reemplazar algún caracter.
  • 13. Tokens
    Un token representa una secuencia de caracteres que forman una unidad significativa.
    Por ejemplo:
    En Pascal un token es la palabra reservada BEGIN.
    En C: WHILE, etc.
    Hay dos tipos de tokens:
    Tiras específicas, tales como palabras reservadas (if, while, begin, etc.), el punto y coma, la asignación, los operadores aritméticos o lógicos, etc.
    Las tiras específicas sólo tienen tipo (lo que representan),
    Tiras no específicas, como identificadores, constantes o etiquetas.
    Las tiras no específicas tienen tipo y valor.
    Se considera que un token tiene dos partes componentes:
    El tipo de token.
    Su valor.
    Por ejemplo, si “Contador” es un identificador, el tipo de token será identificador y su valor será la cadena “Contador”.
    13
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.
  • 14. Proceso de Construcción
    Con ayuda de herramientas:
    ci: caracter
    ti: token
    Ii : información asociada a ti
    14
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.
  • 15. ¿Cómo es el Scanner?
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.
    15
    ¿Qué pinta tiene un scanner?
    Un conjunto de funciones.
    Una para cada símbolo a reconocer.
    Estas funciones son controladas/invocadas por una función que:
    Selecciona, en función de los caracteres de entrada, qué función invocar.
    Opcionalmente, también mediante tablas.
    Pero puede ser complicado:
    Necesidad de recorrer varios caracteres antes de decidir el tipo de token.
    “pre-análisis”ó“look-ahead”.
    Ejemplo: reconocido “<“en C, puede corresponder a:
    MENOR“<“
    MENOR_O_IGUAL“<=“
    SHIFT_LEFT“<<“
    “IF”vs. “IFNI”
  • 16. Expresiones Regulares: Definiciones
    16
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.
  • 17. Expresiones Regulares: Definiciones
    17
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.
  • 18. Expresiones Regulares: Definiciones
    Operadores sobre lenguajes:
    Sean L,M dos lenguajes:
    18
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.
  • 19. Expresiones Regulares: Definiciones
    Para un token dado, los lexemas correspondientes los expresaremos mediante expresiones regulares.
    Expresión regular: forma compacta para definir un lenguaje regular.
    También llamado conjunto regular.
    Una expresión regular r:
    Será definida a partir del lenguaje L(r) que genera.
    19
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.
  • 20. Autómatas Finitos
    Ya sabemos expresar los lexemas correspondientes a los tokens.
    Necesitamos implementar el analizador léxico.
    Esquema para su implementación:
    20
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.
  • 21. Autómatas Finitos
    Los autómatas finitos pueden ser utilizados para reconocer los lenguajes expresados mediante expresiones regulares.
    Un autómata finito (AF) es una máquina abstracta que reconoce strings correspondientes a un conjunto regular.
    También se denominan reconocedores.
    Misión de un AF:
    “reconocer”si un string de entrada respeta las reglas determinadas por una expresión regular.
    21
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.
  • 22. Autómatas Finitos
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.
    22
    Un AFND o autómata finito no determinista es aquel que presenta cero, una o más transiciones por el mismo carácter del alfabeto.
    Dado un string, debe determinar si lo acepta o no.
    La idea básica es que un estado del AFD agrupa un conjunto de estados del AFN, por lo que del AFN se pasa en particular al AFD.
    Un AFD o autómata finito determinista es aquel autómata finito cuyo estado de llegada está unívocamente determinado por el estado inicial y el carácter leído por el autómata.
    Para generar el mejor resultado, el siguiente paso es minimizarlo para implementarlo.
    No Determinista
    Determinista
  • 23. Autómatas Finitos
    Algunas cuestiones:
    Como es lógico, cuantos más estados tiene un AF, más memoria es necesaria.
    El número de estados del AFD se puede/debe minimizar.
    Inicialmente, dos estados:
    Uno con los de aceptación.
    Otro con los demás.
    Sucesivas particiones de estados “globales”que no concuerdan con algún sucesor para un símbolo de entrada.
    El AFD mínimo equivalente es único.
    AFN son mejores en espacio.
    Tener en cuenta que en su AFD, cada estado del AFN se puede “almacenar”varias veces.
    AFD son mejores en cuanto a velocidad de reconocimiento.
    23
    Materia: Compiladores
    Docente: Ing. Carlos J. Archondo O.