Está en la página 1de 160

Análisis Léxico

Ing. Adrian Ulises Mercado Martinez

Universidad Nacional Autónoma de México

Abril, 2020
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Outline

1 Introducción

2 Tokens

3 Errores léxicos

4 Construcción de un Analizador Léxico

5 Expresiones Regulares

6 Autómata Finito Determinista

7 Elementos punteados

8 Minimización de un AFD

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Sección 1 Introducción

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Funcionamiento

Análisis Sintáctico

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Funcionamiento

Analisis Léxico Análisis Sintáctico

next token

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Funcionamiento

Programa Fuente

Analisis Léxico Análisis Sintáctico

next token

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Funcionamiento

Programa Fuente token

Analisis Léxico Análisis Sintáctico

next token

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Funcionamiento

Programa Fuente token árbol sintáctico

Analisis Léxico Análisis Sintáctico Análisis Semántico

next token

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Funcionamiento

Programa Fuente token árbol sintáctico front-end

Analisis Léxico Análisis Sintáctico Análisis Semántico

next token

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Funcionamiento

Programa Fuente token árbol sintáctico front-end

Analisis Léxico Análisis Sintáctico Análisis Semántico

next token

Tabla de Sı́mbolos

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Funcionamiento

Tareas del análisis léxico:


1 Leer el programa fuente.
2 Generar los tokens.
3 Ignorar los espacios en blanco.
4 Ignorar los comentarios.
5 Reconocer los errores léxicos.
6 Reiniciar el análisis después de un error léxico.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Funcionamiento

Tareas del análisis léxico:


1 Leer el programa fuente.
2 Generar los tokens.
3 Ignorar los espacios en blanco.
4 Ignorar los comentarios.
5 Reconocer los errores léxicos.
6 Reiniciar el análisis después de un error léxico.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Funcionamiento

Tareas del análisis léxico:


1 Leer el programa fuente.
2 Generar los tokens.
3 Ignorar los espacios en blanco.
4 Ignorar los comentarios.
5 Reconocer los errores léxicos.
6 Reiniciar el análisis después de un error léxico.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Funcionamiento

Tareas del análisis léxico:


1 Leer el programa fuente.
2 Generar los tokens.
3 Ignorar los espacios en blanco.
4 Ignorar los comentarios.
5 Reconocer los errores léxicos.
6 Reiniciar el análisis después de un error léxico.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Funcionamiento

Tareas del análisis léxico:


1 Leer el programa fuente.
2 Generar los tokens.
3 Ignorar los espacios en blanco.
4 Ignorar los comentarios.
5 Reconocer los errores léxicos.
6 Reiniciar el análisis después de un error léxico.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Funcionamiento

Tareas del análisis léxico:


1 Leer el programa fuente.
2 Generar los tokens.
3 Ignorar los espacios en blanco.
4 Ignorar los comentarios.
5 Reconocer los errores léxicos.
6 Reiniciar el análisis después de un error léxico.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Sección 2 Tokens

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Tokens

Definición
Token
1 Un token es la unidad mı́nima de información que
tiene significado para un lenguaje de programación.
2 Se compone de una clase léxica y un valor opcional.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Tokens

Definición
Token
1 Un token es la unidad mı́nima de información que
tiene significado para un lenguaje de programación.
2 Se compone de una clase léxica y un valor opcional.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Tokens

Definición
Token
1 Un token es la unidad mı́nima de información que
tiene significado para un lenguaje de programación.
2 Se compone de una clase léxica y un valor opcional.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Clases Léxicas

Clase Léxica
Es un conjunto que sirve para agrupar los tokens de los
lenguajes de programación.
1 Palabras Reservadas.
2 Identificadores.
3 Operadores(Ya sea de forma individual o por
subclases).
4 Constantes Numéricas.
5 Constantes de cadenas o caracteres.
6 Signos especiales o de puntuación.
7 Espacios en blanco.
8 Comentarios.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Clases Léxicas

Clase Léxica
Es un conjunto que sirve para agrupar los tokens de los
lenguajes de programación.
1 Palabras Reservadas.
2 Identificadores.
3 Operadores(Ya sea de forma individual o por
subclases).
4 Constantes Numéricas.
5 Constantes de cadenas o caracteres.
6 Signos especiales o de puntuación.
7 Espacios en blanco.
8 Comentarios.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Clases Léxicas

Clase Léxica
Es un conjunto que sirve para agrupar los tokens de los
lenguajes de programación.
1 Palabras Reservadas.
2 Identificadores.
3 Operadores(Ya sea de forma individual o por
subclases).
4 Constantes Numéricas.
5 Constantes de cadenas o caracteres.
6 Signos especiales o de puntuación.
7 Espacios en blanco.
8 Comentarios.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Clases Léxicas

Clase Léxica
Es un conjunto que sirve para agrupar los tokens de los
lenguajes de programación.
1 Palabras Reservadas.
2 Identificadores.
3 Operadores(Ya sea de forma individual o por
subclases).
4 Constantes Numéricas.
5 Constantes de cadenas o caracteres.
6 Signos especiales o de puntuación.
7 Espacios en blanco.
8 Comentarios.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Clases Léxicas

Clase Léxica
Es un conjunto que sirve para agrupar los tokens de los
lenguajes de programación.
1 Palabras Reservadas.
2 Identificadores.
3 Operadores(Ya sea de forma individual o por
subclases).
4 Constantes Numéricas.
5 Constantes de cadenas o caracteres.
6 Signos especiales o de puntuación.
7 Espacios en blanco.
8 Comentarios.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Clases Léxicas

Clase Léxica
Es un conjunto que sirve para agrupar los tokens de los
lenguajes de programación.
1 Palabras Reservadas.
2 Identificadores.
3 Operadores(Ya sea de forma individual o por
subclases).
4 Constantes Numéricas.
5 Constantes de cadenas o caracteres.
6 Signos especiales o de puntuación.
7 Espacios en blanco.
8 Comentarios.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Clases Léxicas

Clase Léxica
Es un conjunto que sirve para agrupar los tokens de los
lenguajes de programación.
1 Palabras Reservadas.
2 Identificadores.
3 Operadores(Ya sea de forma individual o por
subclases).
4 Constantes Numéricas.
5 Constantes de cadenas o caracteres.
6 Signos especiales o de puntuación.
7 Espacios en blanco.
8 Comentarios.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Clases Léxicas

Clase Léxica
Es un conjunto que sirve para agrupar los tokens de los
lenguajes de programación.
1 Palabras Reservadas.
2 Identificadores.
3 Operadores(Ya sea de forma individual o por
subclases).
4 Constantes Numéricas.
5 Constantes de cadenas o caracteres.
6 Signos especiales o de puntuación.
7 Espacios en blanco.
8 Comentarios.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Clases Léxicas

Clase Léxica
Es un conjunto que sirve para agrupar los tokens de los
lenguajes de programación.
1 Palabras Reservadas.
2 Identificadores.
3 Operadores(Ya sea de forma individual o por
subclases).
4 Constantes Numéricas.
5 Constantes de cadenas o caracteres.
6 Signos especiales o de puntuación.
7 Espacios en blanco.
8 Comentarios.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Ejemplo de Análisis Léxico

