Compiladores Análisis Léxico Oscar Bonilla Universidad Galileo.

Slides:



Advertisements
Presentaciones similares
ANALIZADOR SEMANTICO DIANA CAROLINA CASTAÑO YANCI VIVIANA CASTRO PEDRO LUIS FLÓREZ SANTIAGO GUTIÉRREZ A.
Advertisements

Análisis Sintáctico Capítulo 4.
Análisis Sintáctico Descendente
Filminas Tercera Semana CI-1322 Autómatas y Compiladores Elaborado por: Sergio Pastrana Espinoza A33888.
Compiladores e intérpretes Análisis Sintáctico II
Compiladores e intérpretes Generación de código intermedio II
Compiladores e intérpretes
Compiladores e intérpretes Análisis Sintáctico III
Cb00843 Traductores Rogelio Dávila Pérez Profesor Planta
Gramáticas Libres de Contexto
Análisis Lexicográfico
¿Compilador ? Es un traductor que convierte un texto escrito en un lenguaje fuente y lo traduce a un programa objeto en código máquina.
Facultad de Ciencias de la Computación
Analizadores Sintácticos Descendentes Predictivos
Unidad 2. Análisis léxico
Unidad 1. Introducción al proceso de compilación.
APLICACIONES DE AUTOMATAS Y EXPRESIONES REGULARES
1 Parsing Un parser podría ser definido como un programa que analiza una porción de texto para determinar su estructura lógica: la fase de parsing en un.
Tema 2 Autómatas finitos 1. Autómata finito determinista
Compilador HTML David Morales Marco Jiménez Carlos Márquez
Procesadores de Lenguajes I
ANALISIS SINTACTICO DESCENDENTE
Compiladores Análisis Léxico Oscar Bonilla Universidad Galileo.
ANALISIS SINTACTICO El análisis gramatical es la tarea de determinar la sintaxis, o estructura, de un programa. Por esta razón también se le conoce como.
Introducción. Agenda Clase 1 ● Preámbulo histórico. ● Razones de la Diversidad de Lenguajes. ● Razones del Éxito de un Lenguaje. ● Clasificación ● Motivación.
Tema 2 Lenguajes Formales.
Programación de sistemas
M.C. Meliza Contreras González
Análisis sintáctico LR: SLR (LR simple)
Procesadores del Lenguaje
2º curso Ingeniería Técnica en Informática de Sistemas UNED
INGENIERIA EN SISTEMAS COMPUTACIONALES
ANALISIS SINTACTICO Parte I
Resumen de Compilación Preparado por Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Traducido por Christian Torres Universidad Ricardo.
Compiladores Introducción Oscar Bonilla Universidad Galileo.
Clasificación de Gramáticas y Manejo de Errores
Compiladores (23/04/ :35) Compiladores Tema 3 Análisis Lexicográfico Scanners.
Universidad Nacional de Jujuy Facultad de Ingeniería
Teoría de lenguajes y compiladores
Análisis de algoritmos
Introducción al Análisis Sintáctico
Tema 2 Autómatas finitos 1. Autómata finito determinista
Autómatas Finitos Es un diagrama de transiciones que permite identificar cadenas que pertenecen a un lenguaje. Puede ser determinista o no determinista.
Lenguajes regulares Teoría del Autómata.
Ejemplo de AFN Ej. Diseña un AFN que acepte todas las cadenas que contengan dos ceros consecutivos o dos unos consecutivos. Solución AFN q4 1 q2 q1 q0.
Programación de Sistemas
Compiladores e intérpretes
Tema 1. Introducción y Conceptos Básicos
Teoría de lenguajes y compiladores
Tomado de Sudkamp: Languages and Machines Cap. 6.
Análisis Léxico Área Software de Base.
Implementación del analizador léxico Prácticas EDI - © Juan Ramón Pérez1.
INFORMATICA VII (Programación e implementación de sistemas)
UNIVERSIDAD VALLE DEL MOMBOY FACULTAD DE INGENIERIA ESCUELA DE COMPUTACIÓN CATEDRA: EDUMATICA Br: JENNY CORONADO C.I
Programación de Sistemas FEI – 2008
Unidad 1. Introducción a los Compiladores.
UNIVERSIDAD LATINA (UNILA)
Autómatas y Compiladores Novena Semana. Ricardo Vargas Del Valle A35469.
Compiladores Análisis Léxico Oscar Bonilla Universidad Galileo.
Teoría de lenguajes y compiladores
Autómatas y Compiladores. Tercera Semana. Ricardo Vargas Del Valle A35469.
El proceso de compilación
Simulación de un AFD Conversión de un AFND a un AFD.
IV. GRAMÁTICAS DISTRIBUIDAS Y TABLAS DE SÍMBOLOS
Programación de Sistemas
Unidad 2 Lenguajes, Expresiones Regulares, Autómatas
Sintaxis y Semántica. S.Takahashi Fases en el proceso de análisis de lenguajes Lexer Parser caracteres tokensrespuesta.
AUTOMATAS Y LENGUAJES FORMALES FASE 1
Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.
Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.
Transcripción de la presentación:

