100 likes | 276 Views
Análisis Sintáctico Descendente. Sección 4.4. Análisis sintáctico por descenso recursivo. Consíderese la gramática S => cAd A => ab | a Entrada w = cad Revisar las dos posibilidades de A. Análisis sintáctico por descenso recursivo. Pero si fuera S => cAd A => aAb | a Entrada w = cad.
E N D
Análisis Sintáctico Descendente Sección 4.4
Análisis sintáctico por descenso recursivo • Consíderese la gramática S => cAd A => ab | a • Entrada w = cad • Revisar las dos posibilidades de A
Análisis sintáctico por descenso recursivo • Pero si fuera S => cAd A => aAb | a • Entrada w = cad
Análisis sintáctico predictivo • Conocer el no terminal a expandir • Dado el símbolo actual “a” (token) • A => α1 | α2 | ... | αn • Elegir αi anticipadamente
Análisis sintáctico predictivo • Ejemplo: Prop => ifExprthenPropElseProp | whileExprdoProp | beginlista_propsend • ¿Cómo elegir cuál usar?
Transformación • ¿Se puede usar predictivo en cualquier gramática? • Puede ser necesario hacer correcciones • Eliminar recursión izquierda • Factorizar por la izquierda • Agrupar todos los prefijos comunes • Prop => ifExprthenPropElseProp • | ifExprthenProp
Diagrama de transiciones • Con la gramática lista • Para cada no terminal: • Crear estado inicial y final • Para cada producción A => X1X2...Xn • Crear camino desde inicial hasta final • Aristas X1, X2, ..., Xn
Ejemplo • Copie la siguiente gramática: E => E+T | T T => T*F | F F => (E) | id • ¿Tiene recursión izquierda? • ¿Necesita factorización izquierda?
Gramática sin recursión E => TE’ E’ => +TE’ | nil T => FT’ T’ => *FT’ | nil F => (E) | id
Diagrama de transiciones T E ' 0 1 2 E: T + E’ 3 4 6 5 E’: nil