Académique Documents
Professionnel Documents
Culture Documents
Anlisis Lxico
Eduardo Aguilar Torres
Agosto,2014.
Agenda
Informacin de contacto.
Definicin general.
Autmatas finitos.
Desde ER hasta los DFA.
Analizador lxico para el lenguaje TINY.
8/31/2014
Agenda
Informacin de contacto.
Definicin general.
Autmatas finitos.
Desde ER hasta los DFA.
Analizador lxico para el lenguaje TINY.
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).
8/31/2014
Agenda
Informacin de contacto.
Definicin general.
Autmatas finitos.
Desde ER hasta los DFA.
Analizador lxico para el lenguaje TINY.
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
8/31/2014
(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)
((11|00)|((10|01)(00|11)*(01|10)))*
Departamento de Ingeniera de Sistemas y Computacin Compiladores CCA71
8/31/2014
Agenda
Informacin de contacto.
Definicin general.
Autmatas finitos.
Desde ER hasta los DFA.
Analizador lxico para el lenguaje TINY.
Autmatas Finitos
8/31/2014
Autmatas Finitos
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.
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.
Autmatas Finitos
Pero que sucede si se tienen varios tokens que
comiencen con el mismo carcter.
8/31/2014
Autmatas Finitos
Solucin
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 = [~(=|>)]
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();
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)
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
Autmatas Finitos
El siguiente cdigo supone:
1.
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.
10
8/31/2014
Agenda
Informacin de contacto.
Definicin general.
Autmatas finitos.
Desde ER hasta los DFA.
Analizador lxico para el lenguaje TINY.
11
8/31/2014
Concatenacin.
12
8/31/2014
Repeticin.
Ejemplo
Traducir la ER ab|a en un NFA de acuerdo con
la construccin de Thompson.
13
8/31/2014
Ejemplo
Formar el NFA de acuerdo con la construccin
de Thompson para la ER (letra|dgito)*.
Ejemplo
Formar el NFA de acuerdo con la construccin
de Thompson para la ER (letra|dgito)*.
14
8/31/2014
Ejercicio 1
Formar el NFA correspondiente a la ER (a|c)*b
15
8/31/2014
Ejemplo
Considerar el NFA de la ER a* bajo la
construccin de Thompson.
16
8/31/2014
Ejemplo
De NFA a DFA de la ER a*.
Ejemplo
17
8/31/2014
Ejemplo
2.
3.
18
8/31/2014
Ejemplo
Ejemplo
Considere el siguiente DFA equivalente a la ER
(a|)b*
19
8/31/2014
Agenda
Informacin de contacto.
Definicin general.
Autmatas finitos.
Desde ER hasta los DFA.
Analizador lxico para el lenguaje TINY.
20
8/31/2014
%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]+
%%
%}
%line
%cup
21
8/31/2014
{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;}
"("
{return LPAREN;}
")"
{return RPAREN;}
";"
{return SEMI;}
{number}
{identifier}
{return NUM;}
{return ID;}
{whitespace}
{newline}+
[^]
{System.out.println("Linea
"+yyline+"\nError Lexico: "+yytext());break;}
22