Professional Documents
Culture Documents
Unidad II
Analizador Sintctico
Semana 8
Objetivo General
El alumno al finalizar el curso desarrollar
aplicaciones que le permitan determinar si
una sentencia corresponde a la estructura
gramatical
de
un
lenguaje
de
programacin.
As
mismo
estar
capacitado para proponer nuevas formas
estructurales en la definicin de lenguajes
de programacin.
Objetivo Especfico
Objetivo Instruccional
Analizar gramticas tipo LL(1) para
implementar analizadores descendentes
predictivos
Contenidos
Generalidades
Gramticas LL
ANALIZADOR SINTCTICO
Generalidades
Sentencias
Sentencia
Sentencias
Sentencia
Asignacin
Variable
x
:=
Expresin
Variable
b
Variable
c
Asignacin
Expresin
*
Variable
Expresin
Variable
d
:=
Expresin
Variable
e
ANALISIS SINTACTICO
Funcin:
Generalidades
Generalidades
TIPOS DE ANALIZADORES
SINTACTICOS
Descendentes (Top-Down): Parten del axioma y
aplican las reglas de la gramtica hasta llegar a
secuencia de smbolos terminales (tokens):
Analizadores LL(1)
Analizadores recursivos
Generalidades
ANALISIS SINTCTICO
DESCENDENTE
Se basa en gramticas LL, que
construyen
rboles
de
anlisis
sintctico de arriba (raz) hacia abajo
(hojas).
ANALISIS SINTCTICO
DESCENDENTE
Generalidades
Algoritmo:
Ejemplo:
Entrada: Id * Id + id
Gramtica: Expresion::= Expresion * Termino |
Expresion + Termino |
Termino
Termino ::= id | Numero
Derivacin: Expresion Expresion + Termino
Ambigedad
Factorizacin por la izquierda
Gramticas LL
A 1 | 2 | 3 | | n
CONJUNTO PRIMERO(1/3)
Sea G(N,T,P,S) una gramtica y secuencia arbitraria de smbolos, es
decir (NUT)*, entonces;
Gramticas LL
Primero() = { t / t T ^ t } , donde T = T U { }
CONJUNTO PRIMERO(2/3)
Gramticas LL
CONJUNTO PRIMERO(3/3)
Ejemplo:
Gramticas LL
Primero(E) =
Primero(E) =
Primero(T) =
Primero(T) =
Primero(F) =
{ ( , id }
{+,}
{ ( , id }
{*,}
{ ( , id }
CONJUNTO SIGUIENTE(1/2)
Sea G(N,T,P,S) una gramtica y secuencia arbitraria de
smbolos, es decir (NUT)*, entonces;
Gramticas LL
Siguiente(X) = { t / t T ^ S X t }
Para calcular Siguiente(A) para todos los no terminales A,
aplquense las reglas siguientes hasta que no se pueda aadir
nada mas a ningn conjunto siguiente:
1. Pngase $ en Siguiente(S) , donde S es el smbolo inicial y $ es
el delimitador derecho de la entrada.
Gramticas LL
CONJUNTO SIGUIENTE(2/2)
Ejemplo:
Considerando la gramtica anterior:
E TE
Se determin que:
E +TE |
Primero(E) = { ( , id }
T F T
Primero(E) = { + , }
T *F T |
Primero(T) = { ( , id }
F ( E ) | id
Primero(T) = { * , }
Primero(F) = { ( , id }
Entonces:
Siguiente(E) = { $ , ) }
Regla 1
Regla 2 aplicada a F ( E )
Siguiente(E) = { ) , $ }
Regla 3 aplicada a E T E
Siguiente(T) = { + , ) , $ }
Regla 2 aplicada a E TE
Regla 3 aplicada a E +TE
Siguiente(T) = { + , ) , $ }
Regla 3 aplicada a T F T
GRAMTICAS LL(1)
Gramticas LL
Gramticas LL
Ejemplo:
GRAMTICAS LL(1)
Gramticas LL
GRAMTICAS LL(1)
Solucin:
Primero(A) = { p }
Siguiente(A) = { $ }
Primero(X) = { d , b }
Siguiente(X) = { $ }
Primero(Y) = { , ; }
Siguiente(Y) = { e , $ }
Luego:
Por C1) Primero(d;X) Primero(bsYe) = { d } { b } =
Primero() Primero(;sY) = { } { ; } =
Por C2)
Primero(Y) Siguiente(Y) = { , ; } { } =
EN CONCLUSION:
Las gramticas LL(1) se usan preferentemente para el anlisis
sintctico descendente.
E
E
T
T
id
E T E
(
E T E
E
E
T
T
id
E T E
(
E T E
E +TE
E
E
T
T
id
E T E
E T E
E +TE
id
E T E
T F T
E T E
E +TE
E
T
T F T
id
E T E
E T E
E +TE
E
T
T F T
T F T
T *FT
id
E T E
E T E
E +TE
E
T
T F T
T F T
T *FT
id
E T E
E T E
E +TE
E
T
T F T
T F T
T *FT
F(E)
id
T F T
T F T
F id
E T E
E +TE
E T E
E
T
T *FT
F(E)
id
E T E
Error
Error
E T E
Error
Error
Error
E +TE
Error
Error
T F T
Error
Error
T F T
Error
Error
Error
T *FT
Error
F id
Error
Error
F(E)
Error
Error
$E
$ET
$ETF
$ETid
$ET
$E
$ET+
$ET
$ETF
$ETid
$ET
$ETF*
$ETF
$ETid
$ET
$E
$
ENTRADA
id + id * id $
id + id * id $
id + id * id $
id + id * id $
+ id * id $
+ id * id $
+ id * id $
id * id $
id * id $
id * id $
* id $
* id $
id $
id $
$
$
$
SALIDA
E TE
T FT
F id
T
E +TE
T FT
F id
T *FT
F id
T
E
Analizador Sintctico
Semana 8