Академический Документы
Профессиональный Документы
Культура Документы
PROCESADORES DE LENGUAJES
TEMA II: ANALISIS LEXICO
Programa
Programa
1 Introduccion
Programa
1 Introduccion
Programa
1 Introduccion
Programa
1 Introduccion
Programa
1 Introduccion
1 Introduccion
Contenido de la seccion
1 Introduccion
El analisis lexico en el proceso de traduccion
Componentes Lexicos
Tabla de Smbolos
Palabras claves
Ejemplo
Autonoma del analizador lexico
Introduccion
El analisis lexico en el proceso de traduccion
Analisis Lexico
Primera fase del proceso de traduccion
Lee el codigo fuente caracter a caracter
Genera los componentes lexicos
Procedimiento auxiliar del Analisis Sintactico
Crea la Tabla de Smbolos
El Gestor de errores procesa los errores lexicos detectados
Introduccion
El analisis lexico en el proceso de traduccion
Analisis Lexico
Primera fase del proceso de traduccion
Lee el codigo fuente caracter a caracter
Genera los componentes lexicos
Procedimiento auxiliar del Analisis Sintactico
Crea la Tabla de Smbolos
El Gestor de errores procesa los errores lexicos detectados
Introduccion
El analisis lexico en el proceso de traduccion
Analisis Lexico
Primera fase del proceso de traduccion
Lee el codigo fuente caracter a caracter
Genera los componentes lexicos
Procedimiento auxiliar del Analisis Sintactico
Crea la Tabla de Smbolos
El Gestor de errores procesa los errores lexicos detectados
Introduccion
El analisis lexico en el proceso de traduccion
Analisis Lexico
Primera fase del proceso de traduccion
Lee el codigo fuente caracter a caracter
Genera los componentes lexicos
Procedimiento auxiliar del Analisis Sintactico
Crea la Tabla de Smbolos
El Gestor de errores procesa los errores lexicos detectados
Introduccion
El analisis lexico en el proceso de traduccion
Analisis Lexico
Primera fase del proceso de traduccion
Lee el codigo fuente caracter a caracter
Genera los componentes lexicos
Procedimiento auxiliar del Analisis Sintactico
Crea la Tabla de Smbolos
El Gestor de errores procesa los errores lexicos detectados
Introduccion
El analisis lexico en el proceso de traduccion
Analisis Lexico
Primera fase del proceso de traduccion
Lee el codigo fuente caracter a caracter
Genera los componentes lexicos
Procedimiento auxiliar del Analisis Sintactico
Crea la Tabla de Smbolos
El Gestor de errores procesa los errores lexicos detectados
Introduccion
El analisis lexico en el proceso de traduccion
Codigo Fuente
Analizador Lexico
Introduccion
El analisis lexico en el proceso de traduccion
Codigo Fuente
Tabla de Smbolos
Analizador Lexico
Introduccion
El analisis lexico en el proceso de traduccion
Codigo Fuente
Analizador Lexico
Introduccion
El analisis lexico en el proceso de traduccion
Codigo Fuente
Analizador Lexico
Componentes Lexicos
Contenido de la seccion
1 Introduccion
El analisis lexico en el proceso de traduccion
Componentes Lexicos
Tabla de Smbolos
Palabras claves
Ejemplo
Autonoma del analizador lexico
Introduccion
Componentes Lexicos
Ejemplo
Identificadores: variables, palabras claves, ...
Numeros
Cadenas de caracteres
Operadores: aritmeticos, relacionales, logicos, ...
Signos de puntuacion
Etc.
Introduccion
Componentes Lexicos
Ejemplo
Identificadores: variables, palabras claves, ...
Numeros
Cadenas de caracteres
Operadores: aritmeticos, relacionales, logicos, ...
Signos de puntuacion
Etc.
Introduccion
Componentes Lexicos
Ejemplo
Identificadores: variables, palabras claves, ...
Numeros
Cadenas de caracteres
Operadores: aritmeticos, relacionales, logicos, ...
Signos de puntuacion
Etc.
Introduccion
Componentes Lexicos
Ejemplo
Identificadores: variables, palabras claves, ...
Numeros
Cadenas de caracteres
Operadores: aritmeticos, relacionales, logicos, ...
Signos de puntuacion
Etc.
Introduccion
Componentes Lexicos
Ejemplo
Identificadores: variables, palabras claves, ...
Numeros
Cadenas de caracteres
Operadores: aritmeticos, relacionales, logicos, ...
Signos de puntuacion
Etc.
Introduccion
Componentes Lexicos
Ejemplo
Identificadores: variables, palabras claves, ...
Numeros
Cadenas de caracteres
Operadores: aritmeticos, relacionales, logicos, ...
Signos de puntuacion
Etc.
Introduccion
Componentes Lexicos
Ejemplo
Identificadores: variables, palabras claves, ...
Numeros
Cadenas de caracteres
Operadores: aritmeticos, relacionales, logicos, ...
Signos de puntuacion
Etc.
Introduccion
Componentes Lexicos
Introduccion
Componentes Lexicos
Introduccion
Componentes Lexicos
Contenido de la seccion
1 Introduccion
El analisis lexico en el proceso de traduccion
Componentes Lexicos
Tabla de Smbolos
Palabras claves
Ejemplo
Autonoma del analizador lexico
Introduccion
Tabla de Smbolos
Tabla de Smbolos
Se crea durante el Analisis Lexico
Puede almacenar:
+ Numeros
+ Cadenas
+ ...
+ Pero, sobre todo, identificadores
Introduccion
Tabla de Smbolos
Tabla de Smbolos
Cuando el analizador lexico reconoce un identificador:
+ Se inserta el identificador en la Tabla de Smbolos
+ Devuelve el componente lexico de identificador y un puntero o
ndice a su posicion en la Tabla de Smbolos
La informacion del identificador depende de su naturaleza:
+ Variable: tipo de dato, valor, ...
+ Funcion: numero y tipo de argumentos, ...
+ Etc.
Introduccion
Tabla de Smbolos
Tabla de Smbolos
Cuando el analizador lexico reconoce un identificador:
+ Se inserta el identificador en la Tabla de Smbolos
+ Devuelve el componente lexico de identificador y un puntero o
ndice a su posicion en la Tabla de Smbolos
La informacion del identificador depende de su naturaleza:
+ Variable: tipo de dato, valor, ...
+ Funcion: numero y tipo de argumentos, ...
+ Etc.
Introduccion
Tabla de Smbolos
Introduccion
Tabla de Smbolos
Nota
La informacion de los identificadores se completa durante todas las
fases del proceso de traduccion
Contenido de la seccion
1 Introduccion
El analisis lexico en el proceso de traduccion
Componentes Lexicos
Tabla de Smbolos
Palabras claves
Ejemplo
Autonoma del analizador lexico
Introduccion
Palabras claves
Ejemplo (PL/I)
IF (IF > 1) THEN THEN = 0;
Introduccion
Palabras claves
Ejemplo (PL/I)
IF (IF > 1) THEN THEN = 0;
Introduccion
Palabras claves
Ejemplo (PL/I)
IF (IF > 1) THEN THEN = 0;
Introduccion
Palabras claves
Palabras claves
Tipos de reconocimiento de las palabras claves:
1.- Implcito: preinstalacion en la Tabla de Smbolos
2.- Explcito: reconocimiento especfico de cada palabra clave.
Introduccion
Palabras claves
Palabras claves
Tipos de reconocimiento de las palabras claves:
1.- Implcito: preinstalacion en la Tabla de Smbolos
2.- Explcito: reconocimiento especfico de cada palabra clave.
Introduccion
Palabras claves
Palabras claves
Tipos de reconocimiento de las palabras claves:
1.- Implcito: preinstalacion en la Tabla de Smbolos
2.- Explcito: reconocimiento especfico de cada palabra clave.
Introduccion
Palabras claves
Palabras claves
1.- Preinstalacion en la Tabla de Smbolos:
+ Se almacena el nombre y el componente lexico
+ Al reconocer un identificador, se consulta la Tabla de Smbolos
para comprobar si es una palabra clave o no.
+ Ventajas
- La programacion del analizador lexico es mas sencilla
+ Inconvenientes
- El reconocimiento es mas lento
- Se necesita mas memoria para la Tabla de Smbolos
Introduccion
Palabras claves
Palabras claves
1.- Preinstalacion en la Tabla de Smbolos:
+ Se almacena el nombre y el componente lexico
+ Al reconocer un identificador, se consulta la Tabla de Smbolos
para comprobar si es una palabra clave o no.
+ Ventajas
- La programacion del analizador lexico es mas sencilla
+ Inconvenientes
- El reconocimiento es mas lento
- Se necesita mas memoria para la Tabla de Smbolos
Introduccion
Palabras claves
Palabras claves
1.- Preinstalacion en la Tabla de Smbolos:
+ Se almacena el nombre y el componente lexico
Ejemplo
Nombre Componente Lexico ... ...
if IF
while WHILE
...
Introduccion
Palabras claves
Palabras claves
1.- Preinstalacion en la Tabla de Smbolos:
+ Se almacena el nombre y el componente lexico
+ Al reconocer un identificador, se consulta la Tabla de Smbolos
para comprobar si es una palabra clave o no.
+ Ventajas
- La programacion del analizador lexico es mas sencilla
+ Inconvenientes
- El reconocimiento es mas lento
- Se necesita mas memoria para la Tabla de Smbolos
Introduccion
Palabras claves
Palabras claves
1.- Preinstalacion en la Tabla de Smbolos:
+ Se almacena el nombre y el componente lexico
+ Al reconocer un identificador, se consulta la Tabla de Smbolos
para comprobar si es una palabra clave o no.
+ Ventajas
- La programacion del analizador lexico es mas sencilla
+ Inconvenientes
- El reconocimiento es mas lento
- Se necesita mas memoria para la Tabla de Smbolos
Introduccion
Palabras claves
Palabras claves
1.- Preinstalacion en la Tabla de Smbolos:
+ Se almacena el nombre y el componente lexico
+ Al reconocer un identificador, se consulta la Tabla de Smbolos
para comprobar si es una palabra clave o no.
+ Ventajas
- La programacion del analizador lexico es mas sencilla
+ Inconvenientes
- El reconocimiento es mas lento
- Se necesita mas memoria para la Tabla de Smbolos
Introduccion
Palabras claves
Palabras claves
2.- Reconocimiento especfico de cada palabra clave.
+ Cada palabra clave es reconocida de forma independiente de
los demas identificadores y palabras claves
+ Ventajas
- El reconocimiento es mas rapido
- No se necesita aumentar la memoria de la Tabla de Smbolos:
las palabras claves no se almacenan
+ Inconvenientes
- La programacion del analizador lexico es mas compleja
Introduccion
Palabras claves
Palabras claves
2.- Reconocimiento especfico de cada palabra clave.
+ Cada palabra clave es reconocida de forma independiente de
los demas identificadores y palabras claves
+ Ventajas
- El reconocimiento es mas rapido
- No se necesita aumentar la memoria de la Tabla de Smbolos:
las palabras claves no se almacenan
+ Inconvenientes
- La programacion del analizador lexico es mas compleja
Introduccion
Palabras claves
Palabras claves
2.- Reconocimiento especfico de cada palabra clave.
+ Cada palabra clave es reconocida de forma independiente de
los demas identificadores y palabras claves
+ Ventajas
- El reconocimiento es mas rapido
- No se necesita aumentar la memoria de la Tabla de Smbolos:
las palabras claves no se almacenan
+ Inconvenientes
- La programacion del analizador lexico es mas compleja
Contenido de la seccion
1 Introduccion
El analisis lexico en el proceso de traduccion
Componentes Lexicos
Tabla de Smbolos
Palabras claves
Ejemplo
Autonoma del analizador lexico
Introduccion
Ejemplo
Ejemplo
Sentencia del lenguaje C
dividendo = divisor * cociente + resto ;
dividendo
+ Es reconocido como IDENTIFICADOR
+ Se devuelve el componente lexico y el puntero a la Tabla de
Smbolos
Introduccion
Ejemplo
Ejemplo
Sentencia del lenguaje C
dividendo = divisor * cociente + resto ;
Se eliminan
+ Espacios en blanco
+ Tabuladores
+ Saltos de lnea
Introduccion
Ejemplo
Ejemplo
Sentencia del lenguaje C
dividendo = divisor * cociente + resto ;
Signo =
+ Se devuelve el token de ASIGNACION
Introduccion
Ejemplo
Ejemplo
Sentencia del lenguaje C
dividendo = divisor * cociente + resto ;
Nota
El Analisis Sintactico solo necesita saber que se ha reconocido
el componente lexico ASIGNACION
No le importa si el smbolo es = o := o cualquier otro
No interesa el texto concreto, sino la categora a la que
pertenece
Introduccion
Ejemplo
Ejemplo
Sentencia del lenguaje C
dividendo = divisor * cociente + resto ;
divisor
+ Es reconocido como IDENTIFICADOR
+ Se devuelve el componente lexico y el puntero a la Tabla de
Smbolos
Introduccion
Ejemplo
Ejemplo
Sentencia del lenguaje C
dividendo = divisor * cociente + resto ;
Signo *
+ Se devuelve el token de PRODUCTO
Introduccion
Ejemplo
Ejemplo
Sentencia del lenguaje C
dividendo = divisor * cociente + resto ;
cociente
+ Es reconocido como IDENTIFICADOR
+ Se devuelve el componente lexico y el puntero a la Tabla de
Smbolos
Introduccion
Ejemplo
Ejemplo
Sentencia del lenguaje C
dividendo = divisor * cociente + resto ;
Signo +
+ Se devuelve el token de SUMA
Introduccion
Ejemplo
Ejemplo
Sentencia del lenguaje C
dividendo = divisor * cociente + resto ;
resto
+ Es reconocido como IDENTIFICADOR
+ Se devuelve el componente lexico y el puntero a la Tabla de
Smbolos
Introduccion
Ejemplo
Ejemplo
Sentencia del lenguaje C
dividendo = divisor * cociente + resto ;
Signo ;
+ Se devuelve el token de FIN DE SENTENCIA
Contenido de la seccion
1 Introduccion
El analisis lexico en el proceso de traduccion
Componentes Lexicos
Tabla de Smbolos
Palabras claves
Ejemplo
Autonoma del analizador lexico
Introduccion
Autonoma del analizador lexico
Introduccion
Autonoma del analizador lexico
Introduccion
Autonoma del analizador lexico
Introduccion
Autonoma del analizador lexico
Introduccion
Autonoma del analizador lexico
Introduccion
Autonoma del analizador lexico
Introduccion
Autonoma del analizador lexico
Introduccion
Autonoma del analizador lexico
Introduccion
Autonoma del analizador lexico
Introduccion
Autonoma del analizador lexico
Introduccion
Autonoma del analizador lexico
Introduccion
Autonoma del analizador lexico
Introduccion
Autonoma del analizador lexico
Introduccion
Autonoma del analizador lexico
Introduccion
Autonoma del analizador lexico
Introduccion
Autonoma del analizador lexico
Introduccion
Autonoma del analizador lexico
1 Introduccion
Contenido de la seccion
1 Introduccion
Componentes lexicos
Elementos basicos de los lenguajes de programacion
Se describen mediante
+ Una descripcion informal
+ Una descripcion formal mediante expresiones regulares
+ Ejemplos o paradigmas
Componentes lexicos
Elementos basicos de los lenguajes de programacion
Se describen mediante
+ Una descripcion informal
+ Una descripcion formal mediante expresiones regulares
+ Ejemplos o paradigmas
Componentes lexicos
Elementos basicos de los lenguajes de programacion
Se describen mediante
+ Una descripcion informal
+ Una descripcion formal mediante expresiones regulares
+ Ejemplos o paradigmas
Componentes lexicos
Elementos basicos de los lenguajes de programacion
Se describen mediante
+ Una descripcion informal
+ Una descripcion formal mediante expresiones regulares
+ Ejemplos o paradigmas
Componentes lexicos
Elementos basicos de los lenguajes de programacion
Se describen mediante
+ Una descripcion informal
+ Una descripcion formal mediante expresiones regulares
+ Ejemplos o paradigmas
Nota
Solo interesa saber el significado (Componente Lexico) que se
asocia a uno o mas signos, no como son dichos signos.
Nota
Solo interesa saber el significado (Componente Lexico) que se
asocia a uno o mas signos, no como son dichos signos.
Contenido de la seccion
1 Introduccion
Ejemplo
1 = {0, 1} (Alfabeto binario)
2 = {0, 1, 2, , 9}
3 = {a, b, c, , z}
4 = {if , else}
5 = {ab, ca, bbc}
Nota
La longitud de una palabra depende del alfabeto sobre el que
este definida.
Nota
La longitud de una palabra depende del alfabeto sobre el que
este definida.
Nota
L = {} =
6 L =
+
Nota
L puede ser denotado por la expresion regular ab
L1 L2 = {x|x L1 x L2 }
Ejemplo
Si L1 = {ab, bc, bcc} y L2 = {a, bc, abb, ac}
entonces L1 L2 = {ab, bc, bcc, a, abb, ac}
Nota
No hay palabras o cadenas repetidas
L1 L2 = {x|x L1 x L2 }
Ejemplo
Si L1 = {ab, bc, bcc} y L2 = {a, bc, abb, ac}
entonces L1 L2 = {ab, bc, bcc, a, abb, ac}
Nota
No hay palabras o cadenas repetidas
L1 L2 = {x|x L1 x L2 }
Ejemplo
Si L1 = {ab, bc, bcc} y L2 = {a, bc, abb, ac}
entonces L1 L2 = {ab, bc, bcc, a, abb, ac}
Nota
No hay palabras o cadenas repetidas
Ejemplo
Si L1 = {ab, a, bb} y L2 = {bc, c, aa}
entonces L1 L2 = {abbc, abc, abaa, ac, aaa, bbbc, bbc, bbaa}
Nota
No hay palabras o cadenas repetidas
Ejemplo
Si L1 = {ab, a, bb} y L2 = {bc, c, aa}
entonces L1 L2 = {abbc, abc, abaa, ac, aaa, bbbc, bbc, bbaa}
Nota
No hay palabras o cadenas repetidas
Ejemplo
Si L1 = {ab, a, bb} y L2 = {bc, c, aa}
entonces L1 L2 = {abbc, abc, abaa, ac, aaa, bbbc, bbc, bbaa}
Nota
No hay palabras o cadenas repetidas
Ejemplo
L0 = {x 0 |x L} = {}
L1 = L
L2 = LL
Li = LLi1
Ejemplo
L0 = {x 0 |x L} = {}
L1 = L
L2 = LL
Li = LLi1
Ejemplo
Si L = {a} entonces
[
L = Li
i=0
= L L1 L2
0
L3 = L1 L2 = {ab}
L4 = L2 L1 = {ba}
L5 = L3 L4 = {ab, ba}
[
L6 = L5 = Li5 = L05 L15 L25
i=0
= {} {ab, ba} {abab, abba, baab, baba}
= {, ab, ba, abab, abba, baab, baba, }
L1 L2 = {x|x L1 x L2 }
Ejemplo
Si L1 = {ab, bc, bcc} y L2 = {a, bc, abb, ac}
entonces L1 L2 = {bc}
Nota
No hay palabras o cadenas repetidas
L1 L2 = {x|x L1 x L2 }
Ejemplo
Si L1 = {ab, bc, bcc} y L2 = {a, bc, abb, ac}
entonces L1 L2 = {bc}
Nota
No hay palabras o cadenas repetidas
L1 L2 = {x|x L1 x L2 }
Ejemplo
Si L1 = {ab, bc, bcc} y L2 = {a, bc, abb, ac}
entonces L1 L2 = {bc}
Nota
No hay palabras o cadenas repetidas
L1 L2 = {x|x L1 x 6 L2 }
Ejemplo
Si L1 = {ab, bc, bcc} y L2 = {a, bc, abb, ac}
entonces L1 L2 = {ab, bcc}
L1 L2 = {x|x L1 x 6 L2 }
Ejemplo
Si L1 = {ab, bc, bcc} y L2 = {a, bc, abb, ac}
entonces L1 L2 = {ab, bcc}
L = L = {x|x x 6 L}
Ejemplo
Si = {a, b}
Si L = {, a, ab, abb, abbb, . . .}
entonces L = {b, aa, ba, bb, aaa, aab, . . .}
Ejemplo
=
=
Ejemplo
Si = {a, b}
Si L = {, a, ab, abb, abbb, . . .}
entonces L = {b, aa, ba, bb, aaa, aab, . . .}
Ejemplo
=
=
Contenido de la seccion
1 Introduccion
Notas
La palabra vaca se puede representar por o
La alternativa se puede representar por + o por |
El punto de la concatenacion se suele omitir
Palabras que comienza por cero o por uno y van seguidas por cero
o mas unos
Ejemplos
letra = (a + b + c + + z)
cifra = (0 + 1 + + 9)
guion =
subrayado =
C:
(subrayado + letra) (subrayado + letra + cifra)
Cobol:
letra (letra + cifra + guion (letra + cifra))
Nota (Abreviaturas)
? = + = +
+ = =
Nota (Abreviaturas)
? = + = +
+ = =
Nota
Palabras claves: existe una expresion regular para cada palabra
clave.
Nota
El analizador sintactico solo necesita saber cual es el
componente lexico reconocido
Ejemplo
Se verifica que
aa a a
porque
L(aa ) = L(a)L(a )
= {a}{, a, aa, }
= {a, aa, aaa, }
= {, a, aa, }{a}
= L(a )L(a)
= L(a a)
L( ) = (L())
S i
= ()
= i=0 = 0 1 2
= {}
= {} = L()
12.- =
13.- = = +
14.- ( ) =
15.- = +
Universidad de Cordoba: Escuela Politecnica Superior Ingeniera Informatica 204 / 539
Procesadores de Lenguajes Tema II: Analisis Lexico
Ejemplo
L1 = {ai b j |i, j 0}
= {, a, aa, aaa, b, ab, aab, }
= {, a, aa, aaa, }{, b, bb, bbb}
= L(a b )
Ejemplo
L1 = {ai b j |i, j 0}
= {, a, aa, aaa, b, ab, aab, }
= {, a, aa, aaa, }{, b, bb, bbb}
= L(a b )
Ejemplo
Lenguaje que no puede ser denotado por una expresion regular
Ejemplo
L2 = {ai b i |i 0} representa a muchas estructuras sintacticas
de los lenguajes de programacion:
+ Balanceo de parentesis, llaves o corchetes.
+ Paso de parametros
+ Etc.
1 Introduccion
Contenido de la seccion
1 Introduccion
COMPONENTES LEXICOS
COMPONENTES LEXICOS
EXPRESIONES REGULARES
COMPONENTES LEXICOS
EXPRESIONES REGULARES
AFN
COMPONENTES LEXICOS
EXPRESIONES REGULARES
AFN
AFD
COMPONENTES LEXICOS
EXPRESIONES REGULARES
AFN
AFD
ANALIZADOR LEXICO
COMPONENTES LEXICOS
EXPRESIONES REGULARES
AFN
LEX
AFD
ANALIZADOR LEXICO
Contenido de la seccion
1 Introduccion
Descripcion general
Definicion formal
Funcion de transicion para palabras
Representacion grafica
Lenguaje reconocido por un AFD
Descripcion general
Definicion formal
Funcion de transicion para palabras
Representacion grafica
Lenguaje reconocido por un AFD
Componentes de un AFD
Cinta de lectura:
+ Dividida en celdas.
+ Infinita hacia la derecha.
Cabeza de lectura:
+ Lee el smbolo actual de la cinta.
+ Solo se puede mover hacia la derecha.
Alfabeto de la cinta
Unidad de control de estados: indica el estado actual.
Sentido de recorrido
... Cinta
Cabeza de lectura
q
i
q
0
Configuracion inicial
q
f
Configuracion final
Descripcion general
Definicion formal
Funcion de transicion para palabras
Representacion grafica
Lenguaje reconocido por un AFD
q0 Q: estado inicial
F Q: conjunto de estados finales
Universidad de Cordoba: Escuela Politecnica Superior Ingeniera Informatica 237 / 539
Procesadores de Lenguajes Tema II: Analisis Lexico
l d g
q0 q1 q3 q3
q1 q1 q1 q2
q2 q1 q1 q3
q3 q3 q3 q3
Descripcion general
Definicion formal
Funcion de transicion para palabras
Representacion grafica
Lenguaje reconocido por un AFD
(q, ) = qQ
(q, x) = ((q, x), ) Q x
Notas
y coinciden sobre smbolos de :
Ejemplo
Nota
x = llgd es reconocida por el AFD porque q1 es un estado final.
Nota
Existe una notacion mas simple para el reconocimiento de un
AFD.
Ejemplo
Nota
Existe una notacion mas simple para el reconocimiento de un
AFD.
Ejemplo
Nota
Existe una notacion mas simple para el reconocimiento de un
AFD.
Ejemplo
Descripcion general
Definicion formal
Representacion grafica
Lenguaje reconocido por un AFD
d, g
q g
3
l, d, g
Descripcion general
Definicion formal
Representacion grafica
Lenguaje reconocido por un AFD
Notas
Si F = Q entonces L(A) =
Si F = entonces L(A) =
q0 F si y solo si L(A)
Ejemplo
L(A) = L(l(l + d + g (l + d)) )
a b a, b
aa b bb
L(A) = L(a b )
Nota
El estado q2 es inutil o superfluo
Nota
El estado q2 es superfluo
dgito
" " q
q q
0 1 2
q q
3 b
Contenido de la seccion
1 Introduccion
Descripcion general
Definicion formal
Representacion grafica
Funcion de transicion para palabras
Lenguaje reconocido por un AFN
Equivalencia entre AFN y AFD
Equivalencia entre expresiones regulares y automatas finitos
Descripcion general
Definicion formal
Representacion grafica
Funcion de transicion para palabras
Lenguaje reconocido por un AFN
Equivalencia entre AFN y AFD
Equivalencia entre expresiones regulares y automatas finitos
Descripcion general
Definicion formal
Representacion grafica
Funcion de transicion para palabras
Lenguaje reconocido por un AFN
Equivalencia entre AFN y AFD
Equivalencia entre expresiones regulares y automatas finitos
Nota
Las transiciones triviales siempre existen y se suponen tacitamente
por defecto.
Nota
Si existen, estas transiciones se han de indicar expresamente.
Universidad de Cordoba: Escuela Politecnica Superior Ingeniera Informatica 270 / 539
Procesadores de Lenguajes Tema II: Analisis Lexico
Nota
Las transiciones triviales siempre existen y se suponen tacitamente
por defecto.
Nota
Si existen, estas transiciones se han de indicar expresamente.
Universidad de Cordoba: Escuela Politecnica Superior Ingeniera Informatica 271 / 539
Procesadores de Lenguajes Tema II: Analisis Lexico
Nota
Las transiciones triviales siempre existen y se suponen tacitamente
por defecto.
Nota
Si existen, estas transiciones se han de indicar expresamente.
Universidad de Cordoba: Escuela Politecnica Superior Ingeniera Informatica 272 / 539
Procesadores de Lenguajes Tema II: Analisis Lexico
Nota
Las transiciones triviales siempre existen y se suponen tacitamente
por defecto.
Nota
Si existen, estas transiciones se han de indicar expresamente.
Universidad de Cordoba: Escuela Politecnica Superior Ingeniera Informatica 273 / 539
Procesadores de Lenguajes Tema II: Analisis Lexico
Ejemplo
a b
q0 {q1 } {q0 , q1 }
q1 {q3 , q4 } {q1 , q2 }
q2 {q5 } {q2 }
q3 {q2 } {q3 }
q4 {q4 , q5 } {q2 , q4 }
q5 {q5 } {q3 , q5 }
Nota
Un AFD puede considerarse un caso especial de AFN:
No existen transiciones- no triviales.
y no existen transiciones multiples, es decir,
(q, ) = {q 0 }
Descripcion general
Definicion formal
Representacion grafica
Funcion de transicion para palabras
Lenguaje reconocido por un AFN
Equivalencia entre AFN y AFD
Equivalencia entre expresiones regulares y automatas finitos
Ejemplo
q
3
b
a
a, b b,
q q q q5
0 1 2
a
b
q
4
a,
Ejemplo
q
3
b
a
a, b b
q q q q5
0 1 2
a
b
q
4
a
Descripcion general
Definicion formal
Representacion grafica
Funcion de transicion para palabras
Lenguaje reconocido por un AFN
Equivalencia entre AFN y AFD
Equivalencia entre expresiones regulares y automatas finitos
Si q Q
+ q clausura (q)
+ Si q 0 clausura (q) q 00 (q 0 , )
entonces q 00 clausura (q)
clausura : Q P(Q)
Nota
Siempre se verifica que q clausura (q)
Si P Q
+ P clausura (P)
+ Si q 0 clausura (P) q 00 (q 0 , )
entonces q 00 clausura (P)
!
0
S
= clausura (q , a)
q 0 {q0 ,q1 ,q2 }
!
(q 0 , b)
S
= clausura
q 0 {q1 ,q2 }
= clausura ((q1 , b) (q2 , b))
= clausura ({q3 , q4 } {q5 })
= clausura ({q3 , q4 , q5 })
= {q2 , q3 , q4 , q5 }
!
(q 0 , b)
S
= clausura
q 0 {q2 ,q3 ,q4 ,q5 }
Descripcion general
Definicion formal
Representacion grafica
Funcion de transicion para palabras
Lenguaje reconocido por un AFN
Equivalencia entre AFN y AFD
Equivalencia entre expresiones regulares y automatas finitos
Descripcion general
Definicion formal
Representacion grafica
Funcion de transicion para palabras
Lenguaje reconocido por un AFN
Equivalencia entre AFN y AFD
Equivalencia entre expresiones regulares y automatas finitos
Ejemplo (Aplicacion de a p Q)
Sea el AFN anterior y p = {q0 , q3 }:
(p, a) = ({q0 , q3 }, a)
[
= (q, a)
q{q0 ,q3 }
= (q0 , a) (q3 , a)
= {q1 } {q2 }
= {q1 , q2 }
Teorema
Dado un AFN AN , se puede construir otro AFD AD equivalente:
L(AN ) = L(AD )
Demostracion
AFN
Demostracion
AFN
Demostracion
AFN
AFD
Demostracion
inicio
p0 clausura (q0 ) ; QD {p0 } y p0 no marcado
mientras haya un estado p QD no marcado hacer
Marcar a p
para cada hacer
p 0 clausura (N (p, ))
si p 0
/ QD entonces
QD QD {p 0 } y p 0 no marcado
fin si
Definir D (p, ) p 0
fin para
fin mientras
FD {pi |FN pi 6= }
fin
Universidad de Cordoba: Escuela Politecnica Superior Ingeniera Informatica 310 / 539
Procesadores de Lenguajes Tema II: Analisis Lexico
Ejemplo
q
3
b
a
a, b b,
q q q q5
0 1 2
a
b
q
4
a,
Ejemplo
q
3
b
a
a, b b
q q q q5
0 1 2
a
b
q
4
a
p
0
Se marca el estado p0 :
QD = {p 0 }
Como p1
/ QD :
QD = QD {p1 } = {p 0 , p1 }
D (p0 , b) = p2
Como p2
/ QD :
QD = QD {p2 } = {p 0 , p1 , p2 }
p
a 1
p
0
b
p
2
Paso 1: transiciones de p0
Se marca el estado p1 :
QD = {p 0 , p 1 , p2 }
D (p1 , b) = p2
p
a 1
p
0
b
b
p
2
Paso 2: transiciones de p1
Se marca el estado p2 :
QD = {p 0 , p 1 , p 2 }
D (p2 , a) = p2
D (p2 , b) = p3
Como p3
/ QD
QD = {p 0 , p 1 , p 2 , p3 }
p p
0 3
b b
b
p
2
Paso 3: transiciones de p2
Se marca el estado p3 :
QD = {p 0 , p 1 , p 2 , p 3 }
D (p3 , a) = p4
Como p4
/ QD
QD = {p 0 , p 1 , p 2 , p 3 , p4 }
D (p3 , b) = p3
p p a p
0 3 4
b b
b
p b
2
Paso 4: transiciones de p3
Se marca el estado p4
QD = {p 0 , p 1 , p 2 , p 3 , p 4 }
D (p4 , a) =
(p4 , b) = p3
Nota
El algoritmo finaliza al estar marcados todos los estados de QD .
a
p p p
0 3 4
b b b
b
p b
2
Paso 5: transiciones de p4
Ejemplo
q
3
b
a
a, b b,
q q q q5
0 1 2
a
b
q
4
a,
x L(AD ) porque p3 FD
Descripcion general
Definicion formal
Representacion grafica
Funcion de transicion para palabras
Lenguaje reconocido por un AFN
Equivalencia entre AFN y AFD
Equivalencia entre expresiones regulares y automatas finitos
AFN
AFN
AFN
AFD
EXPRESION REGULAR
AFN
AFD
EXPRESION REGULAR
Algoritmo de Thompson
AFN
AFD
Teorema
Dada una expresion regular , se puede construir un AFN AN
equivalente:
L() = L(AN )
Demostracion
EXPRESION REGULAR
Demostracion
EXPRESION REGULAR
Algoritmo de Thompson
Demostracion
EXPRESION REGULAR
Algoritmo de Thompson
AFN
Demostracion
Algoritmo (Thompson)
Entrada: expresion regular .
Salida: AFN AN = (QN , , N , q0 , FN )
Algoritmo (Thompson)
q qf
0
Algoritmo (Thompson)
q0 qf
Algoritmo (Thompson)
q q
0 f
Algoritmo (Thompson)
q A q
0 f
q0 qf
q A q
0 f
Algoritmo (Thompson)
q0 A q q0 A q f
f
Algoritmo (Thompson)
q q A qf
0 0 qf
Algoritmo (Thompson)
Nota
L(()) = L() = L(AN )
l q
q
4 6
q l q q
q q
q
0 1 2 3 8 9
d
q q
5 7
EXPRESION REGULAR
EXPRESION REGULAR
Algoritmo de Thompson
EXPRESION REGULAR
Algoritmo de Thompson
AFN
EXPRESION REGULAR
Algoritmo de Thompson
AFN
EXPRESION REGULAR
Algoritmo de Thompson
AFN
AFD
l q
q
4 6
q l q q
q q
q
0 1 2 3 8 9
d
q q
5 7
p
0
Se marca el estado p0 :
QD = {p 0 }
Como p1
/ QD :
QD = QD {p1 } = {p 0 , p1 }
D (p0 , d) =
l
p p
0 1
Paso 1: transiciones de p0
Se marca el estado p1 :
QD = {p 0 , p 1 }
Como p2
/ QD :
QD = QD {p2 } = {p 0 , p 1 , p2 }
Como p3
/ QD :
QD = QD {p3 } = {p 0 , p 1 , p2 , p3 }
p
l 2
l
p p
0 1
d
p
3
Paso 2: transiciones de p1
Se marca el estado p2 :
QD = {p 0 , p 1 , p 2 , p3 }
D (p2 , l) = p2
D (p2 , d) = p3
d
p
3
Paso 3: transiciones de p2
Se marca el estado p3 :
QD = {p 0 , p 1 , p 2 , p 3 }
D (p3 , l) = p2
D (p3 , d) = p3
d d
p
3
Paso 4: transiciones de p3
Nota
El algoritmo finaliza al estar marcados todos los estados de QD .
Ejemplo
l l, d
q q
0 1
Contenido de la seccion
1 Introduccion
Definicion
Dos automatas son equivalentes si reconocen el mismo lenguaje:
A A0 L(A) = L(A0 )
x ((q, x) F (q 0 , x) F )
((q, x) F (q 0 , x) F )
((q, x) F (q 00 , x) F )
((q 0 , x) F (q 00 , x) F )
|Q|E | |Q|
Nota
La funcion |E se define de manera similar a .
Teorema
Todo AFD es equivalente a su automata cociente:
L(A) = L(A|E )
Demostracion
x L(A) (q0 , x) F
qf F (q0 , x) = qf
p0 = E [q0 ] qf F pf = E [qf ] |E (p0 , x) = pf
|E (p0 , x) = pf F|E
x L(A|E )
Teorema
Todo AFD es equivalente a su automata cociente:
L(A) = L(A|E )
Demostracion
x L(A) (q0 , x) F
qf F (q0 , x) = qf
p0 = E [q0 ] qf F pf = E [qf ] |E (p0 , x) = pf
|E (p0 , x) = pf F|E
x L(A|E )
Demostracion
inicio
p0 Q F , p1 F
Nuevo {p0 , p1 } y p0 y p1 no marcados
mientras p Nuevo no marcado hacer
Marcar a p
para cada hacer
Dividir p en subconjuntos de forma que sus estados
qi y qj estaran en el mismo subconjunto
si (qi , ) y (qj , ) pertenecen al mismo subconjunto
fin para
si se ha dividido p en subconjuntos
entonces
Sustituir p por los nuevos subconjuntos
Desmarcar todos los estados de Nuevo
fin si
fin mientras
fin
Universidad de Cordoba: Escuela Politecnica Superior Ingeniera Informatica 410 / 539
Procesadores de Lenguajes Tema II: Analisis Lexico
q
l 2
l l
q q
0 1 d l
d d
q
3
l l, d
p p
0 1
[ d
q q q
0 1 2
[ d
]
q q
3 4 d
]
Nota
El estado inicial q0 pertenece a p1 porque tambien es un estado
final
p0 = {q1 }
p2 = {q2 , q4 }
Nuevo = {p0 , p1 , p2 }
Todos los estados estan desmarcados.
[
p p
1 0
d
]
p
2 d
Automata cociente (automata mnimo).
1
0 1
0 1 0 0
q q q q
0 1 2 3
1 1 1
1
0
1
q 0 q q
5 4 6
0
p0 = {q0 , q4 }
p2 = {q2 , q3 , q5 , q6 }
Nuevo = {p0 , p1 , p2 }
Todos los estados estan desmarcados.
p2 = {q2 , q3 }
p3 = {q5 , q6 }
Nuevo = {p0 , p1 , p2 , p3 }
Todos los estados estan desmarcados.
0 1
0 1 0
p p p
0 1 2
1
0 1
p
3
1
0 1
0 1 0 0
q q q q
0 1 2 3
1 1 1
1
0
1
q 0 q q
5 4 6
0
1 Introduccion
Contenido de la seccion
1 Introduccion
Definicion
Se denomina implementacion de un analizador lexico a su
codificacion en un lenguaje de programacion.
Nota
Se recuerda que el analizador lexico suele ser una funcion o
procedimiento auxiliar del analizador sintactico.
Contenido de la seccion
1 Introduccion
Caractersticas
Se utiliza un lenguaje de programacion:
+ Alto nivel: C, C++, Pascal, Java, etc.
+ Bajo nivel: ensamblador.
Se codifica una funcion que combina todos los AFDs
transformados.
l, s l, s, d
q q
0 1
l, s Smbolo correcto
q q q
0 1 2
Smbolo incorrecto
l, s
q
3
AFD transformado.
Nota
Las celdas vacas de la funcion de transicion se completan con
rutinas de tratamiento de errores:
j
q0
qi Error
Nota
Algunas veces no es necesario comprobar el smbolo que sigue
al componente lexico.
Suele ocurrir con los componentes lexicos mas simples:
Punto y coma
Espacio en blanco, tabular o salto de lnea
Operadores aritmeticos
Etc.
q
= 2
<
q q
0 1
otro smbolo
q
3
Contenido de la seccion
1 Introduccion
COMPONENTES LEXICOS
COMPONENTES LEXICOS
EXPRESIONES REGULARES
COMPONENTES LEXICOS
EXPRESIONES REGULARES
AFN
COMPONENTES LEXICOS
EXPRESIONES REGULARES
AFN
AFD
COMPONENTES LEXICOS
EXPRESIONES REGULARES
AFN
AFD
ANALIZADOR LEXICO
COMPONENTES LEXICOS
EXPRESIONES REGULARES
AFN
LEX
AFD
ANALIZADOR LEXICO
LEX
Creado por M. E. Lesk y E. Schmidt (Bell Laboratories).
Genera analizadores lexicos para C, Fortran, Raftor.
Hay versiones para Unix, Linux, DOS, etc.
Funcionamiento de LEX
nombre.l lex.yy.c
Funcionamiento de LEX
Unix
> lex nombre.l
> cc -g lex.yy.c -ll -o nombre.exe
Linux
> flex nombre.l
> gcc -g lex.yy.c -lfl -o nombre.exe
Ejecucion
> ./nombre.exe
Redirigiendo la entrada y la salida
> ./nombre.exe < fichero entrada
> ./nombre.exe < fichero entrada > fichero salida
Usando argumentos desde la lnea de comandos
> ./nombre.exe fichero entrada
> ./nombre.exe fichero entrada fichero salida
%%
%%
Nota
Si se antepone la barra \ delante de un smbolo especial entonces
solo se representa a s mismo:
\. solo representa el punto.
{letra}({letra}|{numero})
es transformada en
Ejemplo (ECHO)
Imprime por pantalla todos los caracteres
%%
.|\n ECHO;
%%
Equivalencia
%%
.|\n printf(" %s",yytext");
%%
/* definiciones regulares */
numero [0-9]
letra [a-zA-Z]
identificador {letra}({letra}|{numero})*
1 Introduccion
Contenido de la seccion
1 Introduccion
Tipos de errores
Invisibles: errores que no pueden ser detectados por el
procesador de lenguajes
Visibles: errores que s pueden ser detectados
Errores invisibles
Suelen ser errores conceptuales o algortmicos
No pueden ser detectados porque no infrigen ninguna
norma del lenguaje de programacion.
Podran ser detectados si se incluyen tecnicas de verificacion
en el procesador de lenguajes:
+ Poseen gran complejidad
+ Su coste computacional es muy elevado
En la practica, estos errores son detectados y corregidos
manualmente
Errores visibles
Pueden ser detectados:
+ durante el proceso de traduccion
+ o durante la ejecucion del programa ejecutable.
Son producidos porque no se ha tenido suficiente cuidado al
programar:
+ falta de comprension o desconocimiento de las
caractersticas del lenguaje
+ o confusion con las caractersticas de otro lenguaje.
Se caracterizan por
+ Ser errores de ortografa
+ Ser errores que omiten requisitos formales del lenguaje de
programacion.
Errores visibles
Se clasifican segun la fase en que son detectados:
Errores lexicos: no se reconoce un componente lexico correcto.
Errores sintacticos:
+ Sentencia que no respeta las reglas gramaticales del lenguaje
de programacion
+ Se origina al procesar un componente lexico inesperado
Errores semanticos: el significado de un componente lexico es
incorrecto o inapropiado.
Errores de ejecucion:
+ Funcionamiento incorrecto del programa.
+ No detectables durante el proceso de compilacion.
Contenido de la seccion
1 Introduccion
Nota
El analisis lexico genera para fi el componente lexico
IDENTIFICADOR en vez de IF.
Este error podra ser detectado durante el analisis sintactico
Nota
El analisis lexico genera para fi el componente lexico
IDENTIFICADOR en vez de IF.
Este error podra ser detectado durante el analisis sintactico
Nota
Este error puede ser detectado durante el analisis sintactico.
Nota
Este error puede ser detectado durante el analisis sintactico.
Nota
Este error puede ser detectado durante el analisis semantico.
Nota
Este error puede ser detectado durante el analisis semantico.
Nota
Este error se detectara durante la ejecucion.
Podra ser detectado con tecnicas de verificacion
Nota
Este error se detectara durante la ejecucion.
Podra ser detectado con tecnicas de verificacion
Contenido de la seccion
1 Introduccion
Nota
Los criterios generales para el tratamiento de los errores son
aplicables a todos los tipos de errores.
Contenido de la seccion
1 Introduccion
Nota
Se debe informar de la transformacion realizada.
La transformacion no pretende corregir el error, sino continuar
con el analisis lexico.
Posteriormente, el programador debera supervisar la
transformacion realizada.
PROCESADORES DE LENGUAJES
TEMA II: ANALISIS LEXICO