Escolar Documentos
Profissional Documentos
Cultura Documentos
Contenido
Recordando la estructura de un compilador Recordando el anlisis lxico El anlisis sintctico Comparacin con el anlisis lxico El Rol del Parser Lenguajes de programacin Gramticas Estructura Notacin Lenguajes libres de contexto Derivaciones y arboles sintcticos Ms a la izquierda (De izquierda a derecha) Ms a la derecha (De derecha a izquierda) Ejercicios 05
Compiladores (Anlisis Sintctico I - Edgardo A. Franco)
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
Anlisis
Tabla de smbolos
Sntesis
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
lxico o escaneo. El analizador lxico lee el flujo de caracteres que componen el programa fuente y los agrupa en secuencias significativas, conocidas como lexemas. Para cada lexema, el analizador lxico produce como salida un token de la forma:
Smbolo abstracto
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
Smbolo Abstracto
identificador
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
componentes de los tokens producidos por el analizador lxico para crear una representacin intermedia en forma de rbol que describa la estructura gramatical del flujo de tokens.
Una representacin tpica es el rbol sintctico, en el cul cada
nodo interior representa una operacin y los hijos del nodo representan los argumentos de la operacin.
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
El anlisis sintctico
posicion = inicial + velocidad * 60
Flujo de tokens del anlisis lxico
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
El anlisis sintctico
Entrada: Secuencia de tokens de un analizador
lxico
Salida: El rbol sintctico de un programa
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
Entrada
Secuencia de caracteres Secuencia de tokens
Salida
Secuencia de tokens rbol Sintctico
Parser
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
10
no vlidas.
10
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
11
Solucin: Utilizar una gramtica libre del contexto que tiene una complejidad lineal y dejar las caractersticas del lenguaje dependientes del contexto para el anlisis semntico.
11
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
12
lenguajes de programacin tienen estructuras recursivas. Considere el lenguaje de las expresiones aritmticas con: enteros, +,*, ( y ) Una expresin es cualquiera de:
Un entero Una expresin seguida de + seguida de otra expresin. Una expresin seguida de * seguida de otra expresin. Un ( seguido de una expresin seguido de un ).
12
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
13
Son expresiones.
13
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
14
14
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
15
Observaciones
Todas las expresiones aritmticas se pueden obtener por
aritmtica vlida
Esto significa que no podemos obtener ( int ))
mediante
reemplazos.
15
2 o gramticas independientes del contexto, son las que generan los lenguajes libres o independientes del contexto. Los lenguajes libres del contexto son aquellos que pueden ser reconocidos por un autmata de pila determinstico o no determinstico.
Como toda gramtica se definen mediante una cudrupla
G = (N, T, P, S)
- N es un conjunto finito de smbolos no terminales - T es un conjunto finito de smbolos terminales - P es un conjunto finito de producciones - S es el smbolo inicial o axioma
Compiladores (Anlisis Sintctico IV - Edgardo A. Franco)
16
tiene la forma:
el smbolo inicial o un smbolo no terminal y en el lado derecho de una produccin cualquier cadena de smbolos terminales y/o no terminales de longitud mayor o igual que 1. La gramtica puede contener tambin la produccin si el lenguaje que se quiere generar contiene la cadena vaca.
Compiladores (Anlisis Sintctico IV - Edgardo A. Franco)
17
eficientes frente a los autmatas a pila necesarios para reconocer las GLC, la eficiencia del traductor se vera comprometida.
18
consideremos el problema de los parntesis equilibrados en una expresin aritmtica. El hecho de que haya un parntesis abierto obliga a que haya un parntesis cerrado.
Compiladores (Anlisis Sintctico IV - Edgardo A. Franco)
19
prximo sera: pero no se garantiza que el numero de as antes y despus sea el mismo.
Las expresiones regulares NO SABEN contar. NO es
20
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
21
terminal V puede siempre ser sustituido por w sin tener en cuenta el contexto en el que ocurra.
Un lenguaje formal es libre de contexto si hay una gramtica
21
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
22
mayora de los lenguajes de programacin, de hecho, la sintaxis de la mayora de lenguajes de programacin est definida mediante gramticas libres de contexto.
La notacin ms frecuentemente utilizada para expresar
22
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
23
donde E N donde Yi NT
23
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
24
Ejemplo de GLC
Expresiones aritmticas simples E int EE+E EE*E E(E) Un no terminal: E Varios terminales: int, +, *, (, ) Llamados terminales por que nunca se reemplazan Por convencin el primer no terminal para la primera produccin es el smbolo inicial.
24
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
25
Expresiones Aritmticas
Expresiones aritmticas simples
id (id) (id) * id
id + id id * id id * (id)
25
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
26
26
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
27
S
Una derivacin se puede dibujar como un rbol
El smbolo inicial es la raz del rbol Para cada produccin X Y1Yn agregar hijos Y1,
Yn a el nodo X
27
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
28
Ejemplo de derivacin
Gramtica
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
29
Ejemplo de derivacin
(Continuacin)
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
30
Expresin
30
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
31
E E+E
31
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
32
E E+E E*E+E
E *
32
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
33
id
Compiladores (Anlisis Sintctico I - Edgardo A. Franco)
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
34
id
id
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
35
id
id
id
35
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
36
Notas en derivaciones
Un rbol sintctico tiene Terminales en las hojas No terminales en los nodos interiores Un recorrido de izquierda a derecha de las hojas da
36
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
37
no terminal ms a la izquierda.
Existe una nocin
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
38
Expresin
38
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
39
E E+E
39
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
40
E E+E E+id
id
40
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
41
id
41
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
42
id
id
Compiladores (Anlisis Sintctico I - Edgardo A. Franco)
42
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
43
id
id
id
43
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
44
44
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
45
Resumen de derivaciones
No slo estamos interesados si: s L(G) Necesitamos un rbol sintctico para s Una derivacin define un rbol sintctico Pero un rbol sintctico puede tener ms de una derivacin Tanto las derivaciones ms a la izquierda como ms a
45
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
46
Resumen de derivaciones
Derivacin por la izquierda E Derivacin por la derecha E
id
id
id
id
id
Compiladores (Anlisis Sintctico II - Edgardo A. Franco)
id
46
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
47
Resumen de derivaciones
La diferencia es el orden en el cual se agregan las ramas,
pero se genera el mismo rbol por ambos lados, lo que indica que es una gramtica no ambigua para obtener la cadena id*id+id.
47
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
48
Ejercicios 05
Problema 01 Considere la siguiente gramtica libre de contexto: S SS | SS* | a
y la cadena
aa a *
a) Proporcione una derivacin por la izquierda para la cadena b) Proporcione una derivacin por la derecha para la cadena c) Proporcione un rbol de anlisis sintctico para la cadena d) La gramtica es ambigua o no? Justifique su respuesta
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
49
Ejercicios 05
Problema 02 Considere la siguiente gramtica libre de contexto:
S 0S1 | 01
y la cadena
000111
a) Proporcione una derivacin por la izquierda para la cadena b) Proporcione una derivacin por la derecha para la cadena c) Proporcione un rbol de anlisis sintctico para la cadena d) La gramtica es ambigua o no? Justifique su respuesta
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
50
Ejercicios 05
Problema 03 Considere la siguiente gramtica libre de contexto: S SS | *SS | a
y la cadena
*aaa
a) Proporcione una derivacin por la izquierda para la cadena b) Proporcione una derivacin por la derecha para la cadena c) Proporcione un rbol de anlisis sintctico para la cadena d) La gramtica es ambigua o no? Justifique su respuesta
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
51
Ejercicios 05
Problema 04 Considere la siguiente gramtica libre de contexto: S S (S )S |
y la cadena
(()())
a) Proporcione una derivacin por la izquierda para la cadena b) Proporcione una derivacin por la derecha para la cadena c) Proporcione un rbol de anlisis sintctico para la cadena d) La gramtica es ambigua o no? Justifique su respuesta
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
52
Ejercicios 05
Problema 05 Considere la siguiente gramtica libre de contexto: S S S | SS | (S ) | S* | a
y la cadena
( a a) * a
a) Proporcione una derivacin por la izquierda para la cadena b) Proporcione una derivacin por la derecha para la cadena c) Proporcione un rbol de anlisis sintctico para la cadena d) La gramtica es ambigua o no? Justifique su respuesta
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
53
Ejercicios 05
Problema 06 Considere la siguiente gramtica libre de contexto:
S aSbS | bSaS |
y la cadena
aabbab
a) Proporcione una derivacin por la izquierda para la cadena b) Proporcione una derivacin por la derecha para la cadena c) Proporcione un rbol de anlisis sintctico para la cadena d) La gramtica es ambigua o no? Justifique su respuesta
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
54
Ejercicios 05
Problema 08 Disee gramticas para el siguiente lenguaje:
a) El conjunto de todas las cadenas de 0s y 1s , de tal forma que
16 Anlisis sintctico I
Compiladores - Profr. Edgardo Adrin Franco Martnez
55
Ejercicios 05
Fecha de entrega
Entregar en formato digital va Web, con el titulo "Ejercicios 05 GLC derivaciones" a ms tardar el da lunes 11 de abril de 2011.