Programa fuente:
a = ( x + y) * z;
Salida:
< ID, apuntador a la tabla de sı́mbolos para a >
< operador de asignación >
< paréntesis que abre >
< ID, apuntador a la tabla de sı́mbolos para x >
< operador suma >
< ID, apuntador a la tabla de sı́mbolos para y >
< paréntesis que cierra >
< operador de multiplicación >
< ID, apuntador a la tabla de sı́mbolos para z >
< punto y coma >
AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Ejemplo de Análisis Léxico

Programa fuente:
a = ( x + y) * z;
Salida:
< ID, apuntador a la tabla de sı́mbolos para a >
< operador de asignación >
< paréntesis que abre >
< ID, apuntador a la tabla de sı́mbolos para x >
< operador suma >
< ID, apuntador a la tabla de sı́mbolos para y >
< paréntesis que cierra >
< operador de multiplicación >
< ID, apuntador a la tabla de sı́mbolos para z >
< punto y coma >
AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Ejemplo de Análisis Léxico

Programa fuente:
a = ( x + y) * z;
Salida:
< ID, apuntador a la tabla de sı́mbolos para a >
< operador de asignación >
< paréntesis que abre >
< ID, apuntador a la tabla de sı́mbolos para x >
< operador suma >
< ID, apuntador a la tabla de sı́mbolos para y >
< paréntesis que cierra >
< operador de multiplicación >
< ID, apuntador a la tabla de sı́mbolos para z >
< punto y coma >
AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Ejemplo de Análisis Léxico

Programa fuente:
a = ( x + y) * z;
Salida:
< ID, apuntador a la tabla de sı́mbolos para a >
< operador de asignación >
< paréntesis que abre >
< ID, apuntador a la tabla de sı́mbolos para x >
< operador suma >
< ID, apuntador a la tabla de sı́mbolos para y >
< paréntesis que cierra >
< operador de multiplicación >
< ID, apuntador a la tabla de sı́mbolos para z >
< punto y coma >
AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Ejemplo de Análisis Léxico

Programa fuente:
a = ( x + y) * z;
Salida:
< ID, apuntador a la tabla de sı́mbolos para a >
< operador de asignación >
< paréntesis que abre >
< ID, apuntador a la tabla de sı́mbolos para x >
< operador suma >
< ID, apuntador a la tabla de sı́mbolos para y >
< paréntesis que cierra >
< operador de multiplicación >
< ID, apuntador a la tabla de sı́mbolos para z >
< punto y coma >
AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Ejemplo de Análisis Léxico

Programa fuente:
a = ( x + y) * z;
Salida:
< ID, apuntador a la tabla de sı́mbolos para a >
< operador de asignación >
< paréntesis que abre >
< ID, apuntador a la tabla de sı́mbolos para x >
< operador suma >
< ID, apuntador a la tabla de sı́mbolos para y >
< paréntesis que cierra >
< operador de multiplicación >
< ID, apuntador a la tabla de sı́mbolos para z >
< punto y coma >
AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Ejemplo de Análisis Léxico

Programa fuente:
a = ( x + y) * z;
Salida:
< ID, apuntador a la tabla de sı́mbolos para a >
< operador de asignación >
< paréntesis que abre >
< ID, apuntador a la tabla de sı́mbolos para x >
< operador suma >
< ID, apuntador a la tabla de sı́mbolos para y >
< paréntesis que cierra >
< operador de multiplicación >
< ID, apuntador a la tabla de sı́mbolos para z >
< punto y coma >
AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Ejemplo de Análisis Léxico

Programa fuente:
a = ( x + y) * z;
Salida:
< ID, apuntador a la tabla de sı́mbolos para a >
< operador de asignación >
< paréntesis que abre >
< ID, apuntador a la tabla de sı́mbolos para x >
< operador suma >
< ID, apuntador a la tabla de sı́mbolos para y >
< paréntesis que cierra >
< operador de multiplicación >
< ID, apuntador a la tabla de sı́mbolos para z >
< punto y coma >
AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Ejemplo de Análisis Léxico

Programa fuente:
a = ( x + y) * z;
Salida:
< ID, apuntador a la tabla de sı́mbolos para a >
< operador de asignación >
< paréntesis que abre >
< ID, apuntador a la tabla de sı́mbolos para x >
< operador suma >
< ID, apuntador a la tabla de sı́mbolos para y >
< paréntesis que cierra >
< operador de multiplicación >
< ID, apuntador a la tabla de sı́mbolos para z >
< punto y coma >
AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Ejemplo de Análisis Léxico

Programa fuente:
a = ( x + y) * z;
Salida:
< ID, apuntador a la tabla de sı́mbolos para a >
< operador de asignación >
< paréntesis que abre >
< ID, apuntador a la tabla de sı́mbolos para x >
< operador suma >
< ID, apuntador a la tabla de sı́mbolos para y >
< paréntesis que cierra >
< operador de multiplicación >
< ID, apuntador a la tabla de sı́mbolos para z >
< punto y coma >
AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Sección 3 Errores léxicos

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Errores Léxicos

Error Léxico
Un error léxico es cualquier lexema que no puede ser
asociado a alguna de las expresiones regulares que
definen los tokens del lenguaje de programación.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Errores Léxicos

Ejemplo
Identificadores mal construidos.
Identificadores que exceden la longitud máxima
definida.
Constantes numéricas o de caracteres mal
construidas.
Números que exceden el rango (Máximo o mı́nimo).
Caracteres extraños no definidos por el lenguaje.
Palabras reservadas mal escritas.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Errores Léxicos

Ejemplo
Identificadores mal construidos.
Identificadores que exceden la longitud máxima
definida.
Constantes numéricas o de caracteres mal
construidas.
Números que exceden el rango (Máximo o mı́nimo).
Caracteres extraños no definidos por el lenguaje.
Palabras reservadas mal escritas.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Errores Léxicos

Ejemplo
Identificadores mal construidos.
Identificadores que exceden la longitud máxima
definida.
Constantes numéricas o de caracteres mal
construidas.
Números que exceden el rango (Máximo o mı́nimo).
Caracteres extraños no definidos por el lenguaje.
Palabras reservadas mal escritas.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Errores Léxicos

Ejemplo
Identificadores mal construidos.
Identificadores que exceden la longitud máxima
definida.
Constantes numéricas o de caracteres mal
construidas.
Números que exceden el rango (Máximo o mı́nimo).
Caracteres extraños no definidos por el lenguaje.
Palabras reservadas mal escritas.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Errores Léxicos

Ejemplo
Identificadores mal construidos.
Identificadores que exceden la longitud máxima
definida.
Constantes numéricas o de caracteres mal
construidas.
Números que exceden el rango (Máximo o mı́nimo).
Caracteres extraños no definidos por el lenguaje.
Palabras reservadas mal escritas.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Errores Léxicos

Ejemplo
Identificadores mal construidos.
Identificadores que exceden la longitud máxima
definida.
Constantes numéricas o de caracteres mal
construidas.
Números que exceden el rango (Máximo o mı́nimo).
Caracteres extraños no definidos por el lenguaje.
Palabras reservadas mal escritas.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Errores Léxicos

Ejemplo
Identificadores mal construidos.
Identificadores que exceden la longitud máxima
definida.
Constantes numéricas o de caracteres mal
construidas.
Números que exceden el rango (Máximo o mı́nimo).
Caracteres extraños no definidos por el lenguaje.
Palabras reservadas mal escritas.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Recuperación de errores

