Professional Documents
Culture Documents
Sea la gram atica: A-> ABc|a B-> ab|abc Se elimina la recursividad por la izquierda: A0 -> aA A-> BcA| B-> ab|abc Factorizaci on: A-> BC|BD es igual a A-> BA A-> C|D Cond-> if(exp) then Sent | if(exp) then Sent else Sent Es factirizable como: Cond-> if(exp) then Sent Cond Cond-> (else Sent) | Analisis Sintactico descendente recursive Tipos(por recorrido): Izquierda-Derecha Derecha-Izquierda Descendente (de la producci on inicial a los terminales) Ascendente (de las terminales a la producci on inicial) Derivacion: Sucede cuando se hace una sustituci on de un No Terminal. Ejemplo 1: A-> aBc B->3 a3c A0 ->aBc (1er derivacion) B->3 (2da derivacion) a3c
Ejemplo 2: A-> aBc B->3|5 a5c A->aBc B->3 B->5 Este ejemplo tiene 3 derivaciones y esta basado en un algoritmo descendente recursivo con retorno. Reglas del Analisis Ascendente Codigos: Dj -> Desplaza y mete en pila Rj -> reduce por la producci on j Acepta Error Gramatica: a: <C> -> <B><A> end b: <A> -> begin <C> c: <C> -> codigo d: <B> -> tipo e: <B> -> id <B>
Figura 1: Tabla 1
Analisis Sintactico Productivo Analisis Sintactico Descendente Recursivo Conjunto de procedimientos recursivos. Cada no terminal de la gramatica tiene asociado un procedimiento. cada simbolo de preanalisis determina, sin ambiguedad, el procedimiento seleccionado para cada no terminal. Procedimiento adicional parea Tipo -> Simple | Simple | array[Simple] of tipo Simple -> integer | char | procedimientoParea(t) {if (Preanalisis ==t) Preanalisis = SiguienteComponenteLexico(), else error} num to num
procedimientoTipo( ) {(simple( ))? return exito (parea(),simple( ))? return exito (parea(array), parea([), simple(), parea(]), parea(of), simple())? return exito} procedimientoSimple( ) {(parea(integer))? return exito (parea(char))? return exito (parea(num), parea(to), parea(num))? return exito } Primero: Es el conjunto de componentes l exicos terminales que pueden estar al inicio de una sustituci on del procedimiento. Primero (Tipo) = integer, char, num, 1, array Primero (Simple) = integer, char, num Suponga A0 -> ABC | f | B-> g | C-> h | 4