Beruflich Dokumente
Kultur Dokumente
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 Sintctico
Tabla de smbolos
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 }
E =>
r1 : r2 : r3 : r4 : r5 :
E => E + E =>
r1 : r2 : r3 : r4 : r5 :
E => E + E =>
n + E =>
r3
r1 : r2 : r3 : r4 : r5 :
E => E + E =>
n + E => n + E * E =>
r3 r5
r1 : r2 : r3 : r4 : r5 :
E => E + E =>
n + E => n + E * E =>
r3 r5
n + n * E =>
r5
r1 : r2 : r3 : r4 : r5 :
E => E + E =>
n + E => n + E * E =>
r3 r5
n + n * E => n + n * n
r5
r1 : r2 : r3 : r4 : 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 :
E => E + E =>
E + E * E => E + E * n =>
r5 r5 r5
r1 : r2 : r3 : r4 : r5 :
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
Ejemplo
Sea G con:
E + E
r1 : r2 : r3 : r4 : r5 :
id
id
id
Sea G con:
r1 : r2 : r3 : r4 : r5 :
id
id
id
Sea G con:
r1 : r2 : r3 : r4 : r5 :
id
id
id
id
id
Sea G con:
r1 : r2 : r3 : r4 : r5 :
id
id
id
id
id
Cuando existe mas de un rbol de anlisis sintctico, se dice que la gramtica es ambigua.
r1 : r2 : r3 : r4 : r5 :
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
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)