You are on page 1of 48

LENGUAJES Y TRADUCTORES

Gramticas

Profesor: Carlos A. Ruiz De La Cruz Melo


correo: zorroculto69@hotmail.com

LENGUAJE
Lenguaje (Grassmann)
Consiste en un conjunto de frases finito o infinito.
Los
lenguajes
pueden
ser
especificados
enumerando de manera exhaustiva todas sus
frases. Sin embargo, para lenguajes infinitos dicha
enumeracin no es posible. Cualquier instrumento
que especifique un lenguaje debe ser finita.
Lenguaje (Chombsky)
Conjunto finito o infinito de oraciones(frases), cada
una de ellas de longitud finita y construidas por la
concatenacin
de
un
conjunto finito
de
elementos(vocabulario)

LENGUAJE
Lenguaje de programacin (Aho, Lam, Sethi y
Ullman)
Los lenguajes de programacin son
notaciones que describen los clculos a las
personas y las maquinas

Otras definiciones
Un lenguaje de programacin es una serie de
comandos
que
nos
permiten
codificar
instrucciones de manera que sean entendidas y
ejecutadas por una computadora.
Conjunto de smbolos y reglas que permiten la
comunicacin con un computador.

ESPECIFICACIN DE
LENGUAJE
La especificacin de un lenguaje de programacin
implica la definicin de los siguientes elementos:

El conjunto de smbolos (o alfabeto) que se


pueden usar para construir programas correctos.
El conjunto de todos los programas correctos.
El significado de todos los programas correctos

