La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "Compiladores Análisis Léxico Oscar Bonilla Universidad Galileo."— Transcripción de la presentación:

1 Compiladores Análisis Léxico Oscar Bonilla obonilla@galileo.edu Universidad Galileo

2 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

3 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.

4 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:

5 (-|  (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 .      12345678

6 (-|  (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 .      12345678

7 (-|  (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 .      12345678

8 (-|  (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 .      12345678

9 (-|  (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 .      12345678

10 (-|  (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 .      12345678

11 (-|  (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 .      12345678

12 (-|  (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 .      12345678

13 (-|  (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 .      12345678

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

15 (-|  (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 -  0 1 2 3 4 5 6 7 8 9  0 1 2 3 4 5 6 7 8 9 .      1245678 Pregunta: Que es Closure(3) ?

16 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?

17 3 -  0 1 2 3 4 5 6 7 8 9  0 1 2 3 4 5 6 7 8 9 .      124567 8 (-| ?) ·(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)?

18 3 -  0 1 2 3 4 5 6 7 8 9  0 1 2 3 4 5 6 7 8 9 .      124567 8 (-| ?) ·(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)?

19 3 -  0 1 2 3 4 5 6 7 8 9  0 1 2 3 4 5 6 7 8 9 .      124567 8 (-| ?) ·(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)?

20 3 -  0 1 2 3 4 5 6 7 8 9  0 1 2 3 4 5 6 7 8 9 .      124567 8 (-| ?) ·(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)?

21 3 -  0 1 2 3 4 5 6 7 8 9  0 1 2 3 4 5 6 7 8 9 .      124567 8 (-| ?) ·(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)?

22 3 -  0 1 2 3 4 5 6 7 8 9  0 1 2 3 4 5 6 7 8 9 .      124567 8 (-| ?) ·(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)?

23 3 -  0 1 2 3 4 5 6 7 8 9  0 1 2 3 4 5 6 7 8 9 .      124567 8 (-| ?) ·(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},.)?

24 3 -  0 1 2 3 4 5 6 7 8 9  0 1 2 3 4 5 6 7 8 9 .      124567 8 (-| ?) ·(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},.)?

25 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.

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

27 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] = { /*... 0 1 2... -... e f g h i j... */ /* estado 0 */ {0,0...0,0,0,... 0... 0,0,0,0,0,0... */ /* estado 1 */ {0,0...7,7,7,... 9... 4,4,4,4,2,4... */ /* estado 2 */ {0,0...4,4,4,... 0... 4,3,4,4,4,4... */ /* estado 3 */ {0,0...4,4,4,... 0... 4,4,4,4,4,4... */ /* estado 4 */ {0,0...4,4,4,... 0... 4,4,4,4,4,4... */ /* estado 5 */ {0,0...6,6,6,... 0... 0,0,0,0,0,0... */ et cetera }

28 (-|  (0|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  0 1 2 3 4 5 6 7 8 9 .      12345678 closure({1}) = {1, 2} 1,2

29 (-|  (0|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  0 1 2 3 4 5 6 7 8 9 .      12345678 DFAedge({1,2}, -) = {2} 1,2 2 -

30 (-|  (0|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  0 1 2 3 4 5 6 7 8 9 .      12345678 closure({2}) = {2} 1,2 2 -

31 (-|  (0|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  0 1 2 3 4 5 6 7 8 9 .      12345678 DFAedge({1,2},0..9) = {3} 1,2 2 3 - o,1,2,3,4,5,6,7,8,9

32 (-|  (0|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  0 1 2 3 4 5 6 7 8 9 .      12345678 closure({3}) = {2,3,4,8} 1,2 2 2,3,4, 8 - o,1,2,3,4,5,6,7,8,9

33 (-|  (0|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  0 1 2 3 4 5 6 7 8 9 .      12345678 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

34 (-|  (0|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  0 1 2 3 4 5 6 7 8 9 .      12345678 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

35 (-|  (0|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  0 1 2 3 4 5 6 7 8 9 .      12345678 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.

36 (-|  (0|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  0 1 2 3 4 5 6 7 8 9 .      12345678 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.

37 (-|  (0|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  0 1 2 3 4 5 6 7 8 9 .      12345678 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.

38 (-|  (0|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  0 1 2 3 4 5 6 7 8 9 .      12345678 1,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.

39 (-|  (0|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  0 1 2 3 4 5 6 7 8 9 .      12345678 1,2 2 2,3,4, 8 5,6,8 6,7,8 - o,1,2,3,4,5,6,7,8,9. NFA DFA

40 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


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

Presentaciones similares


Anuncios Google