Estrategias de Recuperación de Errores


Modo pánico.
Eliminar un carácter de la entrada.
Insertar un carácter faltante en la entrada.
Sustituir un carácter por otro.
Transponer dos caracteres adyacentes.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Recuperación de errores

Estrategias de Recuperación de Errores


Modo pánico.
Eliminar un carácter de la entrada.
Insertar un carácter faltante en la entrada.
Sustituir un carácter por otro.
Transponer dos caracteres adyacentes.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Recuperación de errores

Estrategias de Recuperación de Errores


Modo pánico.
Eliminar un carácter de la entrada.
Insertar un carácter faltante en la entrada.
Sustituir un carácter por otro.
Transponer dos caracteres adyacentes.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Recuperación de errores

Estrategias de Recuperación de Errores


Modo pánico.
Eliminar un carácter de la entrada.
Insertar un carácter faltante en la entrada.
Sustituir un carácter por otro.
Transponer dos caracteres adyacentes.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Recuperación de errores

Estrategias de Recuperación de Errores


Modo pánico.
Eliminar un carácter de la entrada.
Insertar un carácter faltante en la entrada.
Sustituir un carácter por otro.
Transponer dos caracteres adyacentes.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Recuperación de errores

Estrategias de Recuperación de Errores


Modo pánico.
Eliminar un carácter de la entrada.
Insertar un carácter faltante en la entrada.
Sustituir un carácter por otro.
Transponer dos caracteres adyacentes.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico

Divida el siguiente programa en C++ en tokens


f l o a t cuadrado( x )
float x {
/∗ Devuelve e l cuadrado de x ,
pero nunca mas de 100 ∗/
r e t u r n ( x <= −10.0 f | | x >= 10.0 f ) ? 1 0 0 : x ∗ x ;
}

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico

Divida el siguiente código en HTML en tokens


Aqui se puede ver una foto de <B> mi hogar</B> :
<P><IMG SRC = ”hogar . g i f ”><BR>
Vea <A HREF = ”mas . html ”>Mas imagenes</A> s i
l e gusto esta . <P>

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Sección 4 Construcción de un Analizador

Léxico

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Construcción de un Analizador Léxico

Construcción de un Analizador Léxico


1 Definir los tokens que van a componer el lenguaje de
programación
2 Generar las Expresiones Regulares para reconocer los
lexemas de los tokens.
3 Obtener un AFD que reconozca todas las Expresiones
Regulares.
4 Minimizar el AFD.
5 Programar el AFD.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Construcción de un Analizador Léxico

Construcción de un Analizador Léxico


1 Definir los tokens que van a componer el lenguaje de
programación
2 Generar las Expresiones Regulares para reconocer los
lexemas de los tokens.
3 Obtener un AFD que reconozca todas las Expresiones
Regulares.
4 Minimizar el AFD.
5 Programar el AFD.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Construcción de un Analizador Léxico

Construcción de un Analizador Léxico


1 Definir los tokens que van a componer el lenguaje de
programación
2 Generar las Expresiones Regulares para reconocer los
lexemas de los tokens.
3 Obtener un AFD que reconozca todas las Expresiones
Regulares.
4 Minimizar el AFD.
5 Programar el AFD.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Construcción de un Analizador Léxico

Construcción de un Analizador Léxico


1 Definir los tokens que van a componer el lenguaje de
programación
2 Generar las Expresiones Regulares para reconocer los
lexemas de los tokens.
3 Obtener un AFD que reconozca todas las Expresiones
Regulares.
4 Minimizar el AFD.
5 Programar el AFD.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Construcción de un Analizador Léxico

Construcción de un Analizador Léxico


1 Definir los tokens que van a componer el lenguaje de
programación
2 Generar las Expresiones Regulares para reconocer los
lexemas de los tokens.
3 Obtener un AFD que reconozca todas las Expresiones
Regulares.
4 Minimizar el AFD.
5 Programar el AFD.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Construcción de un Analizador Léxico

Construcción de un Analizador Léxico


1 Definir los tokens que van a componer el lenguaje de
programación
2 Generar las Expresiones Regulares para reconocer los
lexemas de los tokens.
3 Obtener un AFD que reconozca todas las Expresiones
Regulares.
4 Minimizar el AFD.
5 Programar el AFD.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Sección 5 Expresiones Regulares

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Definición
1 ε es una expresión regular y L(ε) = {ε}
2 Si a ∈ Σ, entonces a es una expresión regular y L(a) =
{a}

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Definición
1 ε es una expresión regular y L(ε) = {ε}
2 Si a ∈ Σ, entonces a es una expresión regular y L(a) =
{a}

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Definición
1 ε es una expresión regular y L(ε) = {ε}
2 Si a ∈ Σ, entonces a es una expresión regular y L(a) =
{a}

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Operadores de las expresiones regulares


Sean r y s dos expresiones regulares.
(r)|(s). Denota a L(r) ∪ L(s). Disyunción.
(r)(s). Denota el lenguaje L(r)L(s). Concatenación.
(r)∗ . Denota (L(r))*. Cerradura de Kleene.
(r)+ . Denota (L(r))+. Cerradura positiva.
(r)?. Denota a L(r)? = L(r) ∪ {ε}. Operador de opción.
[..] Clases de caracteres.
∼(r). Negación.
[∧r]. Negación.
(r) la expresión regular r

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Operadores de las expresiones regulares


Sean r y s dos expresiones regulares.
(r)|(s). Denota a L(r) ∪ L(s). Disyunción.
(r)(s). Denota el lenguaje L(r)L(s). Concatenación.
(r)∗ . Denota (L(r))*. Cerradura de Kleene.
(r)+ . Denota (L(r))+. Cerradura positiva.
(r)?. Denota a L(r)? = L(r) ∪ {ε}. Operador de opción.
[..] Clases de caracteres.
∼(r). Negación.
[∧r]. Negación.
(r) la expresión regular r

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Operadores de las expresiones regulares


Sean r y s dos expresiones regulares.
(r)|(s). Denota a L(r) ∪ L(s). Disyunción.
(r)(s). Denota el lenguaje L(r)L(s). Concatenación.
(r)∗ . Denota (L(r))*. Cerradura de Kleene.
(r)+ . Denota (L(r))+. Cerradura positiva.
(r)?. Denota a L(r)? = L(r) ∪ {ε}. Operador de opción.
[..] Clases de caracteres.
∼(r). Negación.
[∧r]. Negación.
(r) la expresión regular r

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Operadores de las expresiones regulares


Sean r y s dos expresiones regulares.
(r)|(s). Denota a L(r) ∪ L(s). Disyunción.
(r)(s). Denota el lenguaje L(r)L(s). Concatenación.
(r)∗ . Denota (L(r))*. Cerradura de Kleene.
(r)+ . Denota (L(r))+. Cerradura positiva.
(r)?. Denota a L(r)? = L(r) ∪ {ε}. Operador de opción.
[..] Clases de caracteres.
∼(r). Negación.
[∧r]. Negación.
(r) la expresión regular r

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Operadores de las expresiones regulares


