Está en la página 1de 33

Procesadores de Lenguajes

Ingeniera Tcnica superior de Ingeniera Informtica


Departamento de Lenguajes y Sistemas informticos

Anlisis sintctico
Gramticas libres de contexto
Javier Vlez Reyes jvelez@lsi.uned.es Departamento de Lenguajes Y Sistemas Informticos UNED

Anlisis sintctico. Gramticas libres de contexto


Objetivos

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

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


ndice

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

Diagramas de sintaxis Autmatas a pila deterministas Bibliografa

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


Introduccin

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

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


Introduccin

Lenguajes libres de contexto


Desde una perspectiva sintctica un lenguaje es una coleccin de construcciones sintcticas bien formadas desde un alfabeto de entrada y correctamente combinadas entre s de acuerdo a una coleccin de reglas sintcticas

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.

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


Introduccin

Especificacin de lenguajes libres de contexto


Existen 3 diferentes maneras de definir formalmente un lenguaje de contexto libre. A lo largo de esta seccin estudiaremos cada una de ellas en detalle y veremos cmo se puede pasar de cada una a las otras 2

Gramticas libres de contexto

Elementos Gramticas libres de contexto Diagramas de sintaxis Autmatas a pila

Lenguajes libres de contexto


Diagramas de sintaxis Autmatas a pila

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


Gramticas libres de contexto

Especificacin mediante gramticas libres de contexto


De manera similar a como ocurre en los lenguajes regulares, los lenguajes libres de contexto se pueden expresar mediante el uso de gramticas libres de contexto. Su definicin es una extensin de las gramticas regulares con reglas de produccin potencialmente ms complejas

Definicin de gramtica libre de contexto


Una gramtica libre de contexto es un conjunto de 4 elementos G = (T, N, S, P) donde: T es un conjunto de smbolos terminales N es un conjunto de smbolos no terminales S N axioma gramatical P un conjunto de reglas de produccin de la forma 1. A ::= X 2. A ::= x 3. A :: = donde X es una secuencia de elementos en N U T donde x es una secuencia de elementos en T siendo la cadena vaca

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 }

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


Gramticas libres de contexto

Especificacin mediante gramticas libres de contexto


De manera similar a como ocurre en los lenguajes regulares, los lenguajes libres de contexto se pueden expresar mediante el uso de gramticas libres de contexto. Su definicin es una extensin de las gramticas regulares con reglas de produccin potencialmente ms complejas

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

D ::= T L T ::= int | bool | char L ::= { id , } id

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


Gramticas libres de contexto

Especificacin mediante gramticas libres de contexto


De manera similar a como ocurre en los lenguajes regulares, los lenguajes libres de contexto se pueden expresar mediante el uso de gramticas libres de contexto. Su definicin es una extensin de las gramticas regulares con reglas de produccin potencialmente ms complejas

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 }

E ::= E * E E ::= E / E E ::= n

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


Gramticas libres de contexto

Especificacin mediante gramticas libres de contexto


De manera similar a como ocurre en los lenguajes regulares, los lenguajes libres de contexto se pueden expresar mediante el uso de gramticas libres de contexto. Su definicin es una extensin de las gramticas regulares con reglas de produccin potencialmente ms complejas

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)

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


Gramticas libres de contexto

Especificacin mediante gramticas libres de contexto


De manera similar a como ocurre en los lenguajes regulares, los lenguajes libres de contexto se pueden expresar mediante el uso de gramticas libres de contexto. Su definicin es una extensin de las gramticas regulares con reglas de produccin potencialmente ms complejas

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

Anlisis sintctico. Gramticas libres de contexto


Gramticas libres de contexto

Especificacin mediante gramticas libres de contexto


De manera similar a como ocurre en los lenguajes regulares, los lenguajes libres de contexto se pueden expresar mediante el uso de gramticas libres de contexto. Su definicin es una extensin de las gramticas regulares con reglas de produccin potencialmente ms complejas

rboles de anlisis sintctico y arboles sintcticos abstractos


