Análisis sintáctico por descenso recursivo Consíderese la gramática S => c. Ad A => ab | a n Entrada w = cad n Revisar las dos posibilidades de A n
Análisis sintáctico por descenso recursivo Pero si fuera S => c. Ad A => a. Ab | a n Entrada w = cad n
Análisis sintáctico predictivo n Conocer el no terminal a expandir n n n Dado el símbolo actual “a” (token) A => α 1 | α 2 |. . . | αn Elegir αi anticipadamente
Análisis sintáctico predictivo Ejemplo: Prop => if Expr then Prop Else Prop | while Expr do Prop | begin lista_props end n ¿Cómo elegir cuál usar? n
Transformación n n ¿Se puede usar predictivo en cualquier gramática? Puede ser necesario hacer correcciones n n Eliminar recursión izquierda Factorizar por la izquierda n n n Agrupar todos los prefijos comunes Prop => if Expr then Prop Else Prop | if Expr then Prop
Diagrama de transiciones n n Con la gramática lista Para cada no terminal: n n Crear estado inicial y final Para cada producción A => X 1 X 2. . . Xn n n Crear camino desde inicial hasta final Aristas X 1, X 2, . . . , Xn
Ejemplo Copie la siguiente gramática: E => E + T | T T => T * F | F F => (E) | id n ¿Tiene recursión izquierda? n ¿Necesita factorización izquierda? n
Gramática sin recursión E => TE’ E’ => +TE’ | nil T => FT’ T’ => *FT’ | nil F => (E) | id
Diagrama de transiciones E: E’: T E' 0 1 T + 3 2 4 E’ 5 nil 6