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

Cap5

on

  • 3,713 views

 

Statistics

Views

Total Views
3,713
Views on SlideShare
3,669
Embed Views
44

Actions

Likes
6
Downloads
0
Comments
1

2 Embeds 44

http://sinapsis2.sinapsisbolivia.org 38
http://www.slideshare.net 6

Accessibility

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • asdasd
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Cap5 Cap5 Presentation Transcript

    • Análisis Léxico
      Capítulo 5
      Materia: Compiladores
      Docente: Ing. Carlos J. Archondo O.
      1
    • 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.
    • 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.
    • 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.
    • 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”
    • 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.
    • 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.
    • El Papel del Analizador Léxico
      Esquema de procesamiento:
      8
      Materia: Compiladores
      Docente: Ing. Carlos J. Archondo O.
    • 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.
    • Tokens, Lexemas y Patrones Léxicos
      Definiciones:
      10
      Materia: Compiladores
      Docente: Ing. Carlos J. Archondo O.
    • 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.
    • 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.
    • 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.
    • 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.
    • ¿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”
    • Expresiones Regulares: Definiciones
      16
      Materia: Compiladores
      Docente: Ing. Carlos J. Archondo O.
    • Expresiones Regulares: Definiciones
      17
      Materia: Compiladores
      Docente: Ing. Carlos J. Archondo O.
    • Expresiones Regulares: Definiciones
      Operadores sobre lenguajes:
      Sean L,M dos lenguajes:
      18
      Materia: Compiladores
      Docente: Ing. Carlos J. Archondo O.
    • 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.
    • 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.
    • 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.
    • 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
    • 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.