Frecuentemente no es preciso reflejar el orden de aplicacin de las derivaciones sino solamente el proceso de derivacin desde el axioma a la frase final. Para ello se interpreta cada regla como un rbol con raz en el antecedente e hijos los smbolos terminales y no terminales del consecuente de la regla L = Lenguaje de operadores Sea G = (T, N A, P) con T = {+, -, *, /, n} N = {E} P={ R1: E ::= E + E

R1

2+3*5

E E n
(2) frase

antecedente consecuente

+ E n
(3)

E * E

R2: E ::= E - E R3: E ::= E * E R4: E ::= E / E

R3

R6

R5: E ::= ( E ) R6: E ::= n } Javier Vlez Reyes jvelez@lsi.uned.es

n
(5)

Anlisis sintctico. Gramticas libres de contexto


Gramticas libres de contexto

Especificacin mediante gramticas libres de contexto


De manera similar a como ocurre en los lenguajes regulares, los lenguajes libres de contexto se pueden expresar mediante el uso de gramticas libres de contexto. Su definicin es una extensin de las gramticas regulares con reglas de produccin potencialmente ms complejas

rboles de anlisis sintctico y arboles sintcticos abstractos


Existen dos tipos de representaciones arborescentes que se utilizan frecuentemente para representar las derivaciones de una frase de un lenguaje. Arboles de anlisis sintctico Los hijos de cada regla son una representacin exacta de la coleccin de terminales y no terminales que aparecen en el consecuente de la misma Tipos de rboles sintcticos Arboles sintcticos abstractos Se hace una representacin abstracta de la gramtica de tal manera que en los hijos del rbol solo aparecen los smbolos semnticamente relevantes Javier Vlez Reyes jvelez@lsi.uned.es Foco de atencin de la asignatura

Anlisis sintctico. Gramticas libres de contexto


Gramticas libres de contexto

Especificacin mediante gramticas libres de contexto


De manera similar a como ocurre en los lenguajes regulares, los lenguajes libres de contexto se pueden expresar mediante el uso de gramticas libres de contexto. Su definicin es una extensin de las gramticas regulares con reglas de produccin potencialmente ms complejas

rboles de anlisis sintctico y arboles sintcticos abstractos


Arboles de anlisis sintctico
E E ( E n E + ) E n * E IF n E > E ( E ) THEN S ELSE S n SIf + n ID ID ID ID ID ID

Arboles sintcticos abstractos


* n > := := IF

If (a>b) then a:=b else b:=a


SWhile WHILE ( E E > ) E DO S

(2 + 3) * 5

If (a>b) then a:=b else b:=a


WHILE > ID ID ++ ID

(2 + 3) * 5

while (a>b) do a++

while (a>b) do a++ Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


Gramticas libres de contexto

Especificacin mediante gramticas libres de contexto


De manera similar a como ocurre en los lenguajes regulares, los lenguajes libres de contexto se pueden expresar mediante el uso de gramticas libres de contexto. Su definicin es una extensin de las gramticas regulares con reglas de produccin potencialmente ms complejas

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

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


Gramticas libres de contexto

Especificacin mediante gramticas libres de contexto


De manera similar a como ocurre en los lenguajes regulares, los lenguajes libres de contexto se pueden expresar mediante el uso de gramticas libres de contexto. Su definicin es una extensin de las gramticas regulares con reglas de produccin potencialmente ms complejas

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

Anlisis sintctico. Gramticas libres de contexto


Gramticas libres de contexto

Especificacin mediante gramticas libres de contexto


De manera similar a como ocurre en los lenguajes regulares, los lenguajes libres de contexto se pueden expresar mediante el uso de gramticas libres de contexto. Su definicin es una extensin de las gramticas regulares con reglas de produccin potencialmente ms complejas R1: E ::= E + E R2: E ::= E - E R3: E ::= E * E R4: E ::= E / E R5: E ::= ( E ) R6: E ::= n

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

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


Gramticas libres de contexto

Especificacin mediante gramticas libres de contexto