LENGUAJE
Smbolo
Es una entidad abstracta :
Ejemplo: A, 7, $, (, etc

Alfabeto ( )
Cualquier conjunto finito y no
vacio
de
elementos
que
denominaremos smbolos
Ejemplo:
b ={ 0, 1}
v ={ a, e , i , o , u }

LENGUAJE
Cadena
Secuencia finita de smbolos del
alfabeto
- Ejemplo:
0, 1, 101, 1100 pertenecen a b

Longitud de una cadena w


Nmero de smbolos que contiene
una cadena y se denota por |w|
Ejemplo:
|1010| = 4
|aeiaa| = 5

LENGUAJE
Potencia de una cadena
Una cadena de i smbolos
a se denota por ai
Ejemplo:
a0 =
a1 = a
a2 = aa

LENGUAJE
Lenguaje (* )
Es el conjunto de todas las palabras
sobre un alfabeto.
Ejemplo:
* b ={ , 0, 1, 101, 10,..}
El conjunto vaci , y el conjunto
formado por la cadena vaca {} son
lenguajes.

Como los compiladores


entienden
programas
escritos en un lenguaje?
La respuesta es que al igual que los
lenguajes humanos, estos se rigen por una
gramtica. Chomsky modifico la forma de
comprender el lenguaje en 1957 al
exponer su Gramtica Generativa y que
posteriormente fue base para lo que se
conoce como gramtica formal usada por
los lenguajes de las computadoras.

GRAMATICA COMO MEDIO


EXPRESIVO DE UN LENGUAJE
Si nos remontamos siglos atrs, el estudio del
lenguaje en occidente se inicia con los griegos
y desde esos tiempos hasta el siglo XX.
Los lingistas tradicionales trataban las
lenguas de un modo comparativo pero en 1957
el lingista Noam Chomsky nacido en
Filadelfia en 1928, expone su Gramtica
Generativa a travs de su obra que denomina
Estructuras Sintcticas con lo cual quiere
abandonar esta forma descriptiva a fin de
concederle a la lingstica un verdadero status
cientfico al exponer una forma gramatical que
expone un conjunto de reglas que hacen
posible generar o explicar todas y cada una de
las manifestaciones lingsticas de una lengua.

DEFINICION DE
GRAMATICA

Sistemas generativos, donde cada


string del lenguaje puede construirse
por
pasos
bien
definidos,
especificados por las reglas de la
gramtica.
Por ejemplo en L = { an bn / n 1 }
queremos indicar que las palabras
que constituyen el lenguaje son
todas las que estan formadas por
smbolos a seguidos de smbolos b
en igual nmero.

DEFINICION DE
GRAMATICA
Una
gramtica
es
una
maquinita que recibe como
entrada letras y genera
cadenas con estas letras
siguiendo algn tipo de regla

DEFINICION DE GRAMATICA
Una gramtica G es una cudrupla
G = ( Vn , Vt , P, S )

Una G impone una estructura a


las frases de un lenguaje

Es el mecanismo empleado para


establecer la estructura de un
lenguaje, es decir las sentencias
que lo forman.

DEFINICION DE GRAMATICA
G = ( Vn , Vt , P, S )

Vt : smbolos terminales o smbolos que aparecen


en las frases del lenguaje "
Vn : smbolos no terminales o auxiliares
P : Conjunto finito de producciones consistente de
expresiones de la forma donde y son
cadenas de smbolos, de tal modo que (Vn U
Vt )+ y
(Vn U Vt )* y cuyo significado consiste
en que puede ser sustituido por la parte derecha
sea
S : smbolo inicial al que pertenece a Vn

REPRESENTACION DE
GRAMATICAS
Para la representacin de una
gramtica utilizaremos la BNF. La
BNF (Backus NormalForm, BackusNaur Form, en homenaje a Backus,
su
creador
y
a
Naur,
su
continuador), es un metalenguaje
muy utilizado para definir la
estructura sintctica de lenguajes
deprogramacin
(lenguajes
formales).
La forma de Backus-Naur fue
creada para definir la escritura
sintctica
del
lenguaje
de
programacin ALGOL60.
Las notaciones BNF, reducen el
nmero de reglas necesarias.Para
ello,
utilizan
lossiguientes

NOTACION BNF
SIMBO
LO

SIGNIFICADO

El esquema de la derecha desarrolla el elemento de la


izquierda

de alternativa (se puede elegirnicamente uno de los


elementos que separa). Las reglas AaA y AbB se
convierten en AaA | bB

{}

de repeticin (los elementos que incluyen, pueden


repetirse cero o ms veces), se usa tambien * o el +

[]

de opcin (los elementos que incluyen pueden utilizarse o


no). Son expresiones diferentes A | B+ y [A | B]+

()

de agrupacin (sirven para agrupar loselementos que


incluyen)

GRAMATICA EJEMPLO
Anlisis para w = a*( a + a )
G= ( Vn, Vt, E, P)
Vn={ E }
Vt={ +, *, ( , ) , a }
P{E
E
E
E
}

E+E
E*E
(E)
a

E
____ | ___
E
*
E
|
|
a
(E)
____ | ____
E
+
|
a

E
|
a

GRAMATICA CON O SIN EXPRESIONES


REGULARES
Reconocimiento de un identificador:
CON EXPRESION REGULAR

SIN EXPRESION REGULAR

G= ( Vn, Vt, A, P)
Vn={ A, L, D }
Vt={ A,B,..Z, a, b, .z, 0, 1, ,9 }

G= ( Vn, Vt, A, P)
Vn={ A, L, D, M }
Vt={ A,B,..Z, a, b, .z , 0, 1, ,9
}

P={
A L (L / D)*
L A/B/./Z/a/b//z
D0/1/./9
}

P={
AL M
ML M / DM /
L A/B/./Z/a/b//z
D0/1/./9
}

GRAMATICA CON Vn CON MAS DE UN


CARACTER
Reconocimiento de un identificador:

CON UN SOLO CARACTER

CON VARIOS CARACTERES

G= ( Vn, Vt, A, P)
Vn={ A, L, D, B }
Vt={ A,B,..Z, a, b, .z , 0, 1,
,9 }

G= ( Vn, Vt, Id, P)


Vn={ Id , Letra, Digito, MasSimb }
Vt={ A,B,..Z, a, b, .z , 0, 1, ,9 }
P={

P={
AL M
ML M /
L A/B/./Z/a/b//z
D0/1/./9
}

<Id><Letra> <MasSimb>
<MasSimb> <Letra> <MasSimb> /
<MasSimb> <Digito> <MasSimb> /
<Letra> A/B/./Z/a/b//z
<Digito>0/1/./9
}

GRAMATICA CON Vt CON MAS DE UN


CARACTER
Reconocer una lnea de declaracin de
variables, Por ejemplo:

int

dato, a , cantidad
G= ( Vn, Vt, S, P)

Vn={S, Id , Letra, Digito, Mas }


Vt={ A,B,..Z, a, b, .z, int,

,}

P={
<S> int <Id> <Mas>
<Mas> , <Id> <Mas> /
<Id><Letra> <MasLD>
<MasLD> <Letra> <MasLD> /
<MasLD> <Digito> <MasLD> /
<Letra> A/B/./Z/a/b//z
<Digito>0/1/./9
}

GRAMATICA HASTA UN NIVEL LEXICO


Reconocer una lnea de declaracin de
variables, Por ejemplo:
G= ( Vn, Vt, S, P)
Vn={S, Id , Letra, Digito, Mas }
Vt={ A,B,..Z, a, b, .z, int,

,}

P={
<S> int <Id> <Mas>
<Mas> , <Id> <Mas> /
<Id><Letra> <MasLD>
<MasLD> <Letra> <MasLD> /
<MasLD> <Digito> <MasLD> /
<Letra> A/B/./Z/a/b//z
<Digito>0/1/./9
}

Se describen los
lexemas hasta el
detalle,..en
este
caso
G describe
como se forman los
identificadores

GRAMATICA
SINTACTICO

HASTA

UN

NIVEL

Reconocer una lnea de declaracin de


variables, Por ejemplo:
Int dato, a , cantidad
G= ( Vn, Vt, S, P)
Vn={S, Mas }
Vt={ id, int }
P={
<S> int id <Mas>
<Mas> , id <Mas> /
}

Se describen los
lexemas hasta el
detalle,..en
este
caso
G describe
como se forman los
identificadores

JERARQUIA DE CHOMSKY
En los 50s, Chomsky dio a conocer dos
trabajos sobre los Lenguajes Naturales que,
orientados al rea de los lenguajes formales,
resultaron en lo que se denomina como
"Jerarqua de Chomsky".
Esta Jerarqua de Chomsky define una
clasificacin de cuatro tipos de gramtica
formales que, a su vez, generan cuatro tipos
diferentes de lenguajes formales.

TIPOS DE GRAMATICA
TIPO 3:

Gramatica regular/ racional / Kleene


Las producciones tienen la forma siguiente:
a) Lineales por la derecha
A aB
B a
con A,B Vn , a Vt U { }
Equivalen en cuanto a poder descriptivo, a
los autmatas finitos deterministas y no
deterministas