Sean r y s dos expresiones regulares.
(r)|(s). Denota a L(r) ∪ L(s). Disyunción.
(r)(s). Denota el lenguaje L(r)L(s). Concatenación.
(r)∗ . Denota (L(r))*. Cerradura de Kleene.
(r)+ . Denota (L(r))+. Cerradura positiva.
(r)?. Denota a L(r)? = L(r) ∪ {ε}. Operador de opción.
[..] Clases de caracteres.
∼(r). Negación.
[∧r]. Negación.
(r) la expresión regular r

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Operadores de las expresiones regulares


Sean r y s dos expresiones regulares.
(r)|(s). Denota a L(r) ∪ L(s). Disyunción.
(r)(s). Denota el lenguaje L(r)L(s). Concatenación.
(r)∗ . Denota (L(r))*. Cerradura de Kleene.
(r)+ . Denota (L(r))+. Cerradura positiva.
(r)?. Denota a L(r)? = L(r) ∪ {ε}. Operador de opción.
[..] Clases de caracteres.
∼(r). Negación.
[∧r]. Negación.
(r) la expresión regular r

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Operadores de las expresiones regulares


Sean r y s dos expresiones regulares.
(r)|(s). Denota a L(r) ∪ L(s). Disyunción.
(r)(s). Denota el lenguaje L(r)L(s). Concatenación.
(r)∗ . Denota (L(r))*. Cerradura de Kleene.
(r)+ . Denota (L(r))+. Cerradura positiva.
(r)?. Denota a L(r)? = L(r) ∪ {ε}. Operador de opción.
[..] Clases de caracteres.
∼(r). Negación.
[∧r]. Negación.
(r) la expresión regular r

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Operadores de las expresiones regulares


Sean r y s dos expresiones regulares.
(r)|(s). Denota a L(r) ∪ L(s). Disyunción.
(r)(s). Denota el lenguaje L(r)L(s). Concatenación.
(r)∗ . Denota (L(r))*. Cerradura de Kleene.
(r)+ . Denota (L(r))+. Cerradura positiva.
(r)?. Denota a L(r)? = L(r) ∪ {ε}. Operador de opción.
[..] Clases de caracteres.
∼(r). Negación.
[∧r]. Negación.
(r) la expresión regular r

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Operadores de las expresiones regulares


Sean r y s dos expresiones regulares.
(r)|(s). Denota a L(r) ∪ L(s). Disyunción.
(r)(s). Denota el lenguaje L(r)L(s). Concatenación.
(r)∗ . Denota (L(r))*. Cerradura de Kleene.
(r)+ . Denota (L(r))+. Cerradura positiva.
(r)?. Denota a L(r)? = L(r) ∪ {ε}. Operador de opción.
[..] Clases de caracteres.
∼(r). Negación.
[∧r]. Negación.
(r) la expresión regular r

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Operadores de las expresiones regulares


Sean r y s dos expresiones regulares.
(r)|(s). Denota a L(r) ∪ L(s). Disyunción.
(r)(s). Denota el lenguaje L(r)L(s). Concatenación.
(r)∗ . Denota (L(r))*. Cerradura de Kleene.
(r)+ . Denota (L(r))+. Cerradura positiva.
(r)?. Denota a L(r)? = L(r) ∪ {ε}. Operador de opción.
[..] Clases de caracteres.
∼(r). Negación.
[∧r]. Negación.
(r) la expresión regular r

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Precedencia y asociatividad
Los operadores *,+ e ? tienen la precedencia más
alta y son asociativos por la izquierda.
La concatenación tiene el segundo nivel de
precedencia más alto y es asociativo por la
izquierda.
La disyunción(|) tiene la precedencia mas baja y es
asociativo por la izquierda

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Precedencia y asociatividad
Los operadores *,+ e ? tienen la precedencia más
alta y son asociativos por la izquierda.
La concatenación tiene el segundo nivel de
precedencia más alto y es asociativo por la
izquierda.
La disyunción(|) tiene la precedencia mas baja y es
asociativo por la izquierda

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Precedencia y asociatividad
Los operadores *,+ e ? tienen la precedencia más
alta y son asociativos por la izquierda.
La concatenación tiene el segundo nivel de
precedencia más alto y es asociativo por la
izquierda.
La disyunción(|) tiene la precedencia mas baja y es
asociativo por la izquierda

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Precedencia y asociatividad
Los operadores *,+ e ? tienen la precedencia más
alta y son asociativos por la izquierda.
La concatenación tiene el segundo nivel de
precedencia más alto y es asociativo por la
izquierda.
La disyunción(|) tiene la precedencia mas baja y es
asociativo por la izquierda

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

LEY DESCRIPCIÓN
r|s=s|r | es conmutativo.
r | ( s | t) = (r | s) | t | es asociativo
r(st) = (rs)t La concatenación es asociativa
r(s|t) = rs | rt la concatenación se distribuye
(s | t)r = sr | tr sobre la disyunción
εr = rε = r ε es la identidad para la concatenación
r∗ = ( r| ε)∗ ε garantiza la cerradura
r∗∗ = r∗ * es idempotente

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

LEY DESCRIPCIÓN
r|s=s|r | es conmutativo.
r | ( s | t) = (r | s) | t | es asociativo
r(st) = (rs)t La concatenación es asociativa
r(s|t) = rs | rt la concatenación se distribuye
(s | t)r = sr | tr sobre la disyunción
εr = rε = r ε es la identidad para la concatenación
r∗ = ( r| ε)∗ ε garantiza la cerradura
r∗∗ = r∗ * es idempotente

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

LEY DESCRIPCIÓN
r|s=s|r | es conmutativo.
r | ( s | t) = (r | s) | t | es asociativo
r(st) = (rs)t La concatenación es asociativa
r(s|t) = rs | rt la concatenación se distribuye
(s | t)r = sr | tr sobre la disyunción
εr = rε = r ε es la identidad para la concatenación
r∗ = ( r| ε)∗ ε garantiza la cerradura
r∗∗ = r∗ * es idempotente

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

LEY DESCRIPCIÓN
r|s=s|r | es conmutativo.
r | ( s | t) = (r | s) | t | es asociativo
r(st) = (rs)t La concatenación es asociativa
r(s|t) = rs | rt la concatenación se distribuye
(s | t)r = sr | tr sobre la disyunción
εr = rε = r ε es la identidad para la concatenación
r∗ = ( r| ε)∗ ε garantiza la cerradura
r∗∗ = r∗ * es idempotente

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

LEY DESCRIPCIÓN
r|s=s|r | es conmutativo.
r | ( s | t) = (r | s) | t | es asociativo
r(st) = (rs)t La concatenación es asociativa
r(s|t) = rs | rt la concatenación se distribuye
(s | t)r = sr | tr sobre la disyunción
εr = rε = r ε es la identidad para la concatenación
r∗ = ( r| ε)∗ ε garantiza la cerradura
r∗∗ = r∗ * es idempotente

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

LEY DESCRIPCIÓN
r|s=s|r | es conmutativo.
r | ( s | t) = (r | s) | t | es asociativo
r(st) = (rs)t La concatenación es asociativa
r(s|t) = rs | rt la concatenación se distribuye
(s | t)r = sr | tr sobre la disyunción
εr = rε = r ε es la identidad para la concatenación
r∗ = ( r| ε)∗ ε garantiza la cerradura
r∗∗ = r∗ * es idempotente

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