De manera similar a como ocurre en los lenguajes regulares, los lenguajes libres de contexto se pueden expresar mediante el uso de gramticas libres de contexto. Su definicin es una extensin de las gramticas regulares con reglas de produccin potencialmente ms complejas

Fuentes de ambigedad gramatical


Para demostrar que una gramtica es ambigua es suficiente con encontrar dos rboles de derivacin diferentes para una misma frase. Sin embargo no existe ninguna manera de demostrar que una gramtica no es ambigua. Existen criterios heursticos que identifican fuentes de potencial ambigedad Gramticas con ciclos S ::= A S ::= a A ::= S Caminos alternativos S := A S := B A := B Reglas recursivas con en casos base S S H R ::= ::= ::= ::= HRS s h| r|

Reglas con igual principio y fin E ::= EE

No terminales que derivan S ::= HR H ::= h| H ::= h|

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


Gramticas libres de contexto

Especificacin mediante gramticas libres de contexto


De manera similar a como ocurre en los lenguajes regulares, los lenguajes libres de contexto se pueden expresar mediante el uso de gramticas libres de contexto. Su definicin es una extensin de las gramticas regulares con reglas de produccin potencialmente ms complejas

Correccin de la ambigedad gramatical


La forma gramatical puede inducir una interpretacin semnticamente invalidada por ello es necesario introducir correcciones para evitar la ambigedad

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

Se modifica la gramtica para conseguir otra equivalente que no presente ambigedad.

Correccin explicita

La resolucin explicita hace escoger este rbol gramatical

Dos gramticas son equivalentes si reconocen el mismo lenguaje

Anlisis sintctico. Gramticas libres de contexto


Gramticas libres de contexto

Especificacin mediante gramticas libres de contexto


De manera similar a como ocurre en los lenguajes regulares, los lenguajes libres de contexto se pueden expresar mediante el uso de gramticas libres de contexto. Su definicin es una extensin de las gramticas regulares con reglas de produccin potencialmente ms complejas

Casos tpicos de ambigedad gramatical


Dado que resulta imposible de resulta imposible ofrecer un algoritmo para descubrir y remediar la ambigedad gramatical analizaremos casos arquetpicos de ambigedad que suelen aparecen en los lenguajes de programacin Gramtica de operadores La gramtica cannica de operadores es inherentemente ambigua ya que no se sabe el orden en que deben aplicarse los operadores Estudio de casos tpicos de ambigedad El problema del else ambiguo Cuando se anidan una sentencia if con otra ifelse es imposible saber a qu if emparejar el else.
(2 + 3) * 5 2+3*5

2 + (3 * 5)

If (a>b) if (c>d) c++; else d++;

If (a>b) { if (c>d) c++; else d++; }

If (a>b) { if (c>d) c++; } else d++;

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


Gramticas libres de contexto

Especificacin mediante gramticas libres de contexto


De manera similar a como ocurre en los lenguajes regulares, los lenguajes libres de contexto se pueden expresar mediante el uso de gramticas libres de contexto. Su definicin es una extensin de las gramticas regulares con reglas de produccin potencialmente ms complejas

