Você está na página 1de 34

Lenguajes y Compiladores - LyC

Análisis Léxico

Prof. Diego Mosquera U.


Departamento de Ciencia y Tecnología
Universidad Nacional Experimental de Guayana

Ingeniería en Informática
Analizador Léxico
• El analizador léxico lee el programa fuente carácter por
carácter para producir tokens.
• Pasa por alto comentarios y espacios en blanco.
• Devuelve un token cuando el parser lo solicita.
• Correlaciona mensajes de error con el programa fuente.

Token
Programa Analizador Parser Para el Análisis
fuente Léxico Semántico
getNextToken

Tabla de
Símbolos

LyC - Prof. Diego Mosquera 2


Token
• Un token es un par que contiene un nombre y un
atributo-valor opcional:
• El nombre del token especifica el patrón del token.
• Los atributos almacenan el lexema del token.
• Tokens:
• Palabras clave: “begin”, “if”, “else”, …
• Identificadores: Cadenas de letras o dígitos que comienzan
con una letra.
• Enteros: Una cadena no vacía de dígitos.
• Signos de puntuación: “,”, “;”, “(“, “)”, …
• Expresiones regulares:
• Utilizadas para especificar los patrones de los tokens.

LyC - Prof. Diego Mosquera 3


Ejemplos de tokens
TOKEN DESCRIPCIÓN INFORMAL EJEMPLO DE LEXEMAS
if Caracteres i, f
else Caracteres e, l, s, e
comparación < o > o <= o >= o == o != <=, !=
id Letra seguida de letras y digitos pi, puntaje, D2
número Cualquier constante numérica 3.14159, 0, 6.02e23
literal Cuaquier cosa entre comullas “hola mundo”

<id, apuntador a la tabla de símbolos para E>


<asignación_op>
<id, apuntador a la tabla de símbolos para M>
E = M * C ** 2 <producto_op>
<id, apuntador a la tabla de símbolos para C>
<exponente_op>
<numero, valor entero 2>
LyC - Prof. Diego Mosquera 4
Terminología de lenguajes
• Alfabeto: Un conjunto finito de símbolos
• ASCII
• Unicode
• Cadena (string): Una secuencia finita de símbolos de un
alfabeto.
• es la cadena vacía.
• |S| es la longitud de la cadena S.
• Concatenación: xy representa x seguida de y.
• Exponenciación: = … =
• Lenguaje: Un conjunto de cadenas sobre algún alfabeto:
• El conjunto vacío es un lenguaje.
• El conjunto de los programas bien formados escritos en C es un
lenguaje.

LyC - Prof. Diego Mosquera 5


Operaciones sobre lenguajes
• Unión: ∪ = ∈ ∨ ∈ }

• Concatenación: = ∈ ∧ ∈ }

• Clausura (estrella de Kleene): ∗ = ⋃

• Clausura positiva: = ⋃

LyC - Prof. Diego Mosquera 6


Ejemplos
• Para = { , , , !} y = {1, 2}

• ∪ = , , , !, 1, 2
• = 1, 2, 1, 2, 1, 2, !1, !2

• = todas las cadenas que pueden formarse con las
letras a, b, c, d, incluyendo la cadena vacía.
• = todas las cadenas que pueden formarse con las
letras a, b, c, d, sin incluir la cadena vacía.

LyC - Prof. Diego Mosquera 7


Expresiones regulares
• Una expresión regular es la representación de un
lenguaje que puede ser construido a partir de los
operadores aplicados a los símbolos de algún
alfabeto.
• Una expresión regular se construye a partir de
expresiones regulares más pequeñas (usando
reglas).
• Cada expresión regular R denota un lenguaje L(R).
• Un lenguaje denotado por una expresión regular es
llamado conjunto regular.
LyC - Prof. Diego Mosquera 8
Expresiones regulares (reglas)
Para un alfabeto Σ
Expresión Regular Lenguaje que denota
={ }
∈ Σ = {a}
& | (& ) & ∪ (& )
& & & (& )

& ( & )∗
(&) L(&)

Extensión

& = & & ( & )
& ?= & | & ∪ { } cero o una instancia
[ − ] |…| ) clase de caracteres
LyC - Prof. Diego Mosquera 9
Expresiones regulares
• Podemos remover paréntesis usando reglas de precedencia:
• * alta precedencia
• Concatenación
• | baja precedencia
∗ ∗|
• |( ) es equivalente a