LEY DESCRIPCIÓN
r|s=s|r | es conmutativo.
r | ( s | t) = (r | s) | t | es asociativo
r(st) = (rs)t La concatenación es asociativa
r(s|t) = rs | rt la concatenación se distribuye
(s | t)r = sr | tr sobre la disyunción
εr = rε = r ε es la identidad para la concatenación
r∗ = ( r| ε)∗ ε garantiza la cerradura
r∗∗ = r∗ * es idempotente

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

LEY DESCRIPCIÓN
r|s=s|r | es conmutativo.
r | ( s | t) = (r | s) | t | es asociativo
r(st) = (rs)t La concatenación es asociativa
r(s|t) = rs | rt la concatenación se distribuye
(s | t)r = sr | tr sobre la disyunción
εr = rε = r ε es la identidad para la concatenación
r∗ = ( r| ε)∗ ε garantiza la cerradura
r∗∗ = r∗ * es idempotente

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

A cada expresión regular se le asigna un nombre,


para poder utilizarlo en expresiones regulares
subsiguientes como si fueran sı́mbolos del alfabeto.
d1 → r1
d2 → r2
...
dn → r n
Donde:
Cada di es un nuevo sı́mbolo que no está en Σ y no es
igual a ninguna otra di ..di−1 .
Cada ri es una expresión regular sobre el alfabeto
Σ∪{d1 , d2 ,..., di−1 }

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

A cada expresión regular se le asigna un nombre,


para poder utilizarlo en expresiones regulares
subsiguientes como si fueran sı́mbolos del alfabeto.
d1 → r1
d2 → r2
...
dn → r n
Donde:
Cada di es un nuevo sı́mbolo que no está en Σ y no es
igual a ninguna otra di ..di−1 .
Cada ri es una expresión regular sobre el alfabeto
Σ∪{d1 , d2 ,..., di−1 }

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

A cada expresión regular se le asigna un nombre,


para poder utilizarlo en expresiones regulares
subsiguientes como si fueran sı́mbolos del alfabeto.
d1 → r1
d2 → r2
...
dn → r n
Donde:
Cada di es un nuevo sı́mbolo que no está en Σ y no es
igual a ninguna otra di ..di−1 .
Cada ri es una expresión regular sobre el alfabeto
Σ∪{d1 , d2 ,..., di−1 }

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

A cada expresión regular se le asigna un nombre,


para poder utilizarlo en expresiones regulares
subsiguientes como si fueran sı́mbolos del alfabeto.
d1 → r1
d2 → r2
...
dn → r n
Donde:
Cada di es un nuevo sı́mbolo que no está en Σ y no es
igual a ninguna otra di ..di−1 .
Cada ri es una expresión regular sobre el alfabeto
Σ∪{d1 , d2 ,..., di−1 }

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Ejercicios
1 Expresión regular para los identificadores del
lenguaje C
2 Expresión regular para los números decimales sin
signo del lenguaje C
3 Expresión regular para las palabras reservadas: int,
float, double, char, void.
4 Expresión regular para cualquier secuencia de
espacios en blanco.
5 Expresión regular para los comentarios del lenguaje C

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Ejercicios
1 Expresión regular para los identificadores del
lenguaje C
2 Expresión regular para los números decimales sin
signo del lenguaje C
3 Expresión regular para las palabras reservadas: int,
float, double, char, void.
4 Expresión regular para cualquier secuencia de
espacios en blanco.
5 Expresión regular para los comentarios del lenguaje C

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Ejercicios
1 Expresión regular para los identificadores del
lenguaje C
2 Expresión regular para los números decimales sin
signo del lenguaje C
3 Expresión regular para las palabras reservadas: int,
float, double, char, void.
4 Expresión regular para cualquier secuencia de
espacios en blanco.
5 Expresión regular para los comentarios del lenguaje C

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Ejercicios
1 Expresión regular para los identificadores del
lenguaje C
2 Expresión regular para los números decimales sin
signo del lenguaje C
3 Expresión regular para las palabras reservadas: int,
float, double, char, void.
4 Expresión regular para cualquier secuencia de
espacios en blanco.
5 Expresión regular para los comentarios del lenguaje C

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Ejercicios
1 Expresión regular para los identificadores del
lenguaje C
2 Expresión regular para los números decimales sin
signo del lenguaje C
3 Expresión regular para las palabras reservadas: int,
float, double, char, void.
4 Expresión regular para cualquier secuencia de
espacios en blanco.
5 Expresión regular para los comentarios del lenguaje C

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Expresión Regular

Ejercicios
1 Expresión regular para los identificadores del
lenguaje C
2 Expresión regular para los números decimales sin
signo del lenguaje C
3 Expresión regular para las palabras reservadas: int,
float, double, char, void.
4 Expresión regular para cualquier secuencia de
espacios en blanco.
5 Expresión regular para los comentarios del lenguaje C

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Sección 6 Autómata Finito Determinista

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Autómata Finito Determinista

Un autómata finito determinista (AFD) es una máquina


finita de estados descrita por una tupla de cinco valores.

D = ( Q, Σ, δ, s, F)

Donde:
Q es el conjunto de estados de la máquina
Σ es el alfabeto de la máquina.
δ es la función de transición. δ: Q×Σ →Q
s0 es el estado inicial y s0 ∈ Q.
F: es el conjunto de estados de aceptación. F ⊆ Q

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Autómata Finito Determinista

Un autómata finito determinista (AFD) es una máquina


finita de estados descrita por una tupla de cinco valores.

D = ( Q, Σ, δ, s, F)

Donde:
Q es el conjunto de estados de la máquina
Σ es el alfabeto de la máquina.
δ es la función de transición. δ: Q×Σ →Q
s0 es el estado inicial y s0 ∈ Q.
F: es el conjunto de estados de aceptación. F ⊆ Q

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Autómata Finito Determinista

Un autómata finito determinista (AFD) es una máquina


finita de estados descrita por una tupla de cinco valores.

D = ( Q, Σ, δ, s, F)

Donde:
Q es el conjunto de estados de la máquina
Σ es el alfabeto de la máquina.
δ es la función de transición. δ: Q×Σ →Q
s0 es el estado inicial y s0 ∈ Q.
F: es el conjunto de estados de aceptación. F ⊆ Q

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Autómata Finito Determinista

Un autómata finito determinista (AFD) es una máquina


finita de estados descrita por una tupla de cinco valores.

D = ( Q, Σ, δ, s, F)

Donde:
Q es el conjunto de estados de la máquina
Σ es el alfabeto de la máquina.
δ es la función de transición. δ: Q×Σ →Q
s0 es el estado inicial y s0 ∈ Q.
F: es el conjunto de estados de aceptación. F ⊆ Q

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Autómata Finito Determinista

Un autómata finito determinista (AFD) es una máquina


finita de estados descrita por una tupla de cinco valores.

D = ( Q, Σ, δ, s, F)

Donde:
Q es el conjunto de estados de la máquina
Σ es el alfabeto de la máquina.
δ es la función de transición. δ: Q×Σ →Q
s0 es el estado inicial y s0 ∈ Q.
F: es el conjunto de estados de aceptación. F ⊆ Q

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Autómata Finito Determinista

Un AFD puede ser representado mediante un diagrama


