Análisis Sintáctico Ascendente 4.5 en adelante
Por desplazamiento y reducción La entrada se “reduce” al símbolo inicial Desplazando elementos de la entrada Llegar de las hojas hacia la raíz
Procedimiento A partir de la entrada Se sustituye una subcadena Adecuadamente elegida Que concuerde con un lado derecho Por el no terminal del lado izquierdo Trazando una derivación inversa Por el lado derecho
Ejemplo Gramática S => aABe A => Abc | b B => d Entrada “abbcde” se reduce a S por: abbcde
Ejemplo Gramática S => aABe A => Abc | b B => d Entrada “abbcde” se reduce a S por: abbcde aAbcde
Ejemplo Gramática S => aABe A => Abc | b B => d Entrada “abbcde” se reduce a S por: abbcde aAbcde aAde ¿Por qué no aAAcde?
Ejemplo Gramática S => aABe A => Abc | b B => d Entrada “abbcde” se reduce a S por: abbcde aAbcde aAde aABe
Ejemplo Gramática S => aABe A => Abc | b B => d Entrada “abbcde” se reduce a S por: abbcde aAbcde aAde aABe S
Ejemplo Gramática S => aABe A => Abc | b B => d Entrada “abbcde” se reduce a S por: abbcde aAbcde aAde aABe S Mangos Mangos Mangos Mangos
Mangos Subcadena Concuerda con un lado derecho Se reduce al no terminal de la izquierda Avanza un paso en la derivación inversa De una derivación derecha Si la gramática no es ambigua Existe exactamente un mango
Volviendo al ejemplo Gramática S => aABe A => Abc | b B => d Es recursiva por la izquierda ¿Puede derivar abbcde?
Volviendo al ejemplo Gramática S => aABe A => Abc | b B => d Es recursiva por la izquierda ¿Puede derivar abbcde? Solo por la derecha
Ejercicio Analizar Ascendentemente While v<>0 do { y++; x++; Programa -> Instrucción | { Rutina } Rutina -> Instrucción ; Instrucción | Instrucción ; Rutina Instrucción -> nil | Variable ++ | Variable -- | While Prueba do Programa Prueba -> Variable <> 0 | Variable = 0 Analizar Ascendentemente While v<>0 do { y++; x++; v--; }
Gramáticas LR Gramáticas LR Variaciones: SLR, LALR, LR(k) Left to Right de izquierda a derecha Rightmost production La producción de más a la derecha Variaciones: SLR, LALR, LR(k)
Tercer proyecto Compilador de programas while Generando script de assembler para debug Tomando en cuenta los macros Fecha de entrega 21-10-2006