You are on page 1of 26

Definicin de gramtica libre de contexto

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

Anlisis Sintctico
La fase de anlisis sintctico tiene por objetivo solicitar tokens al analizador lxico y construir una representacin de rbol de todo el cdigo fuente. Este proceso se encuentra dirigido por el conocimiento gramatical que del lenguaje tiene el analizador sintctico.

SiguienteToken() fuente

Analizador lxico Token

Analizador Sintctico

Tabla de smbolos

Derivaciones y rbol de anlisis sintctico


Derivaciones Las producciones gramaticales son reglas de reescritura Una derivacin es un proceso de reescritura Tipos Derivacin por la izquierda Derivacin por la derecha

Ejemplo
L = Lenguaje de operadores

Sea G = (T, N, E, P) con: T = {+, -, *, /, n} N = {E} P={ EE+E EE-E EE*E EE/E En }

Derivacin por la izquierda


En cada paso de derivacin se escoge el no terminal ms a la izquierda.
Ejemplo :
r1

E =>

r1 : r2 : r3 : r4 : r5 :

EE+E EEE EE*E EE/E En

Derivacin por la izquierda


En cada paso de derivacin se escoge el no terminal ms a la izquierda.
Ejemplo :
r1 r5

E => E + E =>

r1 : r2 : r3 : r4 : r5 :

EE+E EEE EE*E EE/E En

Derivacin por la izquierda


En cada paso de derivacin se escoge el no terminal ms a la izquierda.
Ejemplo :
r1 r5

E => E + E =>
n + E =>
r3

r1 : r2 : r3 : r4 : r5 :

EE+E EEE EE*E EE/E En

Derivacin por la izquierda


En cada paso de derivacin se escoge el no terminal ms a la izquierda.
Ejemplo :
r1 r5

E => E + E =>
n + E => n + E * E =>
r3 r5

r1 : r2 : r3 : r4 : r5 :

EE+E EEE EE*E EE/E En

Derivacin por la izquierda


En cada paso de derivacin se escoge el no terminal ms a la izquierda.
Ejemplo :
r1 r5

E => E + E =>
n + E => n + E * E =>
r3 r5

n + n * E =>

r5

r1 : r2 : r3 : r4 : r5 :

EE+E EEE EE*E EE/E En

Derivacin por la izquierda


En cada paso de derivacin se escoge el no terminal ms a la izquierda.
Ejemplo :
r1 r5

E => E + E =>
n + E => n + E * E =>
r3 r5

n + n * E => n + n * n

r5

r1 : r2 : r3 : r4 : r5 :

EE+E EEE EE*E EE/E En

Derivacin por la izquierda


En cada paso de derivacin se escoge el no terminal ms a la izquierda.
Ejemplo :
r1 r5

E => E + E =>
n + E => n + E * E =>
r3 r5

n + n * E => n + n * n
luego la derivacin es: r1r5r3r5r5

r5

r1 : r2 : r3 : r4 : r5 :

EE+E EEE EE*E EE/E En

Derivacin por la derecha


En cada paso de derivacin se escoge el no terminal ms a la derecha.
Ejemplo :
r1 r3

E => E + E =>
E + E * E => E + E * n =>
r5 r5 r5

r1 : r2 : r3 : r4 : r5 :

EE+E EEE EE*E EE/E En

E + n * n => n + n * n
luego la derivacin es: r1r3r35r5r5

Ejercicios
Sea G la gramtica con: r1 : r2 : r3 : r4 : r5 : EE+E EEE EE*E EE/E En

a) Obtener la derivacin por la derecha de: n + n + n b) Obtener la derivacin por la izquierda de: n + n + n c) Obtener la derivacin por la izquierda de: n + n / n - n

Ejercicios
Sea G la gramtica con: r1 : r2 : r3 : r4 : r5 : EE+E EE*E E (E) E-E E id

a) Obtener la derivacin por la izquierda de: - (id + id) b) Obtener la derivacin por la derecha de: - (id + id)

Ejercicios
Sea G la gramtica con: r1 : r2 : r3 : r4 : r5 : EE+E EE*E E (E) E-E E id

a) Obtener la derivacin por la izquierda de: - (id + id) b) Obtener la derivacin por la derecha de: - (id + id)

E => -E => -(E) => -(E + E) => -(id + E) => -(id + id) E => -E => -(E) => -(E + E) => -(E + id) => -(id + id)
r4 r3 r1 r5 r5

r4

r3

r1

r5

r5

rbol de anlisis sintctico


Representacin abstracta de una cadena Smbolos No terminales en nodos Axioma en nodo raz (smbolo inicial) Smbolos Terminales en hojas (nodos terminales)

Ejemplo

Sea G con:
E + E

r1 : r2 : r3 : r4 : r5 :

EE+E EEE EE*E EE/E En

id

id

id

La cadena E+E*E ser:

Problemas en los arboles de anlisis sintctico


Ejemplo
E

Sea G con:

r1 : r2 : r3 : r4 : r5 :

EE+E EEE EE*E EE/E En

id

La cadena E+E*E tendr:

id

id

Problemas en los arboles de anlisis sintctico


Ejemplo
E E E E id * E

Sea G con:

r1 : r2 : r3 : r4 : r5 :

EE+E EEE EE*E EE/E En

id

La cadena E+E*E tendr:

id

id

id

id

Problemas en los arboles de anlisis sintctico


Ejemplo
E E E E id * E

Sea G con:

r1 : r2 : r3 : r4 : r5 :

EE+E EEE EE*E EE/E En

id

La cadena E+E*E tendr:

id

id

id

id

Cuando existe mas de un rbol de anlisis sintctico, se dice que la gramtica es ambigua.

Problemas en los arboles de anlisis sintctico


Ejemplo Sea G con:
E

r1 : r2 : r3 : r4 : r5 :

EE+E EEE EE*E EE/E En


E

La cadena E+E*E tendr:

Cuando existe por lo menos una regla cuyo primer elemento de la derecha, es el mismo smbolo no terminal de la parte izquierda. Puede ser por derecha o izquierda

Eliminacin de la ambigedad
Para cada no terminal A, encuntrese el prefijo ms largo comn a dos o mas de sus alternativas. Si , es decir, existe un prefijo comn no trivial, sustityanse todas las producciones de A, A 12 n donde representa todas las alternativas que no comienzan con . Entonces reescribimos las reglas como: A A A 1 2 n

Eliminacin de la recursividad por la izquierda


Para cada regla recursiva por la izquierda de la forma: AA Tomar otra regla no recursiva de la forma: A Introducir un nuevo smbolo no terminal A y reescribir las reglas como: A A A A

Generalizando
Para cada regla recursiva por la izquierda de la forma: A A 1 A 2 Tomar otra regla no recursiva de la forma: A Introducir un nuevo smbolo no terminal A y reescribir las reglas como: A A A 1 A 1 A

Ejercicios
Sean las gramticas G con: a) r1 : S L, r2 : L L , id r3 : L id r1 : E E + E r2 : E E E r3 : E id r1 : r2 : r3 : r4 : r5 : EE+E EEE EE*E EE/E En

b)

c)

d)

EE+T|ET|T TF*T|F/T|F F ( E ) | id | n SentenciaIf IF ( exp ) THEN sentencia | IF ( exp ) THEN sentencia ELSE sentencia

e)

You might also like