Anlisis Sintctico Descendente Seccin 4 4 Anlisis sintctico

  • Slides: 10
Download presentation
Análisis Sintáctico Descendente Sección 4. 4

Análisis Sintáctico Descendente Sección 4. 4

Análisis sintáctico por descenso recursivo Consíderese la gramática S => c. Ad A =>

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 =>

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

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

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

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

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 =>

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’

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

Diagrama de transiciones E: E’: T E' 0 1 T + 3 2 4 E’ 5 nil 6