Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo...
-
Upload
adoracion-lafuente -
Category
Documents
-
view
249 -
download
0
Transcript of Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo...
![Page 1: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/1.jpg)
CompiladoresIntroducción al Análisis Sintáctico
Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones
![Page 2: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/2.jpg)
Oscar Bonilla 2 Universidad Galileo
Resumen
• Overview del análisis léxico
• Qué es análisis sintáctico
• Gramáticas libres de contexto
• Derivaciones y árboles de parseo
• Top-down vs. Bottom-up Parsing
• Grámaticas Ambiguas
• Implementando un Parser
![Page 3: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/3.jpg)
Oscar Bonilla 3 Universidad Galileo
Anatomia de un Compilador
Optimizador
Generador de Código
Representación Intermedia Optimizada
Código en Assembler
Generador de Código Intermedio
Representación Intermedia
Analizador Léxico (Scanner)
Analizador Sintáctico (Parser)
Token Stream
Arbol de Parseo
Programa (character stream)
![Page 4: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/4.jpg)
Oscar Bonilla 4 Universidad Galileo
Resumen de Análisis Léxico
• El analizador léxico crea tokens a partir de un character stream
• Los tokens se definen usando expresiones regulares
![Page 5: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/5.jpg)
Oscar Bonilla 5 Universidad Galileo
Expresiones Regulares, Gramáticas y Lenguajes
• Una expresión regular puede ser escrita usando:– Caracteres en el alfabeto– Operadores de expresiones regulares:
‘*’ ‘·’ ‘|’ ‘+’ ‘?’ ‘(‘ ‘)’– Ejemplo:
(-| ε) ·(0|1|2|3|4|5|6|7|8|9)+ · (. ·(0|1|2|3|4|5|6|7|8|9)*)?
• Un lenguaje regular es un lenguaje definido por una expresión regular
![Page 6: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/6.jpg)
Oscar Bonilla 6 Universidad Galileo
Expresiones Regulares, Gramáticas y Lenguajes
• Qué hay acerca de las variables simbólicas?– Ejemplo:
num = 0|1|2|3|4|5|6|7|8|9posint = num · num*int = (ε | -) · posint real = int · (ε | (. · posint))
• Sólo son una abreviación, llamada “syntactic sugar”– Ejemplo:
(-| ε) ·(0|1|2|3|4|5|6|7|8|9)+ · (. ·(0|1|2|3|4|5|6|7|8|9)*)?
![Page 7: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/7.jpg)
Oscar Bonilla 7 Universidad Galileo
Resumen de Análisis Léxico• El analizador léxico crea tokens a partir de un
character stream• Los tokens se definen usando expresiones
regulares• Las expresiones regulares pueden mapearse a
un Automaton Finito No Determinístico (NFA)– Por construcción simple
• NFA se transforma a un DFA – Algoritmo de transformación– Ejecutar un DFA es fácil
![Page 8: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/8.jpg)
Oscar Bonilla 8 Universidad Galileo
Resumen
• Overview del análisis léxico
• Qúe es análisis sintáctico
• Gramáticas libres de contexto
• Derivación y Arboles de Parseo
• Top-down vs. Bottom-up Parsing
• Gramáticas Ambiguas
• Implementando un Parser
![Page 9: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/9.jpg)
Oscar Bonilla 9 Universidad Galileo
Sintaxis y Semántica de un Lenguaje de Programación?
• Sintaxis – Como se ve un programa– Representación textual o estructura– Es posible una definición matemática precisa
• Semántica– Cuál es el significado de un programa– Es más difícil dar una definición matemática
![Page 10: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/10.jpg)
Oscar Bonilla 10 Universidad Galileo
Por qué hacer análisis sintáctico?
• Podemos proveer una definición precisa y fácil de entender
• Una gramática apropiada imparte estructura a un lenguaje de programación
• Podemos construir automáticamente un parser que determine si el programa es sintácticamente correcto
• Ayuda en el proceso de traducción
• Fácil modificar/añadir al lenguaje
![Page 11: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/11.jpg)
Oscar Bonilla 11 Universidad Galileo
Anatomia de un Compilador
Optimizador de Código
Generador de Código
Representación Intermedia Optimizada
Código en Assembler
Generador de Código Intermedio
Representación Intermedia
Analizador Léxico (Scanner)
Analizador Sintáctico (Parser)
Token Stream
Arbol de Parseo
Programa (character stream)
![Page 12: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/12.jpg)
Oscar Bonilla 12 Universidad Galileo
Entrada y Salida de un Parser
-
( )
123.3 23.6+
minus_op
left_paren_op
num(123.3)
plus_op
num(23.6)
right_paren_op
Token Stream Arbol de Parseo
Entrada: - (123.3 + 23.6)
Ana
liza
dor
Sin
táct
ico
(Par
ser)
![Page 13: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/13.jpg)
Oscar Bonilla 13 Universidad Galileo
Definición de la Sintaxis
• Tenemos que proveer una definición precisa y fácil de entender de la sintaxis del lenguaje de programación
• Podemos usar expresiones regulares?– Podemos usar un lenguaje regular para definir un
lenguaje de programación?
![Page 14: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/14.jpg)
Oscar Bonilla 14 Universidad Galileo
Ejemplo: Scope JerárquicoProcedure foo(integer m, integer n, integer j) { for i = 1 to n do {
if (i == j) {j = j + 1; m = i*j;
} for k = i to n { m = m + k;
} }}
![Page 15: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/15.jpg)
Oscar Bonilla 15 Universidad Galileo
Ejemplo: Scope JerárquicoProcedure foo(integer m, integer n, integer j) { for i = 1 to n do {
if (i == j) {j = j + 1; m = i*j;
} for k = i to n { m = m + k;
} }}
• Problema de los paréntesis balanceados– Ejemplo: {{}{{{}{{}}}}}
![Page 16: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/16.jpg)
Oscar Bonilla 16 Universidad Galileo
Problema de los paréntesis balanceados
• Podemos definir esto usando una expresión regular?
![Page 17: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/17.jpg)
Oscar Bonilla 17 Universidad Galileo
Problema de los paréntesis balanceados
• Podemos definir esto usando una expresión regular?
NO!
![Page 18: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/18.jpg)
Oscar Bonilla 18 Universidad Galileo
Problema de los paréntesis balanceados
• Podemos definir esto usando una expresión regular?NO!
• Intuición
• Número de paréntesis abiertos debe ser igual a número de paréntesis cerrados
• Necesitamos mantener un conteo o necesitamos recursión
• Además: NFA’s y DFA’s no pueden ejecutar conteo sin límites
![Page 19: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/19.jpg)
Oscar Bonilla 19 Universidad Galileo
Problema de los paréntesis balanceados
• Hay alguna gramática que defina esto?
<S> ( <S> ) <S> | ε
• La definición es recursiva
• Esta es una gramática libre de contexto– Es más expresiva que las expresiones regulares
![Page 20: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/20.jpg)
Oscar Bonilla 20 Universidad Galileo
Resumen
• Overview del análisis léxico
• Qué es análisis sintáctico?
• Gramáticas libres de contexto
• Derivación y Arboles de Parseo
• Top-down vs. Bottom-up Parsing
• Gramáticas Ambiguas
• Implementando un Parser
![Page 21: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/21.jpg)
Oscar Bonilla 21 Universidad Galileo
Definiendo Context-Free Grammars (CFGs)
• Terminales– Símbolos para strings o tokens
• No terminales– Variables sintácticas
• Símbolo de Inicio– Un no-terminal especial es designado
• Producciones– La forma en que los terminales y no-terminales son
combinados para formar strings– Un no-terminal en el lado izquierdo (LHS) y un string de
terminales y no-terminales en el lado derecho (RHS)
![Page 22: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/22.jpg)
Oscar Bonilla 22 Universidad Galileo
Ejemplo de una CFG
<S> ( <S> ) <S> | ε
![Page 23: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/23.jpg)
Oscar Bonilla 23 Universidad Galileo
Ejemplo de una CFG
<S> ( <S> ) <S>
<S> ε
![Page 24: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/24.jpg)
Oscar Bonilla 24 Universidad Galileo
Ejemplo de una CFG
<S> ( <S> ) <S>
<S> ε Terminales
![Page 25: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/25.jpg)
Oscar Bonilla 25 Universidad Galileo
Ejemplo de una CFG
<S> ( <S> ) <S>
<S> ε No-terminales
![Page 26: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/26.jpg)
Oscar Bonilla 26 Universidad Galileo
Ejemplo de una CFG
<S> ( <S> ) <S>
<S> ε Símbolo de Inicio: <S>
![Page 27: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/27.jpg)
Oscar Bonilla 27 Universidad Galileo
Ejemplo de una CFG
<S> ( <S> ) <S>
<S> ε Producciones
![Page 28: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/28.jpg)
Oscar Bonilla 28 Universidad Galileo
Los lenguajes regulares son un subconjunto de los lenguajes libres de contexto
a
Expresión Regular Gramática libre de contexto
<A> a
p · q <S> <P> <Q>Si p y q son expresiones regulares, usando CFGs <P> y <Q>
p | q <S> <P><S> <Q>
p * <S> <S> <P><S> ε
![Page 29: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/29.jpg)
Oscar Bonilla 29 Universidad Galileo
Los lenguajes regulares son un subconjunto de los lenguajes libres de contexto
??? <S> <S> <P><S> <P>
Si p es una expresión regular, usando una CFG <P>,
Qué es?
Expresión Regular Gramática libre de contexto
P? ???
![Page 30: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/30.jpg)
Oscar Bonilla 30 Universidad Galileo
Entonces por qué usar expresiones regulares?
• Separar el análisis sintáctico en partes léxica y no-léxica es una buena modularización
• Las reglas léxicas son simples y pueden ser expresadas usando expresiones regulares
• Las expresiones regulares son más concisas
• Las implementaciones de analizadores léxicos para expresiones regulares son más eficientes
![Page 31: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/31.jpg)
Oscar Bonilla 31 Universidad Galileo
Creando una CFG
• Tenemos que crear una CFG a partir de las definiciones del lenguaje
• Hay muchas cosas involucradas– Vamos a ver algunas de ellas en clase
• Veamos un lenguaje simple
![Page 32: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/32.jpg)
Oscar Bonilla 32 Universidad Galileo
Ejemplo: Una CFG para expresiones
• Expresiones aritméticas simples con + y *– 8.2 + 35.6– 8.32 + 86 * 45.3 – (6.001 + 6.004) * (6.035 * -(6.042 + 6.046))
• Terminales (o tokens)– num para todos los números– plus_op (‘+’), minus_op (‘-’), times_op(‘*’),
left_paren_op(‘(‘), right_paren_op(‘)’)
• Cuál es la gramática para todas las expresiones posibles?
![Page 33: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/33.jpg)
Oscar Bonilla 33 Universidad Galileo
Ejemplo: Una CFG para expresiones
<expr> <expr> <op> <expr>
<expr> ( <expr> )
<expr> - <expr>
<expr> num
<op> +
<op> *
![Page 34: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/34.jpg)
Oscar Bonilla 34 Universidad Galileo
Ejemplo: Una CFG para expresiones
<expr> <expr> <op> <expr>
<expr> ( <expr> )
<expr> - <expr>
<expr> num
<op> +
<op> *
Terminales
![Page 35: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/35.jpg)
Oscar Bonilla 35 Universidad Galileo
Ejemplo: Una CFG para expresiones
<expr> <expr> <op> <expr>
<expr> ( <expr> )
<expr> - <expr>
<expr> num
<op> +
<op> *
Terminales
![Page 36: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/36.jpg)
Oscar Bonilla 36 Universidad Galileo
Ejemplo: Una CFG para expresiones
<expr> <expr> <op> <expr>
<expr> ( <expr> )
<expr> - <expr>
<expr> num
<op> +
<op> *
No-terminales
![Page 37: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/37.jpg)
Oscar Bonilla 37 Universidad Galileo
Ejemplo: Una CFG para expresiones
<expr> <expr> <op> <expr>
<expr> ( <expr> )
<expr> - <expr>
<expr> num
<op> +
<op> *
No-terminales
![Page 38: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/38.jpg)
Oscar Bonilla 38 Universidad Galileo
Ejemplo: Una CFG para expresiones
<expr> <expr> <op> <expr>
<expr> ( <expr> )
<expr> - <expr>
<expr> num
<op> +
<op> *
Símbolo de Inicio:<expr>
![Page 39: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/39.jpg)
Oscar Bonilla 39 Universidad Galileo
Ejemplo: Una CFG para expresiones
<expr> <expr> <op> <expr>
<expr> ( <expr> )
<expr> - <expr>
<expr> num
<op> +
<op> *
Producciones
![Page 40: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/40.jpg)
Oscar Bonilla 40 Universidad Galileo
Ejemplo: Una CFG para expresiones
<expr> <expr> <op> <expr>
<expr> ( <expr> )
<expr> - <expr>
<expr> num
<op> +
<op> *
![Page 41: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/41.jpg)
Oscar Bonilla 41 Universidad Galileo
Ejemplo: Una CFG para expresiones
<expr> <expr> <op> <expr> | ( <expr> )
| - <expr> | num
<op> + | *
![Page 42: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/42.jpg)
Oscar Bonilla 42 Universidad Galileo
Pregunta: Cuál es el lenguaje definido por esta CFG?
<S> a<S>a | aa
![Page 43: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/43.jpg)
Oscar Bonilla 43 Universidad Galileo
Resumen
• Overview de análisis léxico
• Qué es análisis sintáctico?
• Gramáticas libres de contexto
• Derivaciones y Arboles de Parseo
• Top-down vs. Bottom-up Parsing
• Gramáticas Ambiguas
• Implementando un Parser
![Page 44: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/44.jpg)
Oscar Bonilla 44 Universidad Galileo
Derivaciones
• Cómo mostramos que una secuencia de tokens es aceptada por una CFG?
• Una producción es usada para derivar una secuencia de tokens a partir del símbolo de inicio
• Dados los strings , y y una producción A Un solo paso de la derivación es
A
![Page 45: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/45.jpg)
Oscar Bonilla 45 Universidad Galileo
Ejemplo de Derivación
• Gramática<expr> <expr><op><expr> | (<expr>) | -<expr> | num
<op> + | *
• Entrada 36 * ( 8 + 23.4)
• Token Streamnum ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 46: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/46.jpg)
Oscar Bonilla 46 Universidad Galileo
Ejemplo de Derivación
<expr>
num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 47: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/47.jpg)
Oscar Bonilla 47 Universidad Galileo
Ejemplo de Derivación
<expr>
num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 48: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/48.jpg)
Oscar Bonilla 48 Universidad Galileo
Ejemplo de Derivación
<expr>
num ‘*’ ‘(‘ num ‘+’ num ‘)’
<expr> <expr><op><expr>
![Page 49: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/49.jpg)
Oscar Bonilla 49 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr>
num ‘*’ ‘(‘ num ‘+’ num ‘)’
<expr> <expr><op><expr>
![Page 50: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/50.jpg)
Oscar Bonilla 50 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr>
num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 51: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/51.jpg)
Oscar Bonilla 51 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr>
num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 52: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/52.jpg)
Oscar Bonilla 52 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr>
num ‘*’ ‘(‘ num ‘+’ num ‘)’
<expr> num
![Page 53: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/53.jpg)
Oscar Bonilla 53 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr>
num ‘*’ ‘(‘ num ‘+’ num ‘)’
<expr> num
![Page 54: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/54.jpg)
Oscar Bonilla 54 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr>
num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 55: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/55.jpg)
Oscar Bonilla 55 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr>
num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 56: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/56.jpg)
Oscar Bonilla 56 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr>
num ‘*’ ‘(‘ num ‘+’ num ‘)’
<op> *
![Page 57: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/57.jpg)
Oscar Bonilla 57 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr>
num ‘*’ ‘(‘ num ‘+’ num ‘)’
<op> *
![Page 58: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/58.jpg)
Oscar Bonilla 58 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr>
num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 59: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/59.jpg)
Oscar Bonilla 59 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr>
num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 60: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/60.jpg)
Oscar Bonilla 60 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr>
num ‘*’ ‘(‘ num ‘+’ num ‘)’
<expr> (<expr>)
![Page 61: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/61.jpg)
Oscar Bonilla 61 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr> num ‘*’ ‘(‘ <expr> ‘)’
num ‘*’ ‘(‘ num ‘+’ num ‘)’
<expr> (<expr>)
![Page 62: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/62.jpg)
Oscar Bonilla 62 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr> num ‘*’ ‘(‘ <expr> ‘)’
num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 63: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/63.jpg)
Oscar Bonilla 63 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr> num ‘*’ ‘(‘ <expr> ‘)’
num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 64: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/64.jpg)
Oscar Bonilla 64 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr> num ‘*’ ‘(‘ <expr> ‘)’
num ‘*’ ‘(‘ num ‘+’ num ‘)’
<expr> <expr><op><expr>
![Page 65: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/65.jpg)
Oscar Bonilla 65 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr> num ‘*’ ‘(‘ <expr> ‘)’ num ‘*’ ‘(‘ <expr> <op> <expr>
‘)’
num ‘*’ ‘(‘ num ‘+’ num ‘)’
<expr> <expr><op><expr>
![Page 66: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/66.jpg)
Oscar Bonilla 66 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr> num ‘*’ ‘(‘ <expr> ‘)’ num ‘*’ ‘(‘ <expr> <op> <expr>
‘)’
num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 67: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/67.jpg)
Oscar Bonilla 67 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr> num ‘*’ ‘(‘ <expr> ‘)’ num ‘*’ ‘(‘ <expr> <op> <expr>
‘)’
num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 68: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/68.jpg)
Oscar Bonilla 68 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr> num ‘*’ ‘(‘ <expr> ‘)’ num ‘*’ ‘(‘ <expr> <op> <expr>
‘)’
num ‘*’ ‘(‘ num ‘+’ num ‘)’
<expr> num
![Page 69: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/69.jpg)
Oscar Bonilla 69 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr> num ‘*’ ‘(‘ <expr> ‘)’ num ‘*’ ‘(‘ <expr> <op> <expr>
‘)’ num ‘*’ ‘(‘ num <op> <expr> ‘)’
num ‘*’ ‘(‘ num ‘+’ num ‘)’
<expr> num
![Page 70: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/70.jpg)
Oscar Bonilla 70 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr> num ‘*’ ‘(‘ <expr> ‘)’ num ‘*’ ‘(‘ <expr> <op> <expr> ‘)’ num ‘*’ ‘(‘ num <op> <expr> ‘)’
num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 71: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/71.jpg)
Oscar Bonilla 71 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr> num ‘*’ ‘(‘ <expr> ‘)’ num ‘*’ ‘(‘ <expr> <op> <expr>
‘)’ num ‘*’ ‘(‘ num <op> <expr> ‘)’
num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 72: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/72.jpg)
Oscar Bonilla 72 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr> num ‘*’ ‘(‘ <expr> ‘)’ num ‘*’ ‘(‘ <expr> <op> <expr>
‘)’ num ‘*’ ‘(‘ num <op> <expr> ‘)’
num ‘*’ ‘(‘ num ‘+’ num ‘)’
<op> +
![Page 73: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/73.jpg)
Oscar Bonilla 73 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr> num ‘*’ ‘(‘ <expr> ‘)’ num ‘*’ ‘(‘ <expr> <op> <expr> ‘)’ num ‘*’ ‘(‘ num <op> <expr> ‘)’ num ‘*’ ‘(‘ num ‘+’ <expr> ‘)’
num ‘*’ ‘(‘ num ‘+’ num ‘)’
<op> +
![Page 74: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/74.jpg)
Oscar Bonilla 74 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr> num ‘*’ ‘(‘ <expr> ‘)’ num ‘*’ ‘(‘ <expr> <op> <expr> ‘)’ num ‘*’ ‘(‘ num <op> <expr> ‘)’ num ‘*’ ‘(‘ num ‘+’ <expr> ‘)’
num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 75: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/75.jpg)
Oscar Bonilla 75 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr> num ‘*’ ‘(‘ <expr> ‘)’ num ‘*’ ‘(‘ <expr> <op> <expr> ‘)’ num ‘*’ ‘(‘ num <op> <expr> ‘)’ num ‘*’ ‘(‘ num ‘+’ <expr> ‘)’
num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 76: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/76.jpg)
Oscar Bonilla 76 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr> num ‘*’ ‘(‘ <expr> ‘)’ num ‘*’ ‘(‘ <expr> <op> <expr> ‘)’ num ‘*’ ‘(‘ num <op> <expr> ‘)’ num ‘*’ ‘(‘ num ‘+’ <expr> ‘)’
num ‘*’ ‘(‘ num ‘+’ num ‘)’
<expr> num
![Page 77: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/77.jpg)
Oscar Bonilla 77 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr> num ‘*’ ‘(‘ <expr> ‘)’ num ‘*’ ‘(‘ <expr> <op> <expr> ‘)’ num ‘*’ ‘(‘ num <op> <expr> ‘)’ num ‘*’ ‘(‘ num ‘+’ <expr> ‘)’ num ‘*’ ‘(‘ num ‘+’ num ‘)’
num ‘*’ ‘(‘ num ‘+’ num ‘)’
<expr> num
![Page 78: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/78.jpg)
Oscar Bonilla 78 Universidad Galileo
Ejemplo de Derivación
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr> num ‘*’ ‘(‘ <expr> ‘)’ num ‘*’ ‘(‘ <expr> <op> <expr> ‘)’ num ‘*’ ‘(‘ num <op> <expr> ‘)’ num ‘*’ ‘(‘ num ‘+’ <expr> ‘)’ num ‘*’ ‘(‘ num ‘+’ num ‘)’
num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 79: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/79.jpg)
Oscar Bonilla 79 Universidad Galileo
Arbol de Parseo
• Representación gráfica de la estructura parseada
• Muestra la secuencia de derivaciones efectuada– Nodos internos son no-terminales– Hojas son terminales– Cada nodo padre es el lado izquierdo (LHS) y los
hijos son el lado derecho (RHS) de una producción
![Page 80: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/80.jpg)
Oscar Bonilla 80 Universidad Galileo
Ejemplo de Arbol de Parseo
<expr>
![Page 81: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/81.jpg)
Oscar Bonilla 81 Universidad Galileo
Ejemplo de Arbol de Parseo
<expr> <expr> <op> <expr>
<expr>
<expr><expr> <op>
![Page 82: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/82.jpg)
Oscar Bonilla 82 Universidad Galileo
Ejemplo de Arbol de Parseo
<expr> num
num
<expr>
<expr><expr> <op>
![Page 83: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/83.jpg)
Oscar Bonilla 83 Universidad Galileo
Ejemplo de Arbol de Parseo
<op> ‘*’
*num
<expr>
<expr><expr> <op>
![Page 84: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/84.jpg)
Oscar Bonilla 84 Universidad Galileo
Ejemplo de Arbol de Parseo
<expr> ‘(‘ <expr> ‘)’
( )*num
<expr>
<expr><expr>
<expr>
<op>
![Page 85: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/85.jpg)
Oscar Bonilla 85 Universidad Galileo
Ejemplo de Arbol de Parseo
<expr> <expr> <op> <expr>
( )*num
<expr>
<expr><expr>
<expr>
<expr>
<expr>
<op>
<op>
![Page 86: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/86.jpg)
Oscar Bonilla 86 Universidad Galileo
Ejemplo de Arbol de Parseo
<expr> num
num
( )*num
<expr>
<expr><expr>
<expr>
<expr>
<expr>
<op>
<op>
![Page 87: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/87.jpg)
Oscar Bonilla 87 Universidad Galileo
Ejemplo de Arbol de Parseo
<op> ‘+’
num +
( )*num
<expr>
<expr><expr>
<expr>
<expr>
<expr>
<op>
<op>
![Page 88: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/88.jpg)
Oscar Bonilla 88 Universidad Galileo
Ejemplo de Arbol de Parseo
<expr> num
num num+
( )*num
<expr>
<expr><expr>
<expr>
<expr>
<expr>
<op>
<op>
![Page 89: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/89.jpg)
Oscar Bonilla 89 Universidad Galileo
Ejemplo de Arbol de Parseo
num num+
( )*num
<expr>
<expr><expr>
<expr>
<expr>
<expr>
<op>
<op>
num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 90: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/90.jpg)
Oscar Bonilla 90 Universidad Galileo
Resumen
• Overview del análisis léxico
• Qué es análisis sintáctico?
• Gramáticas libres de contexto
• Derivaciones y Arboles de Parseo
• Top-down vs. Bottom-up Parsing
• Gramáticas Ambiguas
• Implementando un Parser
![Page 91: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/91.jpg)
Oscar Bonilla 91 Universidad Galileo
Derivaciones left-most vs. right-most
• Leftmost derivation– En el string, encontramos el no-terminal de más a la
izquierda y le aplicamos una producción– El ejemplo anterior fue de una leftmos derivation
• Rightmost derivation– Encontramos el no-terminal de más a la derecha y le
aplicamos una producción
![Page 92: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/92.jpg)
Oscar Bonilla 92 Universidad Galileo
Ejemplo de Right-Derivation
<expr>
Producción: String: <expr>
![Page 93: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/93.jpg)
Oscar Bonilla 93 Universidad Galileo
Ejemplo de Right-Derivation
<expr>
<expr><expr> <op>
Producción: <expr> <expr> <op> <expr>
String: <expr> <op> <expr>
![Page 94: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/94.jpg)
Oscar Bonilla 94 Universidad Galileo
Ejemplo de Right-Derivation
( )
<expr>
<expr><expr>
<expr>
<op>
Producción: <expr> ‘(‘ <expr> ‘)’
String: <expr> <op> ‘(‘ <expr> ‘)’
![Page 95: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/95.jpg)
Oscar Bonilla 95 Universidad Galileo
Ejemplo de Right-Derivation
( )
<expr>
<expr><expr>
<expr>
<expr>
<expr>
<op>
<op>
Producción: <expr> <expr> <op> <expr>
String: <expr> <op> ‘(‘ <expr> <op> <expr> ‘)’
![Page 96: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/96.jpg)
Oscar Bonilla 96 Universidad Galileo
Ejemplo de Right-Derivation
num
( )
<expr>
<expr><expr>
<expr>
<expr>
<expr>
<op>
<op>
Producción: <expr> num
String: <expr> <op> ‘(‘ <expr> <op> num ‘)’
![Page 97: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/97.jpg)
Oscar Bonilla 97 Universidad Galileo
Ejemplo de Right-Derivation
num+
( )
<expr>
<expr><expr>
<expr>
<expr>
<expr>
<op>
<op>
Producción: <op> ‘+’
String: <expr> <op> ‘(‘ <expr> ‘+’ num ‘)’
![Page 98: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/98.jpg)
Oscar Bonilla 98 Universidad Galileo
Ejemplo de Right-Derivation
num num+
( )
<expr>
<expr><expr>
<expr>
<expr>
<expr>
<op>
<op>
Producción: <expr> num
String: <expr> <op> ‘(‘ num ‘+’ num ‘)’
![Page 99: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/99.jpg)
Oscar Bonilla 99 Universidad Galileo
Ejemplo de Right-Derivation
num num+
( )*
<expr>
<expr><expr>
<expr>
<expr>
<expr>
<op>
<op>
Producción: <op> ‘*’
String: <expr> ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 100: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/100.jpg)
Oscar Bonilla 100 Universidad Galileo
Ejemplo de Right-Derivation
num num+
( )*num
<expr>
<expr><expr>
<expr>
<expr>
<expr>
<op>
<op>
Producción: <expr> num
String: num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 101: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/101.jpg)
Oscar Bonilla 101 Universidad Galileo
Ejemplo de Right-Derivation
num num+
( )*num
<expr>
<expr><expr>
<expr>
<expr>
<expr>
<op>
<op>
String: num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 102: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/102.jpg)
Oscar Bonilla 102 Universidad Galileo
Ejemplo de Right-Derivation <expr> <expr> <op> <expr> <expr> <op> ‘(‘ <expr> ‘)’ <expr> <op> ‘(‘ <expr> <op> <expr>
‘)’ <expr> <op> ‘(‘ <expr> <op> num ‘)’ <expr> <op> ‘(‘ <expr> ‘+’ num ‘)’’ <expr> <op> ‘(‘ num ‘+’ num ‘)’ <expr> ‘*’ ‘(‘ num ‘+’ num ‘)’ num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 103: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/103.jpg)
Oscar Bonilla 103 Universidad Galileo
Top-down vs. Bottom-up Parsing
• Normalmente escaneamos de izquierda a derecha
• Left-most derivation refleja top-down parsing– Comenzamos con el símbolo inicial– Terminamos con el string de tokens
![Page 104: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/104.jpg)
Oscar Bonilla 104 Universidad Galileo
Top-down Parsing• Left-most derivation
<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr> num ‘*’ ‘(‘ <expr> ‘)’ num ‘*’ ‘(‘ <expr> <op> <expr> ‘)’ num ‘*’ ‘(‘ num <op> <expr> ‘)’ num ‘*’ ‘(‘ num ‘+’ <expr> ‘)’ num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 105: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/105.jpg)
Oscar Bonilla 105 Universidad Galileo
Top-down vs. Bottom-up Parsing
• Normalmente escaneamos de izquierda a derecha
• Left-most derivation refleja top-down parsing– Comenzamos con el símbolo inicial– Terminamos con el string de tokens
• Right-most derivation refleja bottom-up parsing– Comenzamos con el string de tokens– Terminamos con el símbolo inicial
![Page 106: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/106.jpg)
Oscar Bonilla 106 Universidad Galileo
Bottom-up Parsing• Right-most derivation
<expr> <expr> <op> <expr> <expr> <op> ‘(‘ <expr> ‘)’ <expr> <op> ‘(‘ <expr> <op> <expr> ‘)’ <expr> <op> ‘(‘ <expr> <op> num ‘)’ <expr> <op> ‘(‘ <expr> ‘+’ num ‘)’’ <expr> <op> ‘(‘ num ‘+’ num ‘)’ <expr> ‘*’ ‘(‘ num ‘+’ num ‘)’ num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 107: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/107.jpg)
Oscar Bonilla 107 Universidad Galileo
Bottom-up Parsing• Right-most derivation
<expr> <expr> <op> <expr> <expr> <op> ‘(‘ <expr> ‘)’ <expr> <op> ‘(‘ <expr> <op> <expr> ‘)’ <expr> <op> ‘(‘ <expr> <op> num ‘)’ <expr> <op> ‘(‘ <expr> ‘+’ num ‘)’’ <expr> <op> ‘(‘ num ‘+’ num ‘)’ <expr> ‘*’ ‘(‘ num ‘+’ num ‘)’ num ‘*’ ‘(‘ num ‘+’ num ‘)’
![Page 108: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/108.jpg)
Oscar Bonilla 108 Universidad Galileo
Bottom-up Parsing• Right-most derivation
num ‘*’ ‘(‘ num ‘+’ num ‘)’ <expr> ‘*’ ‘(‘ num ‘+’ num ‘)’ <expr> <op> ‘(‘ num ‘+’ num ‘)’ <expr> <op> ‘(‘ <expr> ‘+’ num ‘)’ <expr> <op> ‘(‘ <expr> <op> num ‘)’ <expr> <op> ‘(‘ <expr> <op> <expr> ‘)’
<expr> <op> ‘(‘ <expr> ‘)’ <expr> <op> <expr> <expr>
![Page 109: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/109.jpg)
Oscar Bonilla 109 Universidad Galileo
Resumen
• Overview de análisis léxico
• Qué es análisis sintáctico?
• Gramáticas libres de contexto
• Derivaciones y Arboles de Parseo
• Top-down vs. Bottom-up Parsing
• Gramáticas Ambiguas
• Implementando un Parser
![Page 110: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/110.jpg)
Oscar Bonilla 110 Universidad Galileo
Otro Ejemplo
• Entrada:124 + 23.5 * 86
• Token Stream: num ‘+’ num ‘*’ num
![Page 111: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/111.jpg)
Oscar Bonilla 111 Universidad Galileo
Otro Ejemplo
<expr>
Producción:String: <expr>
![Page 112: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/112.jpg)
Oscar Bonilla 112 Universidad Galileo
Otro Ejemplo
<expr>
<expr><expr> <op>
Producción: <expr> <expr> <op> <expr>String: <expr> <op> <expr>
![Page 113: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/113.jpg)
Oscar Bonilla 113 Universidad Galileo
Otro Ejemplo
num
<expr>
<expr><expr> <op>
Producción: <expr> <num>String: num <op> <expr>
![Page 114: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/114.jpg)
Oscar Bonilla 114 Universidad Galileo
Otro Ejemplo
+num
<expr>
<expr><expr> <op>
Producción: <op> ‘+’String: num ‘+’ <expr>
![Page 115: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/115.jpg)
Oscar Bonilla 115 Universidad Galileo
Otro Ejemplo
Producción: <expr> <expr> <op> <expr>String: num ‘+’ <expr> <op> <expr>
+num
<expr>
<expr><expr>
<expr> <expr>
<op>
<op>
![Page 116: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/116.jpg)
Oscar Bonilla 116 Universidad Galileo
Otro Ejemplo
Producción: <expr> num String: num ‘+’ num <op> <expr>
num
+num
<expr>
<expr><expr>
<expr> <expr>
<op>
<op>
![Page 117: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/117.jpg)
Oscar Bonilla 117 Universidad Galileo
Otro Ejemplo
num
+num
<expr>
<expr><expr>
<expr> <expr>
<op>
Producción: <op> ‘*’ String: num ‘+’ num ‘*’ <expr>
*
<op>
![Page 118: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/118.jpg)
Oscar Bonilla 118 Universidad Galileo
Otro Ejemplo
num num
+num
<expr>
<expr><expr>
<expr> <expr>
<op>
Producción: <expr> num String: num ‘+’ num ‘*’ num
*
<op>
![Page 119: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/119.jpg)
Oscar Bonilla 119 Universidad Galileo
Otro Ejemplo
String: num ‘+’ num ‘*’ num
num num
+num
<expr>
<expr><expr>
<expr> <expr>
<op>
*
<op>
![Page 120: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/120.jpg)
Oscar Bonilla 120 Universidad Galileo
Otro Ejemplo
String: num ‘+’ num ‘*’ num
• Hay otro orden de derivación?
![Page 121: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/121.jpg)
Oscar Bonilla 121 Universidad Galileo
Otro Ejemplo
<expr>
String: <expr>
![Page 122: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/122.jpg)
Oscar Bonilla 122 Universidad Galileo
Otro Ejemplo
<expr>
<expr> <expr><op>
Producción: <expr> <expr> <op> <expr> String: <expr> <op> <expr>
![Page 123: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/123.jpg)
Oscar Bonilla 123 Universidad Galileo
Otro Ejemplo
num
<expr>
<expr><expr> <op>
Producción: <expr> <num>String: num <op> <expr>
![Page 124: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/124.jpg)
Oscar Bonilla 124 Universidad Galileo
Otro Ejemplo
num
<expr>
<expr><expr> <op>
Producción: <expr> <num>String: num <op> <expr>
Pero también podemos usar esta producción <expr> <expr> <op> <expr>
![Page 125: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/125.jpg)
Oscar Bonilla 125 Universidad Galileo
Otro Ejemplo
<expr>
<expr><expr> <op>
Producción: String: <expr> <op> <expr>
Pero también podemos usar esta producción<expr> <expr> <op> <expr>
![Page 126: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/126.jpg)
Oscar Bonilla 126 Universidad Galileo
Otro Ejemplo
<expr>
<expr> <expr>
<expr> <expr>
<op>
Producción: <expr> <expr> <op> <expr> String: <expr> <op> <expr> <op> <expr>
<op>
![Page 127: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/127.jpg)
Oscar Bonilla 127 Universidad Galileo
Otro Ejemplo
num
<expr>
<expr> <expr>
<expr> <expr>
<op>
Producción: <expr> <num> String: num <op> <expr> <op> <expr>
<op>
![Page 128: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/128.jpg)
Oscar Bonilla 128 Universidad Galileo
Otro Ejemplo
num
<expr>
<expr> <expr>
<expr> <expr>
<op>
Producción: <op> <+> String: num ‘+’ <expr> <op> <expr>
+
<op>
![Page 129: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/129.jpg)
Oscar Bonilla 129 Universidad Galileo
Otro Ejemplo
num num
<expr>
<expr> <expr>
<expr> <expr>
<op>
Producción: <expr> <num> String: num ‘+’ num <op> <expr>
+
<op>
![Page 130: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/130.jpg)
Oscar Bonilla 130 Universidad Galileo
Otro Ejemplo
num num
*
<expr>
<expr> <expr>
<expr> <expr>
<op>
Producción: <op> ‘*’ String: num ‘+’ num ‘*’ <expr>
+
<op>
![Page 131: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/131.jpg)
Oscar Bonilla 131 Universidad Galileo
Otro Ejemplo
num num
* num
<expr>
<expr> <expr>
<expr> <expr>
<op>
Producción: <expr> <num> String: num ‘+’ num ‘*’ num
+
<op>
![Page 132: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/132.jpg)
Oscar Bonilla 132 Universidad Galileo
Otro Ejemplo
num num
* num
<expr>
<expr> <expr>
<expr> <expr>
<op>
String: num ‘+’ num ‘*’ num
+
<op>
![Page 133: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/133.jpg)
Oscar Bonilla 133 Universidad Galileo
Mismo string – Dos derivaciones num ‘+’ num ‘*’ num
num num
* num
<expr>
<expr> <expr>
<expr> <expr>
<op>
+
<op>
num num
+num
<expr>
<expr><expr>
<expr> <expr>
<op>
*
<op>
124 + (23.5 * 86) = 2145 (124 + 23.5) * 86 = 12685
![Page 134: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/134.jpg)
Oscar Bonilla 134 Universidad Galileo
La Gramática es Ambigua
• Aplicar diferentes ordenes de derivación produce árboles de parseo diferentes
• Esto no es bueno!– Lleva a resultados ambiguos– Muy probablemente va a producir resultados
inesperados
• Algunas veces el reescribir la gramática con más no-terminales va a eliminar la ambiguedad
![Page 135: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/135.jpg)
Oscar Bonilla 135 Universidad Galileo
La Gramática Ambigua
<expr> <expr> <op> <expr>
<expr> ( <expr> )
<expr> - <expr>
<expr> num
<op> +
<op> *
![Page 136: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/136.jpg)
Oscar Bonilla 136 Universidad Galileo
Eliminando la Ambiguedad
<expr> <expr> + <term>
<expr> <term>
<term> <term> * <unit>
<term> <unit>
<unit> num
<unit> ( <expr> )
<expr> <expr> <op> <expr>
<expr> ( <expr> )
<expr> - <expr>
<expr> num
<op> +
<op> *
![Page 137: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/137.jpg)
Oscar Bonilla 137 Universidad Galileo
Eliminando la Ambiguedad
String: num ‘+’ num ‘*’ num
num
+
<expr>
<term><expr>
<term> <unit>*
num
<unit>
<term>
num
<unit>
![Page 138: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/138.jpg)
Oscar Bonilla 138 Universidad Galileo
Primer ejemplo en la nueva gramática
+
( )
*
num
<term>
<unit><term>
<expr>
<expr>
<term>
num ‘*’ ‘(‘ num ‘+’ num ‘)’<expr>
<unit>
num
<term>
<unit> num
<unit>
![Page 139: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/139.jpg)
Oscar Bonilla 139 Universidad Galileo
Pregunta: Es esta gramática ambigua?
<stmt> if <expr> then <stlist>
<stmt> if <expr> then <stlist> else <stlist>
![Page 140: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/140.jpg)
Oscar Bonilla 140 Universidad Galileo
Pregunta: Cómo la hacemos no ambigua?
<stmt> if <expr> then <stlist>
<stmt> if <expr> then <stlist> else <stlist>
![Page 141: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/141.jpg)
Oscar Bonilla 141 Universidad Galileo
Resumen
• Overview de análisis léxico
• Qué es análisis sintáctico?
• Gramáticas libres de contexto
• Derivaciones y Arboles de Parseo
• Top-down vs. Bottom-up Parsing
• Gramáticas Ambiguas
• Implementando un Parser
![Page 142: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/142.jpg)
Oscar Bonilla 142 Universidad Galileo
Implementando un Parser
• La implementación de un parser para algunas CFG’s puede ser muy difícil– Tenemos que ver el input y elegir una producción– No podemos elegir la producción correcta sin ver
que viene en el input (looking ahead)
![Page 143: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/143.jpg)
Oscar Bonilla 143 Universidad Galileo
Ejemplo de look ahead
• Gramática<stmt> a <long> b <stmt> a <long> c<long> x <long> | x
• Input string “axxxxxxxxxxxxxxxxx…….”
• Puede que tengamos que ver un montón de símbolos del input antes de decidirnos por una producción
![Page 144: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/144.jpg)
Oscar Bonilla 144 Universidad Galileo
Implementando un Parser
• Implementar un parser para algunas CFG’s puede ser muy difícil– Tenemos que ver el input y elegir una producción– No podemos elegir una producción sin look ahead
• Hay varias técnicas– Cada una puede manejar algunas CFG’s– Categorización de las técnicas
![Page 145: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/145.jpg)
Oscar Bonilla 145 Universidad Galileo
Implementando un Parser
• Implementar un parser para algunas CFG’s puede ser muy difícil– Tenemos que ver el input y elegir una producción– No podemos elegir una producción sin look ahead
• Hay varias técnicas– Cada una puede manejar algunas CFG’s– Categorización de las técnicas
( )
![Page 146: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/146.jpg)
Oscar Bonilla 146 Universidad Galileo
Implementando un Parser
• Implementar un parser para algunas CFG’s puede ser muy difícil– Tenemos que ver el input y elegir una producción– No podemos elegir una producción sin look ahead
• Hay varias técnicas– Cada una puede manejar algunas CFG’s– Categorización de las técnicas
( )L - parsear de izquierda a derecha
R – parsear de derecha a izquierda
![Page 147: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/147.jpg)
Oscar Bonilla 147 Universidad Galileo
Implementando un Parser
• Implementar un parser para algunas CFG’s puede ser muy difícil– Tenemos que ver el input y elegir una producción– No podemos elegir una producción sin look ahead
• Hay varias técnicas– Cada una puede manejar algunas CFG’s– Categorización de las técnicas
( )L - leftmost derivation
R - rightmost derivation
![Page 148: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/148.jpg)
Oscar Bonilla 148 Universidad Galileo
Implementando un Parser
• Implementar un parser para algunas CFG’s puede ser muy difícil– Tenemos que ver el input y elegir una producción– No podemos elegir una producción sin look ahead
• Hay varias técnicas– Cada una puede manejar algunas CFG’s– Categorización de las técnicas
( )Número de caracteres de lookahead
![Page 149: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/149.jpg)
Oscar Bonilla 149 Universidad Galileo
Implementando un Parser
• Implementar un parser para algunas CFG’s puede ser muy difícil– Tenemos que ver el input y elegir una producción– No podemos elegir una producción sin look ahead
• Hay varias técnicas– Cada una puede manejar algunas CFG’s– Categorización de las técnicas
– Ejemplos: LL(0), LR(1)
( )
![Page 150: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/150.jpg)
Oscar Bonilla 150 Universidad Galileo
Siguiente Clase
• Cómo implementar un Parser
• Cómo construir un parser engine para un parser shift-reduce
• Vamos a ver – LR(0)– LR(1)– LALR(1)
ParserEngine
![Page 151: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/151.jpg)
Oscar Bonilla 151 Universidad Galileo
Resumen
• Qué es análisis sintáctico?• Diferencia entre análisis léxico y análisis
sintáctico• Gramáticas libres de contexto• Arboles de Parseo• Derivaciones left-most y right-most• Top-down and bottom-up parsing• Gramáticas Ambiguas• Implementación de Parsers
![Page 152: Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones.](https://reader033.fdocuments.net/reader033/viewer/2022061617/5665b4641a28abb57c912219/html5/thumbnails/152.jpg)
Oscar Bonilla 152 Universidad Galileo
Grupos• Ya tienen que tener grupos
• Si no tienen grupo todavía, hagánlo!
• Los listados de grupos van a estar en el Web
• Si no están en un grupo en el Web hablen con Andreaq