TIPOS DE GRAMATICA
TIPO 3:

Gramatica regular/ racional / Kleene


b) Lineales por la izquierda
A Ba
B a
con A,B Vn , a Vt U { }

TIPOS DE GRAMATICA
TIPO 2:

Gramtica Libre del Contexto / algebraicas /


incontextuales ( G.L.C)
A , A Vn , ( Vn Vt
Observacin:
Toda gramtica de tipo 3 es tambien de tipo 2
Equivale en cuanto a potencia descriptiva, al autmata
con pila o Pushdown

TIPOS DE GRAMATICA
TIPO 1:
Gramtica Sensible al Contexto / Contextuales

aAb aBb
donde

A,B Vn
a, b (Vn Vt)*

Definicion alternativa

con | | | |
, ( Vn Vt ) +

Este
tipo
de
producciones,
implica
que las sustituciones
slo pueden efectuarse
en cierto contexto (el
smbolo 'A' se podr
sustituir por '
' B ' si y slo si, est
precedido pora', y le
sigue b'), esto es, son
gramticas
dependientes
(sensibles) al contexto

TIPOS DE GRAMATICA
TIPO 0:

Gramtica sin restriccion / Estructura de frase


Las gramticas de tipo 0, son gramticas sin
restricciones, es decir, no hay restricciones ni
para el lado izquierdo, ni para el lado derecho
de las producciones. Su potencia es la de una
mquina de Turing, y sus reglas son del tipo:

Donde y (Vn Vt)*

LENGUAJE GENERADO POR UNA


GRAMATICA

Al lenguaje L generado por una


gramtica tipo X, se le conoce
como "lenguaje de tipo X".

El lenguaje recibe el nombre del


tipo de gramtica ms restringida
capaz de generarlo.

LENGUAJE GENERADO
UNA GRAMATICA
El lenguaje formado por todas las
cadenas de longitud par sobre el
alfabeto ={a} se puede formar con las
gramticas G :
G1
S aSa | que es de tipo 2 y tambin por
G2
S aA |
A aS

que es de tipo 3

Por lo tanto concluimos que el lenguaje es de tipo 3

POR

G.L.C

La mayor parte de los lenguajes de


programacin se representan mediante una
gramtica de este tipo.

Estas gramticas suponen una ampliacin


sobre las gramticas regulares. Se caracterizan
porque sus reglas son de la forma:

r : Vn ( Vn Vt

G.L.C
Dada G=( Vn, Vt, P, E)
Vn={ E }

Vt = { +, *, a, ( , ) }

P={ E E+E
E E*E
E (E)
Ea

La secuencia:

E E*E E*E+E E*E+ a E* a + a a*a+ a

FORMA SENTENCIAL

G.L.C
Arbol de derivacin

E
E * E
E + E

G.L.C. AMBIGUA
Una
gramtica
G
es
ambigua si hay al menos
una cadena en L(G) que
tenga dos o mas rboles de
derivacin distintos.

Ejemplo de gramtica ambigua:


E E+E | E*E | (E) | a

G.L.C. AMBIGUA
Observemos que la cadena
a*a+a puede ser generada por
dos rboles de derivacin

E* E

E + E

E +E

E*E

a a

G.L.C. AMBIGUA
Recomendacin
Para algunos
tipos de
analizadores
sintcticos
es
preferible que la gramtica no
sea ambigua pues si lo fuera, no
se podra determinar de manera
exclusiva que rbol de anlisis
sintctico seleccionar para una
frase

G.L.C. AMBIGUA
Eliminar la
ambiguedad
Se elimina la ambigedad
atendiendo a la precedencia
deseada
para
los
operadores. Una gramtica
equivalente a la gramtica
anterior que no es ambigua
es:

G=(Vn, Vt, P, E)
Vn= { E, T, F }
Vt = { + , * , a, ( ,) }
P={
EE+T|T
TT*F|F
F a|(E)
}

OTRA FORMA DE
AMBIGUEDAD
Si tenemos producciones de esta
forma:

A b /b

b Vn o Vt,

Podemos factorizar para eliminar


la ambigedad:

A aB
B /

, (Vn Vt)*

G.L.C. RECURSIVA
Una gramtica es recursiva por la izquierda
si tiene un no terminal A tal que existe una
derivacin para alguna cadena de la
forma:
+

A A , ( Vn Vt ) *
La recursin izquierda es un problema que
debe ser resuelto antes que se quiera
trabajar con una gramtica para construir
un analizador descendente, ya que ste
no funcionar si la gramtica la posee.

, A Vn

ELIMINAR RECURSIVAD
Se sustituye AA| por las producciones
no recursivas por la izquierda
A A
A A |

A , A Vn
a , ( Vn Vt ) *

EJEMPLO
B1
B2

YAB|XZ
XYZ

En apariencia, esta gramtica no tiene


recursin izquierda (ninguna produccin
empieza con el no terminal que se est
definiendo.

REEMPLAZAMOS
Reemplazando B1 en B2:
B1
B2

YAB|XZ
XYZ

Tenemos
X A B Z |X Z Z
Hay
recursivida
d

GRAMATICA
SIN RECURSION
Despus de eliminar la
recursividad:
X ABZX'
X Z Z X ' |

EJERCICIOS
Genere una gramtica para los siguientes casos:
1. L= { aN c bMb / N, M 0} genere una G lineal por la derecha
2. L= { aaN cM bd / N, M 0} genere una G lineal por la izquierda
3. L = { aN c bN / N 0}
4. L= { aN bN / N >0}
5. L= { aN bN cN / N >0}
6. L= { aN bM cN+M / N,M >0}

EJERCICIOS
7. L= { aN bN cN / N >0}
8. Escriba una G para reconocer una zona de declaracion de
variables. Por ejemplo
dato, a, b: integer;
cant, x: real;
Total: real;

EJERCICIOS
10. Para G=(Vn, Vt, P, S) Vn={S, A, B} Vt={a,b,c}
Indique los lenguajes que generan cada P
a)

S abB
B cb

b)

SAb
ABc
B

c)

S aB
Bb BaB
B

d)

S aBbB
BcBA
BAaab
A a

e)

SA
AB
Bab

f)

S aB
B bA
A

g)

SSa
SbS
S

h)

SBbA
BbabA
AabBA

i)

SaBb
B
BbB

SOLUCION
L= { aN bN cN / N >0}
Vn={ S, R, Q}
Vt={ a, b, c }
P={ SaSRQ / aRQ
QR RQ
aRab
bR bb
bQbc
cQcc }

aRQ

abQ

abc

aSRQ

aaRQRQ

aabQRQ

aabRQQ

aabbQQ

aabbcQ

aabbcc

LABORATORIO
Defina la gramtica de su
lenguaje
La gramtica no debe incluir
instrucciones recursivas, ni
ambiguedad.
Incluya tambin en su trabajo
el lenguaje definido en la
anterior clase para poder
comparar.
Enviar la gramtica a: