intr oducción al análisis sintáctico

152
Compiladores Introducción al Análisis Sintáctico Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones

Upload: piera

Post on 07-Jan-2016

66 views

Category:

Documents


3 download

DESCRIPTION

Intr oducción al Análisis Sintáctico. Gramáticas de Contexto Libre , Arboles de Parseo y Derivaciones. Resumen. Overview del análisis léxico Qué es análisis sintáctico Gramáticas libres de contexto D erivaciones y árboles de parseo Top-down vs. Bottom-up Parsing Grámaticas Ambiguas - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Intr oducción al Análisis Sintáctico

CompiladoresIntroducción al Análisis Sintáctico

Gramáticas de Contexto Libre, Arboles de Parseo y Derivaciones

Page 2: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

Oscar Bonilla 16 Universidad Galileo

Problema de los paréntesis balanceados

• Podemos definir esto usando una expresión regular?

Page 17: Intr oducción al Análisis Sintáctico

Oscar Bonilla 17 Universidad Galileo

Problema de los paréntesis balanceados

• Podemos definir esto usando una expresión regular?

NO!

Page 18: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

Oscar Bonilla 22 Universidad Galileo

Ejemplo de una CFG

<S> ( <S> ) <S> | ε

Page 23: Intr oducción al Análisis Sintáctico

Oscar Bonilla 23 Universidad Galileo

Ejemplo de una CFG

<S> ( <S> ) <S>

<S> ε

Page 24: Intr oducción al Análisis Sintáctico

Oscar Bonilla 24 Universidad Galileo

Ejemplo de una CFG

<S> ( <S> ) <S>

<S> ε Terminales

Page 25: Intr oducción al Análisis Sintáctico

Oscar Bonilla 25 Universidad Galileo

Ejemplo de una CFG

<S> ( <S> ) <S>

<S> ε No-terminales

Page 26: Intr oducción al Análisis Sintáctico

Oscar Bonilla 26 Universidad Galileo

Ejemplo de una CFG

<S> ( <S> ) <S>

<S> ε Símbolo de Inicio: <S>

Page 27: Intr oducción al Análisis Sintáctico

Oscar Bonilla 27 Universidad Galileo

Ejemplo de una CFG

<S> ( <S> ) <S>

<S> ε Producciones

Page 28: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

Oscar Bonilla 33 Universidad Galileo

Ejemplo: Una CFG para expresiones

<expr> <expr> <op> <expr>

<expr> ( <expr> )

<expr> - <expr>

<expr> num

<op> +

<op> *

Page 34: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

Oscar Bonilla 40 Universidad Galileo

Ejemplo: Una CFG para expresiones

<expr> <expr> <op> <expr>

<expr> ( <expr> )

<expr> - <expr>

<expr> num

<op> +

<op> *

Page 41: Intr oducción al Análisis Sintáctico

Oscar Bonilla 41 Universidad Galileo

Ejemplo: Una CFG para expresiones

<expr> <expr> <op> <expr> | ( <expr> )

| - <expr> | num

<op> + | *

Page 42: Intr oducción al Análisis Sintáctico

Oscar Bonilla 42 Universidad Galileo

Pregunta: Cuál es el lenguaje definido por esta CFG?

<S> a<S>a | aa

Page 43: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

Oscar Bonilla 46 Universidad Galileo

Ejemplo de Derivación

<expr>

num ‘*’ ‘(‘ num ‘+’ num ‘)’

Page 47: Intr oducción al Análisis Sintáctico

Oscar Bonilla 47 Universidad Galileo

Ejemplo de Derivación

<expr>

num ‘*’ ‘(‘ num ‘+’ num ‘)’

Page 48: Intr oducción al Análisis Sintáctico

Oscar Bonilla 48 Universidad Galileo

Ejemplo de Derivación

<expr>

num ‘*’ ‘(‘ num ‘+’ num ‘)’

