Una gramtica libre de contexto est compuesta por los
siguientes elementos:
G = (N , T , P , S )
REPASO - GRAMATICA LIBRE DE CONTEXTO Las gramticas libres de contexto tienen una expresividad limitada y slo pueden expresar un conjunto limitado de lenguajes. ELEMENTO N
Conformado por el lenguaje no terminal el cual sirve como elementos auxiliares para la definicin de una gramtica. En general los elementos no terminales no forman parte del conjunto de sentencias que pretende validar una gramtica. ELEMENTOS DE LA GRAMATICA
ELEMENTO T Conformado por el lenguaje terminal que forman las sentencias que pretende validar una gramtica.
ELEMENTO P Conformado por el conjunto de reglas que define una gramtica. ELEMENTO S
Es el elemento principal que pertenece al lenguaje de no terminales a partir del cual se aplicaran las sucesivas reglas gramaticales para validar una sentencia. Tambin es conocido como axioma inicial. Un rbol de anlisis sintctico indica como a partir del axioma de la gramtica se deriva una frase (cadena) del lenguaje. P ! P ! 0 P ! 1 P ! 0p0 P ! 0p0
RBOLES DEL ANALIZADOR SINTACTICO GRAMATICA ARBOL Dada una gramtica independiente del contexto, un rbol de anlisis sintctico es un rbol tal que:
La raz esta etiquetada con el smbolo inicial. Cada hoja esta etiquetada con un componente lxico. Las hojas de izquierda a derecha forman la frase (el programa fuente).
RBOLES DEL ANALIZADOR SINTACTICO RAIZ HOJA FRASE Se toma como nodo padre del nuevo nivel el antecedente de la regla aplicada. Los nodos hijos son el conjunto de componentes del consecuente de la regla aplicada.
Para el nuevo generado nivel se verifica la existencia de componentes auxiliares, estos componentes auxiliares sern los nodos padres del siguiente nivel PASOS PARA LA FORMACION DEL ARBOL SINTACTICO.
Ejemplo:
Comisin = fijo + valor * 8;
Reglas gramaticales: 1.- S id Asig Expr fsent 2.- Expr id 3.- Expr id opmas Expr 4.- Expr id opmult Expr 5.- Expr num
Existen bsicamente dos formas de describir cmo en una cierta gramtica una cadena puede ser derivada desde el smbolo inicial. La forma ms simple es listar las cadenas de smbolos consecutivas, comenzando por el smbolo inicial y finalizando con la cadena y las reglas que han sido aplicadas. DERIVICIONES Una derivacin por la izquierda es aquella en la que se reemplaza el no terminal ms a la izquierda en cada paso de la derivacin.
Una derivacin por la izquierda corresponde a la numeracin preorden de los nodos internos de su rbol de anlisis gramatical asociado.
DERIVACION POR IZQUIERDA. Por ejemplo, si tomamos la siguiente gramtica: (1) S S + S (2) S 1 y la cadena "1 + 1 + 1", su derivacin a la izquierda est en la lista [(1) (1) (2) (2) (2)]. La estructura de la derivacin a la izquierda de la cadena "1 + 1 + 1" con la gramtica anterior sera: SS+S (1) SS+S+S (1) S1+S+S (2) S1+1+S (2) S1+1+1 (2)
Una derivacin por la derecha es aquella en la que se reemplaza el no terminal ms a la derecha en cada paso de la derivacin.
DERIVACION POR DERECHA
La lista de reglas aplicadas para la derivacin por la derecha de la cadena con la gramtica anterior sera la [(1) (2) (1) (2) (2)].
La derivacin por la derecha: S S + S (1) S S + 1 (2) S S + S + 1 (1) S S + 1 + 1 (2) S 1 + 1 + 1 (2)
Una gramtica es ambigua cuando para una determinada sentencia produce ms de un rbol de derivacin.
La gramtica siguiente es ambigua:
E| id | nm| E + E | E * E | ( E ) | - E
Supongamos la sentencia id + id * id
GRAMATICAS AMBIGUAS
Entrada: num + num * num E E
E * E E + E
E + E num num E * E
num num num num
El significado semntico es diferente. No existe una nica traduccin posible. Se genera cdigo diferente.
No existe un algoritmo que determine con certeza en un plazo finito de tiempo si una gramtica es ambigua o no. A lo sumo que se ha llegado en el estudio de la ambigedad es que hay algunas condiciones que de cumplirse determinan la ambigedad, pero en el caso de no cumplirse no se puede decir que la gramtica es no ambigua.
Necesidad de evitar las gramticas ambiguas. Cmo ?.
Transformando la gramtica o estableciendo precedencias entre operadores y de asociatividad. Se puede eliminar la ambigedad transformando la gramtica agrupando todos los operadores de igual precedencia en grupos y asociando a cada uno una regla, de forma que los que tengan menor precedencia aparezca ms cercana al smbolo de inicio, precedencia en cascada. Esto conlleva el aumento de la complejidad de la gramtica y con ello en la del rbol sintctico. La gramtica deja de ser intuitiva. 1.- decl ID : tipo ; 2.- decl ID , decl 3.- tipo INT 4.- tipo REAL 5.- tipo RECORD listaDecl END RECORD 6.- listaDecl decl 7.- listaDecl listaDecl dec 8.- s listaDecl
Construir el rbol sintctico para reconocer la siguiente sentencia: ID , ID , ID : RECORD ID : INT ; ID , ID : REAL ; END RECORD ;
1.-DADA LA SIGUIENTE GRAMATICA 1.- expr ID ASIG NUM 2.- expr NUM 3.- expr ID 4.- cond expr >= expr 5.- cond expr <= expr 6.- cond expr = expr 7.- s FOR ( listaExpr ; cond ; listaExpr ) 8.- listaExpr expr 9.- listaExpr listaExpr , expr
Determinar el rbol sintctico para reconocer la sentencia: FOR ( ID ASIG NUM , NUM ; NUM >= ID ; ID , ID )
2.-DADA LA SIGUIENTE GRAMATICA 1.- S ID ASIG expr FINSENT 2.- expr ID 3.- expr num 4.- expr expr ope expr 5.- num ENTERO 6.- num REAL 7.- ope OPMAS 8.- ope OPMENOS 9.- ope OPMULT
Construir el rbol sintctico para reconocer la siguiente sentencia: A = B + 5 * D 10 + F