UNIDAD II.-Analizador léxico.



2.1.-Funciones del analizador léxico

El analizador léxico constituye la primera fase del compilador.
La función principal del  analizador es leer los caracteres de entrada del programa fuente y verificar a qué tipo de componentes léxicos pertenecen, esta información es utilizada después por el analizador sintáctico. 

Funciona de la siguiente manera: lee un  carácter de izquierda a derecha hasta encontrar una coincidencia con un patrón, una vez que ya encontró el patrón guarda este elemento en la tabla de símbolos y regresa por otro componente léxico.

Además de lo anterior, el analizador léxico, identifica y elimina todos los espacios  en blanco y comentarios que haya en el programa fuente así como también relacionar todos los errores que se den durante el análisis con los elementos del programa fuente.

2.2.-Lexemas, patrones y tokens (componentes léxicos)

Lexema: también identificadas como cadenas de caracteres, son todas las cadenas del programa fuente que tiene un significado en de acuerdo con un patrón definido por la sintaxis del lenguaje para un componente léxico.

Patrón: conjunto de reglas que describen a cada uno de los componentes léxicos de acuerdo a ciertas características específicas que lo identifiquen.

Token (componente léxico): unidad lógica generada por el analizador léxico, representa una información determinada, puede ser un operando, un operador, una función, etc., y corresponden a un lexema.
Ejemplos de componentes léxicos o tokens son: palabras reservadas, operadores de relación, comparación, lógicos, etc.

Ejemplos:

Componente léxico
Lexemas
Descripción informal
Main
Main
Programa principal/Main
If
If
Sentencia de bifurcación selectiva
For
For
Estructura de selección repetitiva en la cual se conoce el numero de iteraciones
Int
Int
Conjunto de números enteros
Char
Char
Tipo de dato que representa un carácter cualquiera  de la A-Z, a-z o números
Librerías
Iostream.h, conio.h,stdio.h
Conjunto de paquetes o programas con funciones predefinidas
Operadores aritméticos
+,-,*,/
Conjunto de operadores que permiten realizar operaciones matemáticas

2.3.-Manejo de buffers de entrada

Un buffer es un espacio de almacenamiento temporal de entrada o salida de datos cuando esta está en transferencia. En el análisis léxico se utiliza un buffer para realizar la compilación en menos tiempo y además para no consumir toda la memoria durante las comparaciones. Existen 2 técnicas de comparación del análisis léxico cuando usa el buffer, y son:

Técnica de pareja de buffer.

Aquí se divide al buffer en 2 partes iguales, se tienen además 2 apuntadores que recorren el buffer, uno de ellos denominado delantero que va recorriendo el buffer posición por posición hasta encontrar una coincidencia con un patrón y otro llamado lexema que recorre el buffer procesando la información de los lexemas.

La técnica consiste en que primero se llena una mitad del buffer, el apuntador delantero comienza a recorrer el buffer  seguido por el apuntador lexema, hasta encontrar coincidencias con un patrón  y así hasta llegar al final de la primera mitad, cuando se termina la primera mitad, se llena la segunda mitad del buffer y los apuntador es delantero y lexema se posicionan al inicio de la segunda mitad y realizan el mismo proceso que se describió anteriormente.

Cuando se llega al final de la segunda mitad,  se llena de nuevo la primera mitad y los apuntadores pasan al inicio de esta, este proceso se repite hasta encontrar el fin de archivo (eof).



Técnica del centinela.

El buffer se divide en 2 mitades, se usan 2 apuntadores a igual que en la técnica anterior. Funciona de manera similar al de pareja de buffer pero con una pequeña diferencia, aquí cada que el apuntador delantero avanza se verifica que el buffer aun no termina, esto es si ha encontrado la señal de fin del buffer (eob), de ser así se llena la segunda mitad del buffer y los apuntadores pasan a la segunda mitad, con esta señal se reduce tiempo de verificar si se ha llegado al límite del buffer, utilizando 2 señales de terminación, una para cada buffer.