• Ejemplos:
• Σ = 0, 1
• 0 | 1 ⇒ {0, 1}
• 0 1) 0 1) ⇒ {00, 01, 10, 11}
• 0∗ ⇒ , 0, 00, 000, 0000, …
• 0 1)∗ ⇒ todas las cadenas con 0 y 1, incluyendo la cadena vacía.

LyC - Prof. Diego Mosquera 10


Definiciones regulares
• Podemos dar nombres a las expresiones regulares, y
usar estos nombres como símbolos para definir otras
expresiones regulares.
• Una expresión regular es una secuencia de definiciones
de la forma:
! ⟶&
! ⟶&

! ⟶&
• Donde:
• ! es un nuevo símbolo para nombrar la expresión regular.
• & es una expresión regular sobre Σ ∪ {! , ! , … , ! 2 }
LyC - Prof. Diego Mosquera 11
Definiciones regulares (ejemplos)
• Identificadores en PASCAL
3 4& ⟶ 5 6 … | 7 … 8
!9:94; ⟶ 0 1 … | 9
9! ⟶ 3 4& 3 4& !9:94;)∗
• Si se tratara de escribir una expresión regular para
representar identificadores sin usar definiciones
regulares, la expresión regular sería compleja.

LyC - Prof. Diego Mosquera 12


Diagrama de transición
• Estados: Representan una condición que puede
ocurrir durante el proceso de análisis (scanning):
• Estado inicial:

• Estado final/aceptación: lexema encontrado

• Estado intermedio:

LyC - Prof. Diego Mosquera 13


Diagrama de transición
• Ejes: Aristas dirigidas de un estado a otro,
etiquetadas con uno o un conjunto de símbolos:

LyC - Prof. Diego Mosquera 14


Diagrama de transición para relop
• Especificación de & 3;= → < > < = > = = | <>

LyC - Prof. Diego Mosquera 15


Diagrama de transición para relop
• Implementación del diagrama de transición de relop:

LyC - Prof. Diego Mosquera 16


Otros diagramas de transiciones
• Un DT para id’s

• Un DT para números sin-signos

LyC - Prof. Diego Mosquera 17


Tareas
• Implemente los dos diagramas de transiciones
anteriores.
• Dibuje un diagrama de transición para reconocer la
siguiente expresión regular:

)∗

LyC - Prof. Diego Mosquera 18


Autómatas Finitos (AF)
• Un autómata finito es un reconocedor que toma un
string, y responde “yes” si el string corresponde a
un patrón de un lenguaje especificado, y “no” en
otro caso.
• Dos tipos:
• Autómata Finito No-Determinista (AFN)
• Autómata Finito Determinista (AFD)
• Ambos tienen la misma capacidad.
• Podemos utilizar ambos para el analizador léxico.

LyC - Prof. Diego Mosquera 19


Autómata Finito No-Determinista
(AFN)
• Un AFN consiste de:
• S : Un conjunto de estados.
• Σ: Un conjunto de símbolos de entrada (alfabeto).
• A Función de transición: mapea pares estado-símbolos a conjuntos
de estados.
• : Estado inicial.
• F: Un conjunto de estados de aceptación (finales).
• Un AFN puede ser representado por un grafo.
• Acepta una cadena x, si y solo si existe un camino desde el
estado inicial a uno de aceptación tal que las etiquetas de
los ejes que recorre permitan obtener a x.
• El mismo símbolo puede etiquetar ejes de un estado a
varios estados diferentes.
• Un eje puede ser etiquetado por λ, una cadena vacía.

LyC - Prof. Diego Mosquera 20


AFN ejemplo (1)
• Un AFN que reconoce el lenguaje ( | )∗

0 es el estado inicial
{2} es el conjunto de estados finales F
∑ = {a, b}
S = {0, 1, 2}
Función de transición:
a b
0 {0, 1} {0}
1 - {2}
2 - -

LyC - Prof. Diego Mosquera 21


AFN ejemplo (2)
• Un AFN que acepta ∗ | ∗

LyC - Prof. Diego Mosquera 22


Implementación de un AFN
⟵ − 3 B B& /* Conjunto de todos los estados que son
accesibles desde por transiciones */

