Vous êtes sur la page 1sur 22

8/31/2014

Anlisis Lxico
Eduardo Aguilar Torres
Agosto,2014.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

Agenda

Informacin de contacto.
Definicin general.
Autmatas finitos.
Desde ER hasta los DFA.
Analizador lxico para el lenguaje TINY.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

8/31/2014

Agenda

Informacin de contacto.
Definicin general.
Autmatas finitos.
Desde ER hasta los DFA.
Analizador lxico para el lenguaje TINY.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

Informacin de Contacto
Eduardo Aguilar Torres
Email: eaguilar02@ucn.cl
Horario de atencin: Martes y Jueves 18:00
19:30.
Oficina: Y1-115 (Laboratorio de Inteligencia
Artificial).

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

8/31/2014

Agenda

Informacin de contacto.
Definicin general.
Autmatas finitos.
Desde ER hasta los DFA.
Analizador lxico para el lenguaje TINY.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

Definicin general
Source Code

Scanner
Tokens

Palabras reservadas
Identificadores
Nmeros
Operadores
Smbolos
Comentarios

Parser
Syntax Tree
Semantic
Analyzer
Annotated
Tree
Source Code
Optimizer

Literal
Table
Symbol
Table
Error
Handler

Intermediate
Code
Code
Generator
Target
Code
Target Code
Optimizer

Target
Code

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

8/31/2014

Clase 20-08 (Ejercicio 3)

Considerar el alfabeto simple = {a, b, c}, determinar


una expresin regular que defina el conjunto de todas
las cadenas que no contengan dos b consecutivas.

(a|c)*(b(a|c)(b(a|c))*)*(a|c)*|b
(a|c)*(b(a|c))*(a|c)*(b|e)
(a|c|ba|bc)*(b|e)

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

Clase 20-08 (Ejercicio 4)


Construya la expresin regular correspondiente
al siguiente autmata finito determinstico.

((11|00)|((10|01)(00|11)*(01|10)))*
Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

8/31/2014

Agenda

Informacin de contacto.
Definicin general.
Autmatas finitos.
Desde ER hasta los DFA.
Analizador lxico para el lenguaje TINY.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

Autmatas Finitos

Un DFA debe tener una transicin para cada estado y


carcter.
Aquellas transiciones que dan errores como resultado
se dejan fuera del diagrama del DFA.
Al hacer una transicin, los caracteres de entrada son
acumulados hasta convertirse en un token.
Al alcanzar un estado de aceptacin, se devuelve el
token que se acaba de reconocer, junto con cualquier
atributo asociado.
Al alcanzar un estado de error, se debe retroceder
hacia la entrada (retro-seguimiento) o generar un
token de error.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

8/31/2014

Autmatas Finitos

La transicin [otro] indica que el carcter delimitador se


debera considerar como bsqueda hacia adelante, es
decir, que debera ser devuelto a la cadena de entrada
y no consumido.
El estado de error se ha convertido en estado de
aceptacin sin transiciones fuera del estado.
El AF debe reconocer un token a la vez y comenzar en
su estado de inicio despus de reconocer cada token.
Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

Autmatas Finitos
Cada token de un LP ser reconocido por su propio
DFA.
Si comienzan con un carcter diferente, es fcil
juntarlos uniendo todos sus estados de inicio.
Por ejemplo: considerando los tokens dados para las
cadenas :=, <= e =, se construyen los siguientes DFA.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

8/31/2014

Autmatas Finitos
Como cada uno de estos tokens comienzan con un
carcter diferente, fcilmente se pueden unir a un
estado de inicio.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

Autmatas Finitos
Pero que sucede si se tienen varios tokens que
comiencen con el mismo carcter.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

8/31/2014

Autmatas Finitos
Solucin

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

Autmatas Finitos
Implementacin de autmatas finitos en cdigo.
AFD que reconoce comentarios en lenguaje C
otro = [~*]
otro = [~(*|/)]
AFD que reconoce tokens con prefijo comn
otro = [~(=|>)]

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

8/31/2014

Autmatas Finitos
Implementacin de autmatas finitos en cdigo.
letra = [a-zA-Z]
digito = [0-9]
otro = [~(letra | digito)]
identificador = letra (letra | digito)*

estado:=1; { inicio }
while estado=1 or 2 do
case estado of
1: case getchar() of
letra: avanza en la entrada;
estado := 2;
else estado:= . {error};
endcase;
2: case getchar() of
letra, digito: avanza en la entrada;
estado:=2 { realmente innecesario }
else estado:=3;
end case;
endcase;
endwhile;
if estado=3 then aceptar(ID, idname)
else error();

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

Autmatas Finitos
Tabla de transicin
Es posible expresar el DFA como una estructura de
datos (E.D.) y entonces escribir un cdigo genrico
que tomar sus acciones de la E.D.
Una E.D. simple que es adecuada para este propsito
es una tabla de transicin o arreglo bidimensional,
indizado por estado y carcter de entrada que expresa
los valores de la funcin de transicin.
Caracteres en el alfabeto c
Estados
s

Estados representando
transiciones
T(s,c)

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

8/31/2014

Autmatas Finitos
El DFA para identificadores se puede representar como la
siguiente tabla de transiciones:
carcter
de entrada
letra

dgito

otro

2
2

[3]

Aceptacin

estado

1
2
3

no
no
si

Ahora podemos escribir el cdigo en una forma que


implementar cualquier DFA.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

Autmatas Finitos
El siguiente cdigo supone:
1.

Las transiciones se mantienen en un arreglo de transicin T indizado por estados y