de estados.

dı́gito dı́gito

dı́gito . dı́gito
q0 q1 q2 q3
.

Un nodo inicial marcado con una flecha.


Los estados finales o de aceptación con cı́rculos
dobles.
Las transiciones solo pueden tener un sı́mbolo del
alfabeto o el nombre de una expresión regular.
AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Autómata Finito Determinista

Un AFD puede ser representado mediante un diagrama


de estados.

dı́gito dı́gito

dı́gito . dı́gito
q0 q1 q2 q3
.

Un nodo inicial marcado con una flecha.


Los estados finales o de aceptación con cı́rculos
dobles.
Las transiciones solo pueden tener un sı́mbolo del
alfabeto o el nombre de una expresión regular.
AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Autómata Finito Determinista

Un AFD puede ser representado mediante un diagrama


de estados.

dı́gito dı́gito

dı́gito . dı́gito
q0 q1 q2 q3
.

Un nodo inicial marcado con una flecha.


Los estados finales o de aceptación con cı́rculos
dobles.
Las transiciones solo pueden tener un sı́mbolo del
alfabeto o el nombre de una expresión regular.
AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Autómata Finito Determinista

Un AFD se puede representar mediante una tabla de


transiciones.

Edo dı́gito punto otro descripción


→0 1 2 – –
1* 1 2 – números enteros
2 3 – – –
3* 3 – – números de punto flotante

El estado inicial marcado con una flecha.


Los estados finales marcados con un asterisco.
Las transiciones son las columnas de la tabla.
Los estados son los renglones de la tabla.
AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Autómata Finito Determinista

Un AFD se puede representar mediante una tabla de


transiciones.

Edo dı́gito punto otro descripción


→0 1 2 – –
1* 1 2 – números enteros
2 3 – – –
3* 3 – – números de punto flotante

El estado inicial marcado con una flecha.


Los estados finales marcados con un asterisco.
Las transiciones son las columnas de la tabla.
Los estados son los renglones de la tabla.
AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Autómata Finito Determinista

Un AFD se puede representar mediante una tabla de


transiciones.

Edo dı́gito punto otro descripción


→0 1 2 – –
1* 1 2 – números enteros
2 3 – – –
3* 3 – – números de punto flotante

El estado inicial marcado con una flecha.


Los estados finales marcados con un asterisco.
Las transiciones son las columnas de la tabla.
Los estados son los renglones de la tabla.
AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Autómata Finito Determinista

Un AFD se puede representar mediante una tabla de


transiciones.

Edo dı́gito punto otro descripción


→0 1 2 – –
1* 1 2 – números enteros
2 3 – – –
3* 3 – – números de punto flotante

El estado inicial marcado con una flecha.


Los estados finales marcados con un asterisco.
Las transiciones son las columnas de la tabla.
Los estados son los renglones de la tabla.
AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Sección 7 Elementos punteados

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Obtención del AFD que reconoce a una Expresión Regular

Elementos Punteados
Sea r → αβ una expresión regular.
Si agregamos un punto • a la expresión regular r
Obtenemos:
1 r→ •αβ
2 r→ α • β
3 r→ αβ•
Que son llamados elementos punteados y de forma
abreviada simplemente elementos.
Donde:
α y β son sı́mbolos del alfabeto u otras expresiones
regulares.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Obtención del AFD que reconoce a una Expresión Regular

Elementos Punteados
Sea r → αβ una expresión regular.
Si agregamos un punto • a la expresión regular r
Obtenemos:
1 r→ •αβ
2 r→ α • β
3 r→ αβ•
Que son llamados elementos punteados y de forma
abreviada simplemente elementos.
Donde:
α y β son sı́mbolos del alfabeto u otras expresiones
regulares.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Obtención del AFD que reconoce a una Expresión Regular

Elementos Punteados
Sea r → αβ una expresión regular.
Si agregamos un punto • a la expresión regular r
Obtenemos:
1 r→ •αβ
2 r→ α • β
3 r→ αβ•
Que son llamados elementos punteados y de forma
abreviada simplemente elementos.
Donde:
α y β son sı́mbolos del alfabeto u otras expresiones
regulares.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Obtención del AFD que reconoce a una Expresión Regular

Elementos Punteados
Sea r → αβ una expresión regular.
Si agregamos un punto • a la expresión regular r
Obtenemos:
1 r→ •αβ
2 r→ α • β
3 r→ αβ•
Que son llamados elementos punteados y de forma
abreviada simplemente elementos.
Donde:
α y β son sı́mbolos del alfabeto u otras expresiones
regulares.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Obtención del AFD que reconoce a una Expresión Regular

Elementos Punteados
Sea r → αβ una expresión regular.
Si agregamos un punto • a la expresión regular r
Obtenemos:
1 r→ •αβ
2 r→ α • β
3 r→ αβ•
Que son llamados elementos punteados y de forma
abreviada simplemente elementos.
Donde:
α y β son sı́mbolos del alfabeto u otras expresiones
regulares.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Obtención del AFD que reconoce a una Expresión Regular

Elementos Punteados
Sea r → αβ una expresión regular.
Si agregamos un punto • a la expresión regular r
Obtenemos:
1 r→ •αβ
2 r→ α • β
3 r→ αβ•
Que son llamados elementos punteados y de forma
abreviada simplemente elementos.
Donde:
α y β son sı́mbolos del alfabeto u otras expresiones
regulares.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Obtención del AFD que reconoce a una Expresión Regular

Elementos Punteados
Sea r → αβ una expresión regular.
Si agregamos un punto • a la expresión regular r
Obtenemos:
1 r→ •αβ
2 r→ α • β
3 r→ αβ•
Que son llamados elementos punteados y de forma
abreviada simplemente elementos.
Donde:
α y β son sı́mbolos del alfabeto u otras expresiones
regulares.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Obtención del AFD que reconoce a una Expresión Regular

Elementos Punteados
Sea r → αβ una expresión regular.
Si agregamos un punto • a la expresión regular r
Obtenemos:
1 r→ •αβ
2 r→ α • β
3 r→ αβ•
Que son llamados elementos punteados y de forma
abreviada simplemente elementos.
Donde:
α y β son sı́mbolos del alfabeto u otras expresiones
regulares.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Obtención del AFD que reconoce a una Expresión Regular

Elementos Básicos
Un elemento es básico si después del punto sigue un
sı́mbolo del alfabeto o el nombre de una expresión
regular. (Elemento de desplazamiento)
También un elemento es básico si el punto se encuentra
al final del elemento.(Elemento de reducción)

Ejemplos:
r→ •a
r→ •dı́gito
r→letra(dı́gito)*•

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Obtención del AFD que reconoce a una Expresión Regular

Elementos Básicos
Un elemento es básico si después del punto sigue un
sı́mbolo del alfabeto o el nombre de una expresión
regular. (Elemento de desplazamiento)
También un elemento es básico si el punto se encuentra
al final del elemento.(Elemento de reducción)

Ejemplos:
r→ •a
r→ •dı́gito
r→letra(dı́gito)*•

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Obtención del AFD que reconoce a una Expresión Regular

Elementos Básicos
Un elemento es básico si después del punto sigue un
sı́mbolo del alfabeto o el nombre de una expresión
regular. (Elemento de desplazamiento)
También un elemento es básico si el punto se encuentra
al final del elemento.(Elemento de reducción)