⟵ C4DE &()
FE93 ( ! = ;H){ /* Conjunto de todos los estados
⟵ − 3 B B& I; , que pueden ser accesibles desde
un estado de S por una transición
⟵ C4DE &() c */

}
9H ∩ K ! = ∅ 4E /* Si S contiene un estado de aceptación */
& 4B& "yes"
3
& 4B& " ;"

LyC - Prof. Diego Mosquera 23


Autómata Finito Determinista
(AFD)
• Un AFD es una forma especial de AFN:
• No tiene estados con transiciones λ.
• Para cada símbolo a y estado s, existe a lo sumo un arco
etiquetado con a que sale de s.
• Ejemplo: Un AFD que también reconoce el lenguaje
( | )∗

LyC - Prof. Diego Mosquera 24


Implementación de un AFD
⟵ /* Comienza desde el estado inicial */
⟵ C4DE &() /* Obtiene el próximo carácter de la cadena
de entrada*/

FE93 ( ! = ;H){ /* haga hasta que sea el fin de la cadena*/


⟵ I; ( , ) /* Función de transición */
⟵ C4DE &()
}
9H 9 K 4E /* Si S es un estado de aceptación */
& 4B& "yes"
3
& 4B& " ;"

LyC - Prof. Diego Mosquera 25


AFN vs AFD

Compactabilidad Legibilidad Velocidad


AFN Bueno Bueno Lento
AFD Malo Malo Rápido

• Los AFD son ampliamente usados para construir analizadores léxicos.

• El lenguaje reconocido ( | )∗

AFN LyC - Prof. Diego Mosquera


AFD 26
De expresiones regulares a AFN
• Construcción McNaughton-Yamada-Thompson
(MYT):
• Simple y sistemática.
• La construcción comienza desde las partes más simples
(símbolos del alfabeto).
• Para una expresión regular compleja, se combinan
subexpresiones más simples hasta obtener su AFN.
• Garantiza que los resultados tienen exactamente un
estado inicial y un estado final.

LyC - Prof. Diego Mosquera 27


Construcción MYT
• Reglas básicas: para subexpresiones sin
operadores:
• Para la expresión

• Para un símbolo a en el alfabeto ∑

LyC - Prof. Diego Mosquera 28


Construcción MYT
• Reglas inductivas: para construir un AFN a partir de
dos AFN que describen subexpresiones:
• Sean _(& ) y _(& ) los AFN para las expresiones
regulares & y & , respectivamente, entonces:
• Para la expresión regular & | &

LyC - Prof. Diego Mosquera 29


Construcción MYT
• Reglas inductivas: para construir un AFN a partir de
dos AFN que describen subexpresiones:
• Sean _(& ) y _(& ) los AFN para las expresiones
regulares & y & , respectivamente, entonces:
• Para la expresión regular & &

• Para la expresión regular & ∗

LyC - Prof. Diego Mosquera 30



Ejemplo:

LyC - Prof. Diego Mosquera 31


Conversión de un AFN a AFD
• Enfoque: Construcción por subconjuntos
• Cada estado del AFD corresponde a un
conjunto/combinación de estados del AFN
• Detalles:
1. Cree la tabla de transición Dtran para el AFD
2. Inserte λ-clausura( ) a Dstates como estado inicial
3. Seleccione un estado no visitado T de Dstates
4. Para cada símbolo a, crear estado
λ-clausura(move(T, a)), y agregue éste a Dstates y Dtran
5. Repetir el paso 3 y 4 hasta que todos los estados en
Dstates sean visitados
LyC - Prof. Diego Mosquera 32
La construcción del subconjunto
Inicialmente, -clausura( ) es el único estado en Dstates y este es
no-marcado;
While(exista un estado no-marcado T en Dstates){
marcar T
for (cada símbolo de entrada a){
U = -clausura(move(T,a));
if (U no está en Dstates)
agregue U como un estado no
marcado a Dstates;
Dtran[T, a] = U;
}
}

LyC - Prof. Diego Mosquera 33


Ejemplo: AFN a AFD
• AFN para ∗ AFN

Estado AFN Estado AFD a b


{0, 1, 2, 4, 7} A B C AFD

{1, 2, 3, 4, 6, 7, 8} B B D
{1, 2, 4, 5, 6, 7} C B C
{1, 2, 4, 5, 6, 7, 9} D B E
{1, 2, 4, 5, 6, 7, 10} E B C

LyC - Prof. Diego Mosquera 34

Você também pode gostar