Compiladores Análisis Léxico Oscar Bonilla Universidad Galileo

Anatomía de un compilador Analizador Sintáctico (Parser) Generador de Código Optimizador de Código Analizador Semántico Analizador Léxico (Scanner) Parse Tree Programa (character stream) Token stream Intermediate Representation Optmized Intermediate Representation Assembly code

Ayer vimos NDFA's Podemos convertir fácilmente una expresión regular a un Autómaton Finito No Determinístico. Los Autómata Finitos No Determinísticos son muy difíciles de Implementar ya que tienen que adivinar qué arista tomar. Así que convertimos el Autómaton Finito No Determinístico a un Autómaton Finito Determinístico.

Cerradura La cerradura de un estado es el conjunto de estados que pueden alcanzarse desde ese estado sin consumir ningún símbolo de la entrada. La cerradura de un estado S, Closure(S) es el conjunto T más pequeño tal que: Algoritmo:

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? S = {1} T = {} T' = {} -   .     

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? S = {1} T = {1} T' = {} -   .     

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? S = {1} T = {1} T' = {1} -   .     

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? S = {1} T = {1,2} T' = {1} -   .     

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? S = {1} T = {1,2} T' = {1} -   .     

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? S = {1} T = {1,2} T' = {1,2} -   .     

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? S = {1} T = {1,2} T' = {1,2} -   .     

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? S = {1} T = {1,2} T' = {1,2} -   .     

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? S = {1} T = {1,2} T' = {1,2} -   .     

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? S = {3} T = ?? 3 -   .      Pregunta: Que es Closure(3) ?

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? S = {3} T = {2, 3, 4, 8} 3 -   .      Pregunta: Que es Closure(3) ?

Arista DFA Supongamos que estamos en un conjunto de estados del NFA, si consumimos un símbolo de la entrada, ¿Qué otro conjunto de estados podemos alcanzar?

3 -   .      (-| ?) ·(0|1|2|3|4|5|6|7|8|9)+ · (. ·(0|1|2|3|4|5|6|7|8|9)*)? d = {1} DFAedge({1}, 3) = ?? Que es DFAedge({1},3)?

3 -   .      (-| ?) ·(0|1|2|3|4|5|6|7|8|9)+ · (. ·(0|1|2|3|4|5|6|7|8|9)*)? d = {1} edge({1},3) = {} DFAedge({1}, 3) = ?? Que es DFAedge({1},3)?

3 -   .      (-| ?) ·(0|1|2|3|4|5|6|7|8|9)+ · (. ·(0|1|2|3|4|5|6|7|8|9)*)? d = {1} closure({1}) = {1, 2} DFAedge({1}, 3) = ?? Que es DFAedge({1},3)?

3 -   .      (-| ?) ·(0|1|2|3|4|5|6|7|8|9)+ · (. ·(0|1|2|3|4|5|6|7|8|9)*)? d = {1} edge({1}, 3} = {} DFAedge({1}, 3) = {} Que es DFAedge({1},3)?

3 -   .      (-| ?) ·(0|1|2|3|4|5|6|7|8|9)+ · (. ·(0|1|2|3|4|5|6|7|8|9)*)? d = {1} edge({2}, 3} = {3} DFAedge({1}, 3) = {3} Que es DFAedge({1},3)?

3 -   .      (-| ?) ·(0|1|2|3|4|5|6|7|8|9)+ · (. ·(0|1|2|3|4|5|6|7|8|9)*)? d = {1} closure({3}) = {2, 3, 4, 8} DFAedge({1}, 3) = {2, 3, 4, 8} Que es DFAedge({1},3)?

3 -   .      (-| ?) ·(0|1|2|3|4|5|6|7|8|9)+ · (. ·(0|1|2|3|4|5|6|7|8|9)*)? d = {3} DFAedge({1}, 3) = ?? Que es DFAedge({3},.)?

