Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Anlisis sintctico
Gramticas libres de contexto
Javier Vlez Reyes jvelez@lsi.uned.es Departamento de Lenguajes Y Sistemas Informticos UNED
Objetivos
Conocer los lenguajes libres de contexto Conocer las responsabilidades del analizador sintctico Aprender a utilizar gramticas libres de contexto Aprender a disear gramticas libres de contexto Aprender a reconocer y resolver fuentes de ambigedad Aprender a eliminar la recursividad por la izquierda Aprender a factorizar por la izquierda
Conocer el uso y tipos de derivaciones y rboles sintcticos Conocer la representacin de lenguajes mediante diagramas de sintaxis Presentar los diferentes tipos de autmatas utilizados para construir analizadores sintcticos Discutir los diferentes tipos de analizadores sintcticos
ndice
Introduccin Gramticas libres de contexto Notacin BNF y EBNF Derivacin gramatical rboles sintcticos Limpieza gramatical Ambigedad gramatical Recursividad por la izquierda Factorizacin por la izquierda
Anlisis sintctico
La fase de anlisis sintctico tiene por objetivo solicitar tokens al analizador lxico y construir una representacin arborescente de todo el cdigo fuente. Este proceso se encuentra dirigido por el conocimiento gramatical que del lenguaje tiene el analizador sintctico ... Tema 3 <DO, PR> Cmo se especifica formalmente <), PD> un analizador sintctico? <b, ID> Formalismos <>, GT> <a, ID> Tratamiento de formalismos <(, PI> Conversin entre formalismos Foco de atencin <WHILE, PR>
El analizador sintctico va pidiendo nuevos tokens al analizador lxico para construir un rbol del programa fuente SWhile WHILE E E > DO E
Analizador sintctico
Temas 4 y 5
Cmo se implementa un analizador sintctico? S Estrategias anlisis sintctico Tipos de gramticas Tipos de analizadores
Ejemplo
El lenguaje Pascal tiene unas normas de carcter gramatical que definen su naturaleza y expresividad. Visto de manera extensiva, el lenguaje Pascal sera el conjunto infinito de todos los posibles cdigos fuente correctos escritos en sintaxis Pascal
Pascal
Uses crt; var cantidad,cont,numero,s:integer; uses begin crt; clrScr; var Uses crt; s:=0; contador:integer; var write('Cantidad:'); begin suma,numero,contador:integer; read(canditad); ClrScr; begin for cont:=1 to cantidad do 999 do for contador:=2 to clrScr; begin begin write('Numero: '); write('Numero ',cont,': '); contador:=contador+1; readln(numero); Read(numero); Write(contador,', '); suma:=0; s:=s+numero; contador>999 then if for contador:=1 to numero do end; begin contador:=999; begin write('Promedio:',s/cantidad:0:2); end; suma:=suma + contador; readKey; end; end; end;. ReadKey; write('Suma: ',suma); end. readKey;
end.
Ejemplo
L = Lenguaje de operadores Sea G = (T, N A, P) con T = {+, -, *, /, n} N = {E} P={ E ::= E + E E ::= E - E E ::= E * E E ::= E / E
A veces T se elide, N se deduce de los antecedentes de las reglas de P y se asume que el antecedente de la primera regla es S con lo G slo a travs de P
E ::= n }
Notacin
Notacin estndar Las reglas se escriben como A X. Cada regla se escribe en una linea distinta Notacin BNF Las reglas se escriben como A ::= X. Las reglas de un mismo antecedente se escriben como A ::= X | Y | Z Cada regla con antecendente distinto se escribe en una nueva lnea Notacin EBNF Se usa la notacin BNF. Las reglas recursivas se pueden esquematizar con los meta-caracteres { y } T ::= int | bool | char L ::= id , L | id Foco de atencin Cmo se escriben las reglas? D ::= T L EE+E EEE E id
Derivacin gramatical
Se plantea el siguiente problema de decisin: Dado un lenguaje descrito a travs de una gramtica G, L(G) determinar si la coleccin de terminales x pertenece o no al lenguaje al mismo. Esto es x L (G)? L = Lenguaje de operadores Sea G = (T, N A, P) con T = {+, -, *, /, n} Cadena de derivacin N = {E} P={ E ::= E + E E ::= E - E
(2) (3) (5)
2+3*5
axioma
asidero
EE+En+En+E*En+n*En+n*n
Paso de derivacin Forma de frase Frase }
Derivacin gramatical
Se plantea el siguiente problema de decisin: Dado un lenguaje descrito a travs de una gramtica G, L(G) determinar si la coleccin de terminales x pertenece o no al lenguaje al mismo. Esto es x L (G)? Frase Secuencia de terminales que pertenece al lenguaje definido por la gramtica. Si x L (G), x es frase de L Paso de Aplicacin de una regla de produccin derivacin que transforma una forma de frase ms general en otra ms especifica para x Cadena de Secuencia de pasos de derivacin que derivacin parten del axioma gramatical para intentar alcanzar la frase analizada x. Demostracin de x L (G) Asidero Parte izquierda de cualquier forma de frase de x L (G) formada nicamente por smbolos terminales
Forma de Secuencia de terminales y no frase terminales que representa una coleccin de frases del lenguaje. Existe una cadena de derivacin que llega hasta ella Axioma Forma de frase ms abstracta que representa a L (cualquier derivacin de Si x L (G) comienza por el axioma)
Derivacin gramatical
Se plantea el siguiente problema de decisin: Dado un lenguaje descrito a travs de una gramtica G, L(G) determinar si la coleccin de terminales x pertenece o no al lenguaje al mismo. Esto es x L (G)? Left Most Derivation En cada paso de derivacin se escoge el no terminal ms a la izquierda de la forma de frase a derivar En qu orden se aplican las reglas? Right Most Derivation En cada paso de derivacin se escoge el no terminal ms a la derecha de la forma de frase a derivar EE+E n+E n+E*E n+n*E n+n*n EE+E E+E*E E+E*n E+n*n n+n+n Javier Vlez Reyes jvelez@lsi.uned.es
R1
2+3*5
E E n
(2) frase
antecedente consecuente
+ E n
(3)
E * E
R3
R6
n
(5)
(2 + 3) * 5
(2 + 3) * 5
Ejercicios
L1. Declaracin de variables en Pascal L2. Declaracin de estructuras en C L3. Declaracin de procedimientos en Pascal L4. Declaracin de procedimientos en C L5. Declaracin de sentencias en C L6. Declaracin de sentencias en Pascal L7. Sentencia for en C L8. Sentencia Repeat Until en Pascal SentenciaIf ::= SentenciaWhile ::=
L5
Sentencia ::= BloqueSentencias | SentenciaIf | Sentencia While BloqueSentencias ::= { listaSentencias } listaSentencias ::= sentencia ; ListaSentencias |
Construya arboles de anlisis sintctico para frases en cada uno de los lenguajes anteriores
Limpieza gramatical
Para no tener problemas en la construccin de analizadores sintcticos es conveniente aplicar ciertas operaciones de trasformacin gramatical. Estos problemas son: Eliminacin de la ambigedad Es necesario eliminar las expresiones gramaticales que generen una interpretacin potencialmente gramatical ambigua Limpieza gramatical Eliminacin de la recursividad a izquierdas En algunos casos las reglas con recursividad a izquierdas de la forma A ::= A pueden acarrear problemas en la construccin de analizadores Factorizacin por la izquierda Las reglas con partes comunes a la izquierda de los consecuentes pueden tambin generar problemas, en funcin del analizador que se construya Javier Vlez Reyes jvelez@lsi.uned.es
Ambigedad gramatical
Una gramtica es inherentemente ambigua cuando es posible construir dos arboles de derivacin para al menos una frase del lenguaje Interpretacin 1
2+3*5
Interpretacin 2
E n
(2)
+ E n
(3)
E * E n
(5)
E E n
(2)
* E n
(3)
E n
(5)
Cul es el problema? Ambos rboles son sintcticamente correctos pero responden a interpretaciones semnticamente diferentes, una vlida y la otra no, con respecto a la semntica operacional matemtica
Se mantiene la gramtica ambigua pero se aaden criterios para indicar al compilador el rbol sintctico que debe construir en cada caso Correccin de la ambigedad gramatical Alteracin gramatical
Ambigedad no esencial Hay situaciones en las que la ambigedad no presenta problemas para construir analizadores sintcticos Javier Vlez Reyes jvelez@lsi.uned.es
Correccin explicita
2 + (3 * 5)
A#B&C
#>&
(A # B) & C
&>#
A # (B & C)
a derechas
A # (B # C)
a izquierdas
(A # B) #C
Precedencia de operadores Se ordena en una tabla los niveles de prioridad. Para cada nivel se define un nuevo no terminal. Cada nivel incrementa en 1 la distancia al axioma E ::= E + E E ::= E E E ::= E * E E ::= E / E E ::= ( E ) E ::= n
2+3*5 + * /
E + T E
( ) n
E T
T F
T / F | n
n (5)
n
(2)
n
(3)
2+3+5
E E + + T F n
(3)
2*3*5
E T F n (5) F n (2) T * F n (3) T * T F n (5)
E T
T F
T F n (2)
T / F | n
sentencia ::= sentenciaIf | otra sentenciaIf ::= IF ( exp ) sentencia | IF ( exp ) sentencia ELSE sentencia
IF ( exp ) sentencia SentNoEmparejada
sentencia ::= sentEmparejada | sentNoEmparejada sentEmparejada ::= IF ( exp ) sentEmparejada ELSE sentEmparejada | otra sentNoEmparejada ::= IF ( exp ) sentencia | IF ( exp ) sentEmparejada ELSE sentNoEmparejada
IF (
SentEmparejada
Recursividad directa
A ::= A |
Ejemplo
Gramtica de operadores no ambigua Gramtica de operadores LL (1)
E T
T F
T / F | n
Recursividad indirecta
A + A Numerar los no terminales A1, A2, An for i := 1 to n do for j := 1 to i 1 do Sustituir cada Ai ::= Aj por Ai ::= 1 | 2 | ... | k donde Aj ::= 1 | 2 | ... | k son todas las reglas actuales de Aj eliminar recursividad por la izquierda de Ai
Ejemplo
A ::= 1 | 2 | | n |
SentenciaIf ::= IF ( exp ) THEN sentencia | IF ( exp ) THEN sentencia ELSE sentencia
A ::= A | A ::= 1 | 2 | | n
+
T
T F
*
F
T/F | F F ::= ( E ) | n La equivalencia entre gramticas y diagramas de sintaxis resulta evidente Javier Vlez Reyes jvelez@lsi.uned.es
Cinta de entrada
x, y
A B
A B C
2
Mquina de estados
Cinta de entrada
x, y
Reconocimiento de lenguajes
Reconocimiento por estados finales Se reconoce una frase si tras una secuencia de movimientos se llega a un estado final de aceptacin. El estado final de la pila no importa Reconocimiento por vaciado de pila Se reconoce una frase si tras una secuencia de movimientos se llega a vaciar completamente la pila. El estado del autmata no importa
A B
Reconocimiento de lenguajes
A B C
2
Mquina de estados
Analizadores en backtracking
Analizadores sintcticos
Analizadores sintcticos descendentes Analizadores deterministas Son analizadores que imponen ciertas restricciones sobre la naturaleza de los lenguajes que soportan Se parte del axioma y se aplica una cadena de derivaciones para construir un rbol sintctico Analizadores sintcticos ascendentes Se parte de los terminales y se construye la inversa de una derivacin para intentar alcanzar el axioma Gramticas LR Gramticas LL
Material de estudio
Bibliografa bsica
Construccin de compiladores: principios y prctica Kenneth C. Louden International Thomson Editores, 2004 ISBN 970-686-299-4
Material de estudio
Bibliografa complementaria
Compiladores: Principios, tcnicas y herramientas. Segunda Edicin Aho, Lam, Sethi, Ullman Addison Wesley, Pearson Educacin, Mxico 2008
Diseo de compiladores. A. Garrido, J. Iesta, F. Moreno y J. Prez. 2002. Edita Universidad de Alicante