Documente Academic
Documente Profesional
Documente Cultură
1) Introduccin
2) Gramticas. Definiciones y clasificacin
3) GLC. Notaciones
4) GLC. rboles de anlisis sintctico
5) GLC. Derivacin a dcha. y a izda.
6) GLC. Ambigedad y transformacin de gramticas
-J.Ezpeleta-
Introduccin
tabla de smbolos
programa fuente
analizador lxico
(scanner)
tokens
analizador sintctico
(parser)
estructura sintctica
analizador semntico
optimizador
generador cdigo
intermedio
cdigo intermedio
generador cdigo
objeto
cdigo objeto
-J.Ezpeleta-
Introduccin
El analizador sintctico:
Objetivo: agrupar los tokens suministrados por el scanner para reconocer
frases
determinar si es sintcticamente correcto
establecer la estructura subyacente
La sintaxis se suele especificar formalmente mediante una GLC
El parser recibe tokens y los agrupa de acuerdo a
producciones
producciones
especificadas por la GLC
El parser detecta errores sintcticos
-J.Ezpeleta-
Introduccin
instAS
ID
OPAS
exp
CTE
x := 27
(CTE,27),(OPAS,)(ID,x)
{e.r.}
AL
OK
AS
-J.Ezpeleta-
Gramticas. Definiciones
El estudio de gramticas es anterior al de lenguajes de
programacin
Empez con el estudio del lenguaje natural
-J.Ezpeleta-
Gramticas. Definiciones
El smbolo inicial es el nico no terminal que se utiliza para
generar todos los strings del lenguaje
de
de smbolos
smbolos
gramaticales
gramaticales
-J.Ezpeleta-
Gramticas. Definiciones
A deriva
directamente en la
gramtica G
derivacin directa
A P.
Entonces
0 deriva n en cero o ms
derivacin
pasos en la gramtica G
, n>=0
A C b
* a a b?
b A b S
b a b c
a
Gramticas. Definiciones
Algunas definiciones:
forma de frase
-J.Ezpeleta-
Gramticas. Definiciones
Es fcil ver que:
los siguiente elementos pertenecen al lenguaje generado por la gramtica:
el perro
la lejos perro est
.....
Por desgracia, no siempre ser tan sencillo
-J.Ezpeleta-
Gramticas. Definiciones
Ejercicio 1: Sea G=(N,T,S,P) con
N={S}
T={a,b}
P={SaSb,Sab}
S=S
L(G)={anbn|n>=1}
-J.Ezpeleta-
S [ S
S S1
S1 [ a ]
10
Gramticas. Definiciones
Hemos visto cmo la aplicacin de producciones genera las frases
del lenguaje
Para compiladores, el proceso es en sentido contrario:
dado un string:
Pertenece al lenguaje?
Cules son las producciones aplicadas para derivarlo del smbolo
inicial?
-J.Ezpeleta-
(parser)
11
Gramticas. Definiciones
Ejercicio 3: Sea
G=(N,T,S,P) con
N = {programa,
bloque,insts,
inst,opas,
ident,const,
punto}
T=
{PROGRAM,BEGIN,
END,=,A,B,1,0,.}
S = programa
P=
programa PROGRAM ident punto bloque
bloque BEGIN insts END punto
insts insts punto inst
insts inst
inst ident opas const
opas =
ident A
PROGRAM
PROGRAM
PROGRAM A.
A.
PROGRAM A.
A.
ident B
BEGIN
BEGIN
BEGIN
BEGIN
const 1
B=1.
B=1.
B=1.
B=1.
const 0
A=0
A=0.
A=0
A=0.
punto .
END.
END.
END.
END.
Sintcticamente correctos?
Compiladores I. C.P.S. Universidad de Zaragoza
-J.Ezpeleta-
12
Gramticas. Clasificacin
Una produccin general tiene la forma
Imponiendo restricciones a las posibles formas de las
producciones, se obtienen distintos tipos de gramticas
restricciones respecto a qu pueden ser y
restricciones de dnde se puede aplicar la transformacin establecida por
la produccin
-J.Ezpeleta-
13
Gramticas. Clasificacin
Clasificacin de Chomsky
gramticas de Tipo 0
gramticas de Tipo 1
libres
dependientes del
contexto
,, (N T)*
no vaco y A un no terminal
A se transforma en slo cuando va precedido por y seguido por
La produccin ya no se aplica siempre, sino slo en determinados
contextos
Muchos lenguajes de prog. tienen aspectos que requieren una
gramtica de este tipo
-J.Ezpeleta-
14
Gramticas. Clasificacin
gramticas de Tipo 2
libres de contexto
A es un (nico) no terminal
Cada vez que aparece A, se puede sustituir por
Se corresponde con la notacin BNF
Pascal (en la mayora de sus aspectos) es una gramtica de tipo 2
ww
gramticas de Tipo 3
A ,B son no terminales
w es una secuencia de terminales
poco potentes para lenguajes
fundamentales para comp. lxicos
expresiones regulares
Compiladores I. C.P.S. Universidad de Zaragoza
-J.Ezpeleta-
wB
wB
regulares
15
Gramticas. Clasificacin
En forma de diagrama:
tipo 3
tipo 2
tipo 1
tipo 0
-J.Ezpeleta-
16
GLC. Notacin
Por claridad, para GLC usaremos los siguiente convenios:
consideraremos terminales:
primeras minsculas del abecedario
smbolos de operacin y puntuacin
dgitos
palabras en negrita: perro,begin
consideraremos NO terminales:
primeras maysculas del abecedario
palabras en cursiva: sujeto,expresin
la S, suele representar el smbolo inicial
...,X,Y,Z: representan smbolos gramaticales (terminal, No terminal)
letras minsculas de en medio (u,v,..) representan cadenas de
terminales
Compiladores I. C.P.S. Universidad de Zaragoza
-J.Ezpeleta-
17
GLC. Notacin
letras griegas minsculas representan formas de frase (strings de
smbolos gramaticales)
As, en una GLC, una produccin se escribe siempre como
parte
izquierda
parte
derecha
11
22
....
....
n
11|| 22|...|
|...| nn
-J.Ezpeleta-
18
Caractersticas:
el nodo raz se etiqueta con el smbolo inicial
cada nodo no hoja se etiqueta con un no terminal
los hijos de un nodo son los smbolos (de izda. a dcha.) que aparecen en
una de las producciones que tienen dicho nodo como parte izda.
cuando se ha derivado una frase, las hojas del rbol son terminales
-J.Ezpeleta-
19
E E + E|E * E|(E)|-E|id
w
id+id*id
E
mi
E + E
mi
E + E
decisin
....
decisin
id + E
-J.Ezpeleta-
20
dos posibilidades
de decisin
-J.Ezpeleta-
21
izda
mi
mi
E + E
E * E
id + E
E + E * E
id + E * E
id + E * E
id + id * E
id + id * E
id + id * id
id + id * id
mi
mi
mi
mi
izda
-J.Ezpeleta-
mi
mi
mi
mi
22
GLC. Ambigedad
Una gramtica es ambigua si existe al menos una frase ambgua
Una frase es ambgua si existe ms de un rbol para ella (mi md)
produce indeterminismo
es importante eliminarla, cuando se pueda
T T * F | F
F (E)|-E |id
-J.Ezpeleta-
23
GLC. Ambigedad
Ejemplo: Considerar la instruccin if en Pascal
Si la gramtica es de la forma
inst if exp then inst
| if exp then inst else inst
| otras instrucciones
if exp1 then if exp2 then inst2 else inst3
11
if
if exp1
exp1 then
then
if
exp2
if exp2 then
then
inst2
inst2
else
else
inst3
inst3
Compiladores I. C.P.S. Universidad de Zaragoza
22
if
if exp1
exp1 then
then
if
if exp2
exp2 then
then
inst2
inst2
else
else
inst3
inst3
-J.Ezpeleta-
24
GLC. Ambigedad
Con cul nos quedamos?
Generalmente, se aplica la misma regla que aplica Pascal:
cada else se empareja con el then ms prximo
es decir, la buena versin es la 1
-J.Ezpeleta-
25
GLC. Ambigedad
-J.Ezpeleta-
26
GLC. Ambigedad
Ejercicio: Convencerse de que genera el mismo lenguaje que la
anterior y se ha eliminado la ambigedad
Es posible saber si una gramtica dada es ambigua?
NO !! (Hopcroft y Ullman)
-J.Ezpeleta-
27
Verifica que:
S
A
B
C
A | B
a
B b
c
-J.Ezpeleta-
28
S * X * w
para algn , y tal que wT*
Proceso:
1) eliminar los no terminales que no deriven ninguna frase
2) eliminar los no terminales que no sean alcanzables desde S
-J.Ezpeleta-
29
Algoritmo
Algoritmo eliminaNoTerminables
eliminaNoTerminables
(E
(E G:GLC;
G:GLC; S:
S: G:GLC)
G:GLC)
--Pre:
--Pre: G=(N,T,P,S)
G=(N,T,P,S) t.q.
t.q. L(G)<>
L(G)<>
--Post:
--Post: G=(N,T,P,S)
G=(N,T,P,S) G
G GG
*
-X
-XN.
N.wwTT*..X
X
* ww
*
Vars
Vars viejo,nuevo:
viejo,nuevo: conj.
conj. de
de no
no terminales
terminales
Principio
Principio
viejo:={}
viejo:={}
*
nuevo:={A
nuevo:={AN|Aw
N|AwP,w
P,wTT*}}
Mq
Mq viejo<>nuevo
viejo<>nuevo
G G?
viejo:=nuevo
viejo:=nuevo
Termina?
nuevo:=viejo
nuevo:=viejo
Correcto?
*
{B
{BN|B
N|BP,
P,(T
(T viejo)
viejo)*}}
Por qu L(G)<>
FMq
FMq
en la Pre?
N:=nuevo
N:=nuevo
Coste?
*
P:={Aw
P:={AwP|A
P|AN,
N, ww(N
(N T)
T)*}}
Fin
Fin
Compiladores I. C.P.S. Universidad de Zaragoza
-J.Ezpeleta-
30
Algoritmo
Algoritmo eliminaNoAccesibles
eliminaNoAccesibles
(E
(E G:GLC;
G:GLC; S:
S: G:GLC)
G:GLC)
--Pre:
G=(N,T,P,S)
t.q.
L(G)<>
XN.X
-XN.X es
es terminable
terminable
---Post:
G=(N,T,P,S)
--Post: G=(N,T,P,S) G
G GG
*
XX(N
-(NT
T).
).,(N
,(NT
T)).*.
--SS * XX
--
*
Vars
Vars viejo,nuevo:
viejo,nuevo: conj.
conj. smbolos
smbolos gram.
gram.
Principio
Principio
viejo:={S}
viejo:={S}
nuevo:={
nuevo:={XX(N(N TT))|S
|SXX P}
P}{S}
{S}
Mq
viejo<>nuevo
Mq viejo<>nuevo
viejo:=nuevo
viejo:=nuevo
nuevo:=viejo
nuevo:=viejo
{Y
{Y(N(N TT))|A
|AYYP,A
P,Aviejo}
viejo}
FMq
FMq
<N,T>:=<nuevo
N, nuevo
nuevo T>
T>
<N,T>:=<nuevo N,
*}
P:={A
w
P
|
A
N
,
w
(N
T)
*
P:={A w P|AN,w(N T) }
Fin
Fin
-J.Ezpeleta-
31
-J.Ezpeleta-
32
-J.Ezpeleta-
33