3 -   .      (-| ?) ·(0|1|2|3|4|5|6|7|8|9)+ · (. ·(0|1|2|3|4|5|6|7|8|9)*)? d = {3} DFAedge({1}, 3) = {4, 5, 6, 8} Que es DFAedge({3},.)?

Algoritmo states[0]  {}; states[1]  closure({s1}) p  1; j  0 while j  p foreach c  e  DFAedge(states[ j ], c) if e = states[i] for some i  p then trans[j,c]  i else p  p + 1 states[p]  e trans[j,c]  p j  j + 1 Sea  el alfabeto.

Implementación de DFA El algoritmo anterior construye una matriz de transición que sirve para implementar el DFA. int trans[][256] = { /* e f g h i j... */ /* estado 0 */ {0,0...0,0,0, ,0,0,0,0,0... */ /* estado 1 */ {0,0...7,7,7, ,4,4,4,2,4... */ /* estado 2 */ {0,0...4,4,4, ,3,4,4,4,4... */ /* estado 3 */ {0,0...4,4,4, ,4,4,4,4,4... */ /* estado 4 */ {0,0...4,4,4, ,4,4,4,4,4... */ /* estado 5 */ {0,0...6,6,6, ,0,0,0,0,0... */ et cetera } Usamos el estado 0 para representar la ausencia de una arista

Algoritmo states[0]  {}; states[1]  closure({s1}) p  1; j  0 while j  p foreach c  e  DFAedge(states[ j ], c) if e = states[i] for some i  p then trans[j,c]  i else p  p + 1 states[p]  e trans[j,c]  p j  j + 1 Sea  el alfabeto. Cuándo j = 0 el algoritmo construye el estado 0 int trans[][256] = { /* e f g h i j... */ /* estado 0 */ {0,0...0,0,0, ,0,0,0,0,0... */ /* estado 1 */ {0,0...7,7,7, ,4,4,4,2,4... */ /* estado 2 */ {0,0...4,4,4, ,3,4,4,4,4... */ /* estado 3 */ {0,0...4,4,4, ,4,4,4,4,4... */ /* estado 4 */ {0,0...4,4,4, ,4,4,4,4,4... */ /* estado 5 */ {0,0...6,6,6, ,0,0,0,0,0... */ et cetera }

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? -   .      closure({1}) = {1, 2} 1,2

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? -   .      DFAedge({1,2}, -) = {2} 1,2 2 -

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? -   .      closure({2}) = {2} 1,2 2 -

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? -   .      DFAedge({1,2},0..9) = {3} 1, o,1,2,3,4,5,6,7,8,9

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? -   .      closure({3}) = {2,3,4,8} 1,2 2 2,3,4, 8 - o,1,2,3,4,5,6,7,8,9

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? -   .      DFAedge({2}, 0..9) = {3} closure({3}) = {2,3,4,8} 1,2 2 2,3,4, 8 - o,1,2,3,4,5,6,7,8,9

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? -   .      DFAedge({2,3,4,8}, 0..9) = {3} closure({3}) = {2,3,4,8} 1,2 2 2,3,4, 8 - o,1,2,3,4,5,6,7,8,9

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? -   .      DFAedge({2,3,4,8},.) = {5} closure({5}) = {5,6,8} 1,2 2 2,3,4, 8 5,6,8 - o,1,2,3,4,5,6,7,8,9.

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? -   .      DFAedge({5,6,8}, 0..9) = {7} closure({7}) = {6,7,8} 1,2 2 2,3,4, 8 5,6,8 6,7,8 - o,1,2,3,4,5,6,7,8,9.

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? -   .      DFAedge({6,7,8}, 0..9) = {7} closure({7}) = {6,7,8} 1,2 2 2,3,4, 8 5,6,8 6,7,8 - o,1,2,3,4,5,6,7,8,9.

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? -   .      ,2 2 2,3,4, 8 5,6,8 6,7,8 - o,1,2,3,4,5,6,7,8,9. El estado de aceptación es 8, así que marcamos los estados que contienen a 8 como estados aceptados.

(-|  (0|1|2|3|4|5|6|7|8|9)+  (.  (0|1|2|3|4|5|6|7|8|9)*)? -   .      ,2 2 2,3,4, 8 5,6,8 6,7,8 - o,1,2,3,4,5,6,7,8,9. NFA DFA

En la práctica ● Usamos herramientas automáticas para construir analizadores léxicos – Dado un conjunto de tokens definidos con expresiones regulares, generamos un tokenizador del stream de caracteres mediante la construcción de un DFA ● Herramientas comunes para generar DFA's – lex en C – Jlex en Java ● Vamos a hablar acerca de lex