You are on page 1of 5

Lenguajes Compiladores e Interpretes

Jose Barboza Jimenez 201117197 30 de marzo de 2014


An alisis Sint actico Toma como entrada componentes l exicos resultados del an alisis l exico y comprueba si es posible formar la gram atica. Errores: Modo P anico: ignora componentes l exicos hasta encontrar punto seguro A nivel de Fase: trata de buscar completar una frase, se usa para dar sugerencias Producciones de error: para tratar de detectar errores Correcci on Global: el An alisis Sint actico busca errores trata de conseguir y hacer la menor cantidad de errores posibles Ambig uedad Dos arboles sint acticos Caso If-then-else: diferentes tipos de lenguaje manejan este caso de manera distinta, es posible controlarlo con llaves, o con ndices de inicio y nal de las condiciones Recursividad para la izquierda A-> AC|B es igual a A-> BA A-> CA| 1

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

Primero (A)={f, g, h, } Primero (B)= {g,} Primero (C)= {h, }

You might also like