Ejemplos:
r→ •a
r→ •dı́gito
r→letra(dı́gito)*•

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Obtención del AFD que reconoce a una Expresión Regular

Elementos Básicos
Un elemento es básico si después del punto sigue un
sı́mbolo del alfabeto o el nombre de una expresión
regular. (Elemento de desplazamiento)
También un elemento es básico si el punto se encuentra
al final del elemento.(Elemento de reducción)

Ejemplos:
r→ •a
r→ •dı́gito
r→letra(dı́gito)*•

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Obtención del AFD que reconoce a una Expresión Regular

Elementos Básicos
Un elemento es básico si después del punto sigue un
sı́mbolo del alfabeto o el nombre de una expresión
regular. (Elemento de desplazamiento)
También un elemento es básico si el punto se encuentra
al final del elemento.(Elemento de reducción)

Ejemplos:
r→ •a
r→ •dı́gito
r→letra(dı́gito)*•

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Obtención del AFD que reconoce a una Expresión Regular

Para los elementos de desplazamiento, la regla para


mover el punto es simple. Si el punto está frente a un
caracter c y la entrada tiene una c entonces se avanza
a la siguiente posición.

r→ α • c β c ⇒ r→ α c • β

Nota:
Los conjuntos de caracteres [abc...] se comportan de
manera similar, excepto que el caracter de entrada
puede coincidir con cualquiera de los del conjunto.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Obtención del AFD que reconoce a una Expresión Regular

Para los elementos de desplazamiento, la regla para


mover el punto es simple. Si el punto está frente a un
caracter c y la entrada tiene una c entonces se avanza
a la siguiente posición.

r→ α • c β c ⇒ r→ α c • β

Nota:
Los conjuntos de caracteres [abc...] se comportan de
manera similar, excepto que el caracter de entrada
puede coincidir con cualquiera de los del conjunto.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Obtención del AFD que reconoce a una Expresión Regular

Elementos No Básico
Un elemento es no básico cuando en frente del punto se
encuentra una expresión regular afectada por un
operador. Entonces es necesario reemplazar este
elemento por uno o varios elementos básicos.
Se usan paréntesis para no confundir con los básicos.

Ejemplos:
r→ •(a)+
r→ •(dı́gito| letra)
r→letra•(dı́gito)*

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Obtención del AFD que reconoce a una Expresión Regular

Elementos No Básico
Un elemento es no básico cuando en frente del punto se
encuentra una expresión regular afectada por un
operador. Entonces es necesario reemplazar este
elemento por uno o varios elementos básicos.
Se usan paréntesis para no confundir con los básicos.

Ejemplos:
r→ •(a)+
r→ •(dı́gito| letra)
r→letra•(dı́gito)*

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Obtención del AFD que reconoce a una Expresión Regular

Elementos No Básico
Un elemento es no básico cuando en frente del punto se
encuentra una expresión regular afectada por un
operador. Entonces es necesario reemplazar este
elemento por uno o varios elementos básicos.
Se usan paréntesis para no confundir con los básicos.

Ejemplos:
r→ •(a)+
r→ •(dı́gito| letra)
r→letra•(dı́gito)*

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Obtención del AFD que reconoce a una Expresión Regular

Elementos No Básico
Un elemento es no básico cuando en frente del punto se
encuentra una expresión regular afectada por un
operador. Entonces es necesario reemplazar este
elemento por uno o varios elementos básicos.
Se usan paréntesis para no confundir con los básicos.

Ejemplos:
r→ •(a)+
r→ •(dı́gito| letra)
r→letra•(dı́gito)*

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Obtención del AFD que reconoce a una Expresión Regular

Elementos No Básico
Un elemento es no básico cuando en frente del punto se
encuentra una expresión regular afectada por un
operador. Entonces es necesario reemplazar este
elemento por uno o varios elementos básicos.
Se usan paréntesis para no confundir con los básicos.

Ejemplos:
r→ •(a)+
r→ •(dı́gito| letra)
r→letra•(dı́gito)*

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico

Elemento Original Elementos Básicos


α • (β)γ α(•β)γ
α(β•)γ α(β) • γ
α • (β)∗ γ α(•β)∗ γ
α(β)∗ • γ
α(β•)∗ γ α(•β)∗ γ
α(β)∗ • γ
α • (β)+ γ α(•β)+ γ
α(β•)+ γ α(•β)+ ∗ γ
α(β)+ • γ
α • (β)?γ α(•β)?γ
α(β)? • γ

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico

Elemento Original Elementos Básicos


α • (β)γ α(•β)γ
α(β•)γ α(β) • γ
α • (β)∗ γ α(•β)∗ γ
α(β)∗ • γ
α(β•)∗ γ α(•β)∗ γ
α(β)∗ • γ
α • (β)+ γ α(•β)+ γ
α(β•)+ γ α(•β)+ ∗ γ
α(β)+ • γ
α • (β)?γ α(•β)?γ
α(β)? • γ

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico

Elemento Original Elementos Básicos


α • (β)γ α(•β)γ
α(β•)γ α(β) • γ
α • (β)∗ γ α(•β)∗ γ
α(β)∗ • γ
α(β•)∗ γ α(•β)∗ γ
α(β)∗ • γ
α • (β)+ γ α(•β)+ γ
α(β•)+ γ α(•β)+ ∗ γ
α(β)+ • γ
α • (β)?γ α(•β)?γ
α(β)? • γ

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico

Elemento Original Elementos Básicos


α • (β)γ α(•β)γ
α(β•)γ α(β) • γ
α • (β)∗ γ α(•β)∗ γ
α(β)∗ • γ
α(β•)∗ γ α(•β)∗ γ
α(β)∗ • γ
α • (β)+ γ α(•β)+ γ
α(β•)+ γ α(•β)+ ∗ γ
α(β)+ • γ
α • (β)?γ α(•β)?γ
α(β)? • γ

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico

Elemento Original Elementos Básicos


α • (β)γ α(•β)γ
α(β•)γ α(β) • γ
α • (β)∗ γ α(•β)∗ γ
α(β)∗ • γ
α(β•)∗ γ α(•β)∗ γ
α(β)∗ • γ
α • (β)+ γ α(•β)+ γ
α(β•)+ γ α(•β)+ ∗ γ
α(β)+ • γ
α • (β)?γ α(•β)?γ
α(β)? • γ

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico

Elemento Original Elementos Básicos


α • (β)γ α(•β)γ
α(β•)γ α(β) • γ
α • (β)∗ γ α(•β)∗ γ
α(β)∗ • γ
α(β•)∗ γ α(•β)∗ γ
α(β)∗ • γ
α • (β)+ γ α(•β)+ γ
α(β•)+ γ α(•β)+ ∗ γ
α(β)+ • γ
α • (β)?γ α(•β)?γ
α(β)? • γ

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico

Elemento Original Elementos Básicos


α • (β)γ α(•β)γ
α(β•)γ α(β) • γ
α • (β)∗ γ α(•β)∗ γ
α(β)∗ • γ
α(β•)∗ γ α(•β)∗ γ
α(β)∗ • γ
α • (β)+ γ α(•β)+ γ
α(β•)+ γ α(•β)+ ∗ γ
α(β)+ • γ
α • (β)?γ α(•β)?γ
α(β)? • γ

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico

Elemento Original Elementos Básicos


α • (β)γ α(•β)γ
α(β•)γ α(β) • γ
α • (β)∗ γ α(•β)∗ γ
α(β)∗ • γ
α(β•)∗ γ α(•β)∗ γ
α(β)∗ • γ
α • (β)+ γ α(•β)+ γ
α(β•)+ γ α(•β)+ ∗ γ
α(β)+ • γ
α • (β)?γ α(•β)?γ
α(β)? • γ

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico

Elemento Original Elementos Básicos


α(β•)?γ α(β)? • γ
α • εγ αε • γ
α • (β1 |β2 |...|βn )γ α(•β1 |β2 |...|βn )γ
α(β1 | • β2 |...|βn )γ
...
α(β1 |β2 |...| • βn )γ
α(...|βi • |...)γ α(...|βi |...) • γ

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico

Elemento Original Elementos Básicos


α(β•)?γ α(β)? • γ
α • εγ αε • γ
α • (β1 |β2 |...|βn )γ α(•β1 |β2 |...|βn )γ
α(β1 | • β2 |...|βn )γ
...
α(β1 |β2 |...| • βn )γ
α(...|βi • |...)γ α(...|βi |...) • γ

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico

Elemento Original Elementos Básicos


α(β•)?γ α(β)? • γ
α • εγ αε • γ
α • (β1 |β2 |...|βn )γ α(•β1 |β2 |...|βn )γ
α(β1 | • β2 |...|βn )γ
...
α(β1 |β2 |...| • βn )γ
α(...|βi • |...)γ α(...|βi |...) • γ

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico

Elemento Original Elementos Básicos


α(β•)?γ α(β)? • γ
α • εγ αε • γ
α • (β1 |β2 |...|βn )γ α(•β1 |β2 |...|βn )γ
α(β1 | • β2 |...|βn )γ
...
α(β1 |β2 |...| • βn )γ
α(...|βi • |...)γ α(...|βi |...) • γ

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico

Elemento Original Elementos Básicos


α(β•)?γ α(β)? • γ
α • εγ αε • γ
α • (β1 |β2 |...|βn )γ α(•β1 |β2 |...|βn )γ
α(β1 | • β2 |...|βn )γ
...
α(β1 |β2 |...| • βn )γ
α(...|βi • |...)γ α(...|βi |...) • γ

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico

Función Cerradura-ε

Entrada: Un cojunto de elementos q


Salida: Un cojunto de elementos básicos q’
1 q’= q;
2 v={};
3 mientras exista algun elemento (i) no básico ∈ q’
hacer
4 q’ = q’ - {i};
5 v = v ∪ {i};
6 q’ = q’ ∪ transformar en basico(i) - v;
7 fin
8 devolver q’;

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico

Función Goto

Entrada: Un cojunto de elementos q y un sı́mbolo a ∈ Σ


Salida: Un cojunto de elementos básicos q’
1 Hacer q’= {};
2 para cada elemento r→ α•aβ ∈ q hacer
3 si r→ αa • β ∈/ q’ entonces
4 q’ = q’ ∪ {r→ αa • β}
5 fin
6 fin
7 devolver Cerradura(q’);

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico

Algoritmo para obtener el AFD que reconoce una E. R


Entrada: Un cojunto de Expresiones Regulares {r1 , r2 , ...,
rn }
Salida: Un Autómata Finito Determinı́stico D
1 Hacer Q= {q0 =Cerradura({r1 → •α,r2 → •β, ...,
rn → •ω})};
2 repetir
3 para cada estado qi en Q hacer
4 para cada a ∈ Σ hacer
5 si goto(qi , q) ∈
/ Q entonces
6 Q = Q ∪ goto(qi , a);
7 fin
8 fin
9 fin
10 hasta que no se agreguen estados nuevos;
AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Sección 8 Minimización de un AFD

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Entrada: Un AFD
Salida: El AFD mı́nimo
1 Crear una partición Π con dos grupos, los estados de
aceptación y los estados de no aceptación;
2 Πnueva = Π;
3 repetir
4 para cada grupo G ∈ Πnueva hacer
5 Particionar en subgrupos, de forma que dos
estados s y t estén en el mismo subrupo, si y
sólo si ∀ a ∈ Σ, s y t tienen transiciones sobre a
hacia el mismo subgrupo de Πnueva ;
6 Sustituir G en Πnueva por el conjunto de los
subgrupos formados;
7 fin
8 hasta que no se formen nuevos subgrupos;

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Minimización

Consideraciones del algoritmo


1 Los estados finales no se pueden mezclar con los
estados no finales.
2 Un estado que se ha separado de un grupo NUNCA
puede volver a juntarse en otro grupo.
3 Tanto los estados finales como los no finales, se
pueden separar en subgrupos.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Minimización

Consideraciones del algoritmo


1 Los estados finales no se pueden mezclar con los
estados no finales.
2 Un estado que se ha separado de un grupo NUNCA
puede volver a juntarse en otro grupo.
3 Tanto los estados finales como los no finales, se
pueden separar en subgrupos.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Minimización

Consideraciones del algoritmo


1 Los estados finales no se pueden mezclar con los
estados no finales.
2 Un estado que se ha separado de un grupo NUNCA
puede volver a juntarse en otro grupo.
3 Tanto los estados finales como los no finales, se
pueden separar en subgrupos.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Minimización

Obtener el autómata mı́nimo del siguiente autómata que


se representa en la siguiente tabla:

Edo a b
→0 1 2
1 1 3
2 1 2
3 1 4
4* 1 2

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Minimización

Dividimos como paso inicial el autómata en dos grandes


grupos, los estados de no aceptación (α)y los estados de
aceptación (β). Basados en la tabla original se calcula a
que grupo se dirige cada estado con cada sı́mbolo del
alfabeto, y en la nueva tabla se anotan los grupos en
lugar de los estados.

Grupo Edo a b
α 0 α α
1 α α
2 α α
3 α β
β 4* α α

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Minimización

Del paso anterior, se puede observar que el estado tres


debe separarse del grupo α y renombramos los grupos

Grupo Edo a b
α 0 α α
1 α β
2 α α
β 3 α γ
γ 4* α α

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Minimización

Del grupo α se separa el estado 1 y renombramos los


grupos

Grupo Edo a b
α 0 β α
2 β α
β 1 β γ
γ 3 β δ
δ 4* β α

Se puede observar que ya no se forman nuevos grupos.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Minimización

El autómata final queda como sigue:

EDO a b
→α β α
β β γ
γ β δ
δ* β α

El estado inicial del nuevo autómata es el grupo que


contiene el estado inicial del AFD original
Los estados finales son los grupos que contienen a los
estados finales.

AUMM
Introducción Tokens Errores léxicos Construcción de un Analizador Léxico Expresiones Regulares Autómata Finito De

Análisis Léxico
Minimización

El autómata final queda como sigue:

EDO a b
→α β α
β β γ
γ β δ
δ* β α

El estado inicial del nuevo autómata es el grupo que


contiene el estado inicial del AFD original
Los estados finales son los grupos que contienen a los
estados finales.

AUMM

También podría gustarte