Gramtica cannica de operadores sobre operadores {@, #, $, %}

E ::= E @ E E ::= E # E E ::= E & E E ::= E % E E ::= ( E ) E ::= n

Correccin de la ambigedad en gramticas de operadores


Las gramticas cannicas de operadores son inherentemente ambiguas. Para corregir este hecho es necesario inyectar informacin sobre la precedencia y la asociatividad de los operadores Precedencia de operadores La precedencia de operadores indica la prioridad de aplicacin de los operadores para combinar subexpresiones en una mayor Alteraciones gramaticales Asociatividad de operadores Cuando tres o mas subexpresiones se combinan a travs de un mismo operador tiene sentido definir la asociatividad del mismo
A#B#C

A#B&C

#>&
(A # B) & C

&>#
A # (B & C)

a derechas
A # (B # C)

a izquierdas
(A # B) #C

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


Gramticas libres de contexto

Especificacin mediante gramticas libres de contexto


De manera similar a como ocurre en los lenguajes regulares, los lenguajes libres de contexto se pueden expresar mediante el uso de gramticas libres de contexto. Su definicin es una extensin de las gramticas regulares con reglas de produccin potencialmente ms complejas

Correccin de la ambigedad en gramticas de operadores


Las gramticas cannicas de operadores son inherentemente ambiguas. Para corregir este hecho es necesario inyectar informacin sobre la precedencia y la asociatividad de los operadores
+ precedencia -

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

Gramtica de operadores no ambigua

E ::= E + T | T ::= T * F | F ::= ( E ) |

E T

T F

T / F | n

n (5)

n
(2)

n
(3)

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


Gramticas libres de contexto

Especificacin mediante gramticas libres de contexto


De manera similar a como ocurre en los lenguajes regulares, los lenguajes libres de contexto se pueden expresar mediante el uso de gramticas libres de contexto. Su definicin es una extensin de las gramticas regulares con reglas de produccin potencialmente ms complejas

Correccin de la ambigedad en gramticas de operadores


Las gramticas cannicas de operadores son inherentemente ambiguas. Para corregir este hecho es necesario inyectar informacin sobre la precedencia y la asociatividad de los operadores Asociatividad de operadores La recursividad a izquierdas marca asociatividad a izquierdas. La recursividad a derecha marca asociatividad a derechas
Gramtica de operadores no ambigua E

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 ::= E + T | T ::= F * T | F ::= ( E ) |

E T

T F

T F n (2)

T / F | n

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


Gramticas libres de contexto

Especificacin mediante gramticas libres de contexto


De manera similar a como ocurre en los lenguajes regulares, los lenguajes libres de contexto se pueden expresar mediante el uso de gramticas libres de contexto. Su definicin es una extensin de las gramticas regulares con reglas de produccin potencialmente ms complejas

El problema del else ambiguo


De las dos interpretaciones que presentbamos antes la correcta es la que asocia el else al if mas cercano (esta regla se llama regla de anidamiento ms cercano. Veamos cmo es la gramtica original y cmo debe transformarse
Sentencia

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

exp ) SentEmparejada ELSE SentEmparejada otra otra

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


Gramticas libres de contexto

Especificacin mediante gramticas libres de contexto


De manera similar a como ocurre en los lenguajes regulares, los lenguajes libres de contexto se pueden expresar mediante el uso de gramticas libres de contexto. Su definicin es una extensin de las gramticas regulares con reglas de produccin potencialmente ms complejas

Eliminacin de la recursividad por la izquierda


Las reglas con recursividad por la izquierda de la forma A ::= A | pueden presentar problemas a la hora de construir analizadores sintcticos por tanto es conveniente reformularlas equivalentemente

Recursividad directa
A ::= A |

Ejemplo
Gramtica de operadores no ambigua Gramtica de operadores LL (1)

E ::= E + T | T ::= T * F | A ::= A A ::= A | F ::= ( E ) |

E T

T F

E ::= TE E ::= + TE | TE T ::= FT T ::= * FT | / FT F ::= ( E ) | n | |

T / F | n

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


Gramticas libres de contexto

Especificacin mediante gramticas libres de contexto


De manera similar a como ocurre en los lenguajes regulares, los lenguajes libres de contexto se pueden expresar mediante el uso de gramticas libres de contexto. Su definicin es una extensin de las gramticas regulares con reglas de produccin potencialmente ms complejas

Eliminacin de la recursividad por la izquierda


Las reglas con recursividad por la izquierda de la forma A ::= A | pueden presentar problemas a la hora de construir analizadores sintcticos por tanto es conveniente reformularlas equivalentemente

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

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


Gramticas libres de contexto

Especificacin mediante gramticas libres de contexto


De manera similar a como ocurre en los lenguajes regulares, los lenguajes libres de contexto se pueden expresar mediante el uso de gramticas libres de contexto. Su definicin es una extensin de las gramticas regulares con reglas de produccin potencialmente ms complejas

Factorizacin por la izquierda


Las reglas con factores comunes por la izquierda en sus consecuentes de la forma A ::= 1 | 2 pueden generar problemas para construir analizadores sintcticos y conviene transformarlas

Ejemplo
A ::= 1 | 2 | | n |

SentenciaIf ::= IF ( exp ) THEN sentencia | IF ( exp ) THEN sentencia ELSE sentencia

A ::= A | A ::= 1 | 2 | | n

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


Diagramas de sintaxis

Especificacin mediante diagramas de sintaxis


Los diagramas de transicin son una forma grfica de representar las restricciones sintcticas de los lenguajes libres de contexto. Cada diagrama de sintaxis est etiquetada con el nombre de un no terminal al que representa y se compone de cajas y esferas que representan terminales y no terminales unidas por flechas que indican secuencias y selecciones . E T

+
T

E ::= E + T | E-T | T T ::= T * F |

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

Anlisis sintctico. Gramticas libres de contexto


Autmatas a pila deterministas

Especificacin mediante autmatas a pila deterministas


Los autmatas a pila son una extensin con memoria de los autmatas finitos deterministas que se utilizan para realizar analizadores sintcticos. Constan de una cinta de entra donde se leen los tokens del programa fuente, una pila de estados (la memoria) y una mquina de estados. Las transiciones de estados dependen ahora de la entrada y de la historia del proceso de anlisis almacenada en la pila

Definicin de autmata a pila determinista


Un autmata a pila es una tupla AP = (T, P, Q, A0, q0, f, F) donde T es un alfabeto de smbolos terminales de entrada P es un alfabeto de estados de la pila A0 P es el simbolo inicial en la pila q0 Q es un estado inicial o estado de arranque f: Q x T U { } x P Q x P una funcin de transicin
Pila de estados

Cinta de entrada

x, y

Q es un conjunto de estados finito no vaco

A B

A B C

2
Mquina de estados

F C Q es un subconjunto de estados finales de aceptacin

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


Autmatas a pila deterministas

Especificacin mediante autmatas a pila deterministas


Los autmatas a pila son una extensin con memoria de los autmatas finitos deterministas que se utilizan para realizar analizadores sintcticos. Constan de una cinta de entra donde se leen los tokens del programa fuente, una pila de estados (la memoria) y una mquina de estados. Las transiciones de estados dependen ahora de la entrada y de la historia del proceso de anlisis almacenada en la pila

Movimientos en un autmata a pila determinista


Un movimiento de un autmata a pila consiste en consumir un elemento de la entrada (x), la cima de la pila (A) y transitar desde el estado en curso (0) a un nuevo estado (1) apilando un nuevo estado en la cima de la pila
Pila 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

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas libres de contexto


Autmatas a pila deterministas

Especificacin mediante autmatas a pila deterministas


Los autmatas a pila son una extensin con memoria de los autmatas finitos deterministas que se utilizan para realizar analizadores sintcticos. Constan de una cinta de entra donde se leen los tokens del programa fuente, una pila de estados (la memoria) y una mquina de estados. Las transiciones de estados dependen ahora de la entrada y de la historia del proceso de anlisis almacenada en la pila

Clasificacin de analizadores sintcticos


Analizadores no deterministas Son analizadores generales que imponen pocas restricciones sobre la naturaleza sintctica del lenguaje. Suelen tener complejidad asinttica O (n3) Cualquier tipo de gramtica

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

Reconocimiento por vaciado de pila

Reconocimiento por estados finales

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas de contexto libre


Bibliografa

Material de estudio
Bibliografa bsica
Construccin de compiladores: principios y prctica Kenneth C. Louden International Thomson Editores, 2004 ISBN 970-686-299-4

Javier Vlez Reyes jvelez@lsi.uned.es

Anlisis sintctico. Gramticas de contexto libre


Bibliografa

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

Javier Vlez Reyes jvelez@lsi.uned.es

También podría gustarte