carcter de entrada.

2.

Que las transiciones que avanzan en la entrada, es decir, aquellas que no estn marcadas
con corchetes en la entrada estn dadas por el arreglo booleano Avanzar.

3.

Los estados de aceptacin estn dados por el arreglo booleano Aceptar,

Cdigo para reconocer un DFA utilizando tabla de transiciones:


estado := 1;
ch := siguiente carcter de entrada;
while not Aceptar[estado] and not error(estado) do
nuevoestado := T[estado, ch]
if Avanzar[estado, ch] then ch := siguiente carcter de entrada;
estado := nuevoestado;
end while;
If Aceptar[estado] then aceptar;

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

10

8/31/2014

Agenda

Informacin de contacto.
Definicin general.
Autmatas finitos.
Desde ER hasta los DFA.
Analizador lxico para el lenguaje TINY.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

Desde ER hasta los DFA


El algoritmo ms simple para traducir una
expresin regular en un DFA pasa por una
construccin intermedia, en la cual se deriva
un NFA de la expresin regular, y posterior
mente se emplea para construir un DFA
equivalente.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

11

8/31/2014

Desde ER hasta los DFA.


Construccin de Thompson
Uso de para unir las maquinas de cada segmento de
una ER para forma una maquina que corresponda con la
ER completa.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

Desde ER hasta los DFA.


ER bsicas.

Concatenacin.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

12

8/31/2014

Desde ER hasta los DFA.


Seleccin entre alternativas.

Repeticin.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

Ejemplo
Traducir la ER ab|a en un NFA de acuerdo con
la construccin de Thompson.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

13

8/31/2014

Ejemplo
Formar el NFA de acuerdo con la construccin
de Thompson para la ER (letra|dgito)*.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

Ejemplo
Formar el NFA de acuerdo con la construccin
de Thompson para la ER (letra|dgito)*.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

14

8/31/2014

Ejercicio 1
Formar el NFA correspondiente a la ER (a|c)*b

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

Desde ER hasta los DFA.


Para construir un DFA a partir de un NFA se requiere de
un mtodo que elimine las transiciones .
La cerradura de un conjunto de estados: Definimos
la cerradura de un estado simple s como el conjunto
de estados alcanzables por una serie de cero o ms
transiciones , y escribirnos este conjunto como .

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

15

8/31/2014

Ejemplo
Considerar el NFA de la ER a* bajo la
construccin de Thompson.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

Desde ER hasta los DFA.


Construccin del sub-conjunto:
1. Se calcula la cerradura del estado de inicio de M (NFA) , lo
que se convierte en el estado de inicio de (DFA).
2. Se construyen los estados a partir de los subconjuntos
generados con la cerradura hasta que no existan nuevos
estados o transiciones.
3. Se marcan como estado de aceptacin aquellos que
contenga un estado de aceptacin de M.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

16

8/31/2014

Ejemplo
De NFA a DFA de la ER a*.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

Ejemplo

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

17

8/31/2014

Ejemplo

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

Desde ER hasta los DFA.


Minimizacin del nmero de estados en un DFA.
1.

Crear dos conjuntos, uno compuesto por estados de


aceptacin y el otro por estados de no aceptacin.

2.

Si todos los estados de aceptacin tienen transiciones en a


para estados de aceptacin, entonces esto define una
transicin a desde el nuevo estado de aceptacin hacia si
misma.

3.

De manera similar, si todos los estados de aceptacin tienen


transiciones en a hacia estados de no aceptacin. entonces
esto define una transicin a desde el nuevo estado de
aceptacin hacia el nuevo estado de no aceptacin.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

18

8/31/2014

Ejemplo

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

Ejemplo
Considere el siguiente DFA equivalente a la ER
(a|)b*

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

19

8/31/2014

Agenda

Informacin de contacto.
Definicin general.
Autmatas finitos.
Desde ER hasta los DFA.
Analizador lxico para el lenguaje TINY.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

Analizador lxico para el


lenguaje TINY.

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

20

8/31/2014

DFA para el Analizador


Lxico de TINY

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

Especificacin JFLEX para


TINY
import java_cup.runtime.*;

%public

import java_cup.sym;
%%

digit
number

%{
private Symbol symbol(int type) {
return new Symbol(type, yyline);
}

letter

= [0-9]
=

{digit}+

= [a-zA-Z]

identifier = {letter}+
newline

whitespace =

\n
[ \t]+

private Symbol symbol(int type, Object val) {


return new Symbol(type, val);
}

%%

%}
%line
%cup

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

Eduardo Andrs Aguilar Torres

21

8/31/2014

Especificacin JFLEX para


TINY
"if"

{return IF;}

"then"

{return THEN;}

"else"

{return ELSE;}

"end"

{return END;}

"repeat"
"until"

{return REPEAT;}
{return UNTIL;}

"read"

{return READ;}

"write"

{return WRITE;}

":="

{return ASSIGN;}

"="

{return EQ;}

"<"

{return LT;}

"+"

{return PLUS;}

"-"

{return MINUS;}

"*"

{return TIMES;}

"/"

{return OVER;}

Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71

"("

{return LPAREN;}

")"

{return RPAREN;}

";"

{return SEMI;}

{number}
{identifier}

{return NUM;}
{return ID;}

{whitespace}
{newline}+

{/* skip whitespace */}


{/* skip newline */}

[^]
{System.out.println("Linea
"+yyline+"\nError Lexico: "+yytext());break;}

Eduardo Andrs Aguilar Torres

22

Vous aimerez peut-être aussi