<expr> <expr><op><expr>

Page 49: Intr oducción al Análisis Sintáctico

Oscar Bonilla 49 Universidad Galileo

Ejemplo de Derivación

<expr> <expr> <op> <expr>

num ‘*’ ‘(‘ num ‘+’ num ‘)’

<expr> <expr><op><expr>

Page 50: Intr oducción al Análisis Sintáctico

Oscar Bonilla 50 Universidad Galileo

Ejemplo de Derivación

<expr> <expr> <op> <expr>

num ‘*’ ‘(‘ num ‘+’ num ‘)’

Page 51: Intr oducción al Análisis Sintáctico

Oscar Bonilla 51 Universidad Galileo

Ejemplo de Derivación

<expr> <expr> <op> <expr>

num ‘*’ ‘(‘ num ‘+’ num ‘)’

Page 52: Intr oducción al Análisis Sintáctico

Oscar Bonilla 52 Universidad Galileo

Ejemplo de Derivación

<expr> <expr> <op> <expr>

num ‘*’ ‘(‘ num ‘+’ num ‘)’

<expr> num

Page 53: Intr oducción al Análisis Sintáctico

Oscar Bonilla 53 Universidad Galileo

Ejemplo de Derivación

<expr> <expr> <op> <expr> num <op> <expr>

num ‘*’ ‘(‘ num ‘+’ num ‘)’

<expr> num

Page 54: Intr oducción al Análisis Sintáctico

Oscar Bonilla 54 Universidad Galileo

Ejemplo de Derivación

<expr> <expr> <op> <expr> num <op> <expr>

num ‘*’ ‘(‘ num ‘+’ num ‘)’

Page 55: Intr oducción al Análisis Sintáctico

Oscar Bonilla 55 Universidad Galileo

Ejemplo de Derivación

<expr> <expr> <op> <expr> num <op> <expr>

num ‘*’ ‘(‘ num ‘+’ num ‘)’

Page 56: Intr oducción al Análisis Sintáctico

Oscar Bonilla 56 Universidad Galileo

Ejemplo de Derivación

<expr> <expr> <op> <expr> num <op> <expr>

num ‘*’ ‘(‘ num ‘+’ num ‘)’

<op> *

Page 57: Intr oducción al Análisis Sintáctico

Oscar Bonilla 57 Universidad Galileo

Ejemplo de Derivación

<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr>

num ‘*’ ‘(‘ num ‘+’ num ‘)’

<op> *

Page 58: Intr oducción al Análisis Sintáctico

Oscar Bonilla 58 Universidad Galileo

Ejemplo de Derivación

<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr>

num ‘*’ ‘(‘ num ‘+’ num ‘)’

Page 59: Intr oducción al Análisis Sintáctico

Oscar Bonilla 59 Universidad Galileo

Ejemplo de Derivación

<expr> <expr> <op> <expr> num <op> <expr> num ‘*’ <expr>

num ‘*’ ‘(‘ num ‘+’ num ‘)’

Page 60: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

Oscar Bonilla 80 Universidad Galileo

Ejemplo de Arbol de Parseo

<expr>

Page 81: Intr oducción al Análisis Sintáctico

Oscar Bonilla 81 Universidad Galileo

Ejemplo de Arbol de Parseo

<expr> <expr> <op> <expr>

<expr>

<expr><expr> <op>

Page 82: Intr oducción al Análisis Sintáctico

Oscar Bonilla 82 Universidad Galileo

Ejemplo de Arbol de Parseo

<expr> num

num

<expr>

<expr><expr> <op>

Page 83: Intr oducción al Análisis Sintáctico

Oscar Bonilla 83 Universidad Galileo

Ejemplo de Arbol de Parseo

<op> ‘*’

*num

<expr>

<expr><expr> <op>

Page 84: Intr oducción al Análisis Sintáctico

Oscar Bonilla 84 Universidad Galileo

Ejemplo de Arbol de Parseo

<expr> ‘(‘ <expr> ‘)’

( )*num

<expr>

<expr><expr>

<expr>

<op>

Page 85: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

Oscar Bonilla 86 Universidad Galileo

Ejemplo de Arbol de Parseo

<expr> num

num

( )*num

<expr>

<expr><expr>

<expr>

<expr>

<expr>

<op>

<op>

Page 87: Intr oducción al Análisis Sintáctico

Oscar Bonilla 87 Universidad Galileo

Ejemplo de Arbol de Parseo

<op> ‘+’

num +

( )*num

<expr>

<expr><expr>

<expr>

<expr>

<expr>

<op>

<op>

Page 88: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

Oscar Bonilla 92 Universidad Galileo

Ejemplo de Right-Derivation

<expr>

Producción: String: <expr>

Page 93: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

Oscar Bonilla 94 Universidad Galileo

Ejemplo de Right-Derivation

( )

<expr>

<expr><expr>

<expr>

<op>

Producción: <expr> ‘(‘ <expr> ‘)’

String: <expr> <op> ‘(‘ <expr> ‘)’

Page 95: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

Oscar Bonilla 110 Universidad Galileo

Otro Ejemplo

• Entrada:124 + 23.5 * 86

• Token Stream: num ‘+’ num ‘*’ num

Page 111: Intr oducción al Análisis Sintáctico

Oscar Bonilla 111 Universidad Galileo

Otro Ejemplo

<expr>

Producción:String: <expr>

Page 112: Intr oducción al Análisis Sintáctico

Oscar Bonilla 112 Universidad Galileo

Otro Ejemplo

<expr>

<expr><expr> <op>

Producción: <expr> <expr> <op> <expr>String: <expr> <op> <expr>

Page 113: Intr oducción al Análisis Sintáctico

Oscar Bonilla 113 Universidad Galileo

Otro Ejemplo

num

<expr>

<expr><expr> <op>

Producción: <expr> <num>String: num <op> <expr>

Page 114: Intr oducción al Análisis Sintáctico

Oscar Bonilla 114 Universidad Galileo

Otro Ejemplo

+num

<expr>

<expr><expr> <op>

Producción: <op> ‘+’String: num ‘+’ <expr>

Page 115: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

Oscar Bonilla 119 Universidad Galileo

Otro Ejemplo

String: num ‘+’ num ‘*’ num

num num

+num

<expr>

<expr><expr>

<expr> <expr>

<op>

*

<op>

Page 120: Intr oducción al Análisis Sintáctico

Oscar Bonilla 120 Universidad Galileo

Otro Ejemplo

String: num ‘+’ num ‘*’ num

• Hay otro orden de derivación?

Page 121: Intr oducción al Análisis Sintáctico

Oscar Bonilla 121 Universidad Galileo

Otro Ejemplo

<expr>

String: <expr>

Page 122: Intr oducción al Análisis Sintáctico

Oscar Bonilla 122 Universidad Galileo

Otro Ejemplo

<expr>

<expr> <expr><op>

Producción: <expr> <expr> <op> <expr> String: <expr> <op> <expr>

Page 123: Intr oducción al Análisis Sintáctico

Oscar Bonilla 123 Universidad Galileo

Otro Ejemplo

num

<expr>

<expr><expr> <op>

Producción: <expr> <num>String: num <op> <expr>

Page 124: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

Oscar Bonilla 132 Universidad Galileo

Otro Ejemplo

num num

* num

<expr>

<expr> <expr>

<expr> <expr>

<op>

String: num ‘+’ num ‘*’ num

+

<op>

Page 133: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

Oscar Bonilla 135 Universidad Galileo

La Gramática Ambigua

<expr> <expr> <op> <expr>

<expr> ( <expr> )

<expr> - <expr>

<expr> num

<op> +

<op> *

Page 136: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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: Intr oducción al Análisis Sintáctico

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