2.4.-Especificación de los componentes léxicos.
Los desarrolladores de compiladores para identificar la concordancia entre lexemas y componentes léxicos requieren de un esquema que defina al componente léxico.

Expresión regular.
Notación o representación para especificar patrones para los componentes léxicos.
Cada patrón concuerda con una serie de cadenas (lexema) de modo que la expresión regular sirve como nombre para un conjunto de cadenas.

Cadenas y lenguajes.
Ø  Alfabeto o clase de carácter: cualquier conjunto finito de símbolos.
Ø  Cadena (frase o palabra): secuencia finita de símbolos  formados por elementos del alfabeto.
Ø  Lenguajes: conjunto de cadenas de un alfabeto fijo.

Operaciones aplicadas a los lenguajes.

·         Unión: L UM  (elementos  que están en L y en M).
·         Concatenación: LM (elementos de L seguidos de elementos de M).
·         Cerradura de Klenne: L* (cero o más concatenaciones de L).
·         Cerradura positiva: L+ (1 o más de concatenaciones de L).

Operadores p/definir componentes léxicos.

()àPara agrupar símbolos.
|àPara elegir entre 2 o más alternativas.
?à0 (cero) ó un caso.

Conjuntos no regulares.

Aquellos lenguajes que no se pueden describir con una expresión regular.

Ejemplos:

1.- Componente léxico: Identificador.
Patrón: letra seguida de letras o dígitos.
Ejemplos de lexemas: clave, num1, num2, a123, x, y.
Expresión regular.
                identàletra (letra|dígito) *   
                letraàa|b|c|…|z|A|B|C|…|Z
                dígitoà0|1|2|3|4|5|6|7|8|9

Nota: una expresión regular se construya a partir de expresiones regulares más simples, hasta llegar a símbolos del alfabeto.

2.- Componente léxico: números enteros.
Patrón: cualquier número sin punto decimal.
Expresión regular.
num_entàdígito dígito*
dígitoà0|1|2|3|4|5|6|7|8|9

num_entàdígito +
dígitoà0|1|2|3|4|5|6|7|8|9
  
3.- Componente léxico: número reales positivos y negativos.
Lexemas de ejemplo: -179.12, +12.0, +0.735, -2385.72
Patrón: cualquier número con punto decimal positivo o negativo.
Expresión regular.
num_realà(+|-) dígito+.dígito+
dígitoà0|1|2|3|4|5|6|7|8|9

4.- Para representar la expresión regular para palabras reservadas del lenguaje, se utiliza la misma palabra reservada.
mainàmain
ifàif
elseàelse
getchàgetch
intàint
floatàfloat
doubleàdouble
clrscràclrscr
whileàwhile
foràfor

El analizador léxico aparte de identificar lexemas que corresponden a un componente léxico, elimina del código fuente:

Espacios en blanco
Comentarios.

Por lo que debe existir una representación (expresión regular) que marque esta concordancia.

Componente léxico: espacios en blanco
Patrón: espacios en blanco entre lexemas que pueden ser: secuencias nulas de espacios en blanco, caracteres TAB (sangría) y caracteres de nueva línea (end).
Expresión regular.
Esp. Blancoàblanco|TAB|línea_nueva
Ebàesp_blanco+
Blancoà_
TABà_ _ _ _
Línea_nuevaà”enter”

Componente léxico: comentarios
Patrón: cualquier nota escrita después de los signos // hasta terminar el renglón.

Expresión regular.
Comentarioà//(letra|digito|sign_punt+|eb)
LetraàA|B|C|D|…|Z|a|b|c|…|z
Digitoà0|1|2|3|4|5|6|7|8|9|
Sign_puntà$|#|,|;|!|…|&
Ebàesp_blanco
Esp_blancoàblanco|TAB|nueva_linea

13 comentarios:

  1. std::cout<<"Hector_Basado" std::endl;

    ResponderEliminar
  2. EL SARPE:

    Yeah
    Tolebrio again
    Tolebrio again
    Topotop productions, Ruff and Tuff Studios
    Let's do this

    En este momento me siento bien raro
    Ya que tragué guaro como un lago
    Read this ganga me siento bien vago
    Vamo pa' mi chante a meterle ese menago

    Para no llevar ese cuento bien largo
    Necesito punarle y punarle mewazo
    Quiero las ticas, las nicas, las panameñas
    Y tolas latinas de mi pati-fichas

    Si Toledo do' admit you
    Como a yo'think que no me lo han dicho
    Mucha gente cree que Toledo es un bicho
    The only thing mi waan do is love and teach you

    Baby, girl a really need you
    I want you to a besitu
    No es por muchacho borracho
    Bote en mi life I want you to fitch you

    Tu fisico no me importa
    Venga aquí y reporta
    Solo quiero un trago más te invito
    Jalemos una torta

    Tu fisico no me importa
    Venga aquí y reporta
    Solo quiero un tapiz más te invito
    Jalemos una torta

    Solo quiero el sarpe
    De mi parte, quiero besarte
    Vamos pa' mi chante

    Quiero el sarpe
    De mi parte, quiero besarte
    Vamos pa' mi chante

    Eh, eh, eh, ieh
    Eh, eh, vamos pa' mi chante, ieh
    Eh, eh, eh, ieh
    Eh, eh, eh

    Entonces qué
    Con to'a confianza, se que me transa
    Tengo coctel pa' la panza
    I finna heal out de bronze and de ganja

    Pero depende de la birra que me lanza
    Esa para mí no es mala canza (no way)
    Pero desde mi infancia
    Estaba esperando a alguien como teus con
    Desesperanza

    Un momento si soy muy directo, lo siento
    Ese es mi estilo y no la rento
    Pero atento, yo no te miento
    Me tiene como loco ese movimiento

    Un minuto pero yo no soy bruto
    Es que es tan chica y yo no discuto
    Ojalá que feeling es mutuo
    Estando contigo yo disfruto

    Tu fisico no me importa
    Venga aquí y reporta
    Solo quiero un trago más te invito
    Jalemos una torta

    Tu fisico no me importa
    Venga aquí y reporta
    Solo quiero un tapiz más te invito
    Jalemos una torta

    Solo quiero el sarpe
    De mi parte, quiero besarte
    Vamos pa' mi chante

    Quiero el sarpe
    De mi parte, quiero besarte
    Vamos pa' mi chante

    Eh, eh, ieh
    Eh, eh, vamos pa' mi chante
    Eh, eh, eh, ieh
    Eh, eh, eh

    Dímelo bye bye bye
    No change
    (Tolebrio again and again)
    This is called versatility
    Versatile ting, why

    (Yo hago lo que tengo que hacer mi amor)
    (Na' más venga, matizemos, matice la vida)
    (Si hay que tomar, hay que tomar)
    (Lo que usted necesita para quitar el estrés)
    (Yo sé lo que hago yo)
    (Tolebrio again!)

    Solo quiero el sarpe
    De mi parte, quiero besarte
    Vamos pa' mi chante

    Quiero el sarpe
    De mi parte, quiero besarte
    Vamos pa' mi chante

    Solo quiero el sarpe
    De mi parte, quiero besarte
    Vamos pa' mi chante

    Quiero el sarpe
    De mi parte, quiero besarte
    Vamos pa' mi chante

    Solo quiero el sarpe
    De mi parte, quiero besarte
    Vamos pa' mi chante

    Quiero el sarpe
    De mi parte, quiero besarte

    ResponderEliminar
  3. Estimados usuarios, estoy indignadísima de tal clase de comentarios, es impensable ver como en un tema tan importante, se toma como un juego. Es impensable que la juventud este tan perdida.

    ResponderEliminar