Vous êtes sur la page 1sur 52

LENGUAJES Y TRADUCTORES

Gramáticas

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
enumeración 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
concatenación de un conjunto finito de
elementos(vocabulario)
LENGUAJE
Lenguaje de programación (Aho, Lam, Sethi y
Ullman)

Los lenguajes de programación son


notaciones que describen los cálculos a las
personas y las maquinas

Otras definiciones

Un lenguaje de programación es una serie de


comandos que nos permiten codificar
instrucciones de manera que sean entendidas y
ejecutadas por una computadora.

 Conjunto de símbolos y reglas que permiten la


comunicación con un computador.
ESPECIFICACIÓN DE
LENGUAJE

La especificación de un lenguaje de programación


implica la definición de los siguientes elementos:

 El conjunto de símbolos (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

Símbolo
• Es una entidad abstracta :
– Ejemplo: A, 7, $, (, etc

Alfabeto (  )
• Cualquier conjunto finito y no
vacio de elementos que
denominaremos símbolos
– Ejemplo:
b ={ 0, 1}
v ={ a, e , i , o , u }
LENGUAJE

Cadena
• Secuencia finita de símbolos del
alfabeto
- Ejemplo:
0, 1, 101, 1100 pertenecen a b

Longitud de una cadena w


• Número de símbolos que contiene
una cadena y se denota por |w|
• Ejemplo:
|1010| = 4
|aeiaa| = 5
LENGUAJE

Potencia de una cadena


• Una cadena de “i” símbolos
“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 vacía {} 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
gramática. Chomsky modifico la forma
de comprender el lenguaje en 1957 al
exponer su Gramática Generativa y que
posteriormente fue base para lo que se
conoce como gramática formal usada por
los lenguajes de las computadoras.
GRAMATICA COMO MEDIO
EXPRESIVO DE UN LENGUAJE

 Si nos remontamos siglos atrás, el estudio del


lenguaje en occidente se inicia con los griegos y
desde esos tiempos hasta el siglo XX.

 Los lingüistas tradicionales trataban las lenguas


de un modo comparativo pero en 1957 el
lingüista Noam Chomsky nacido en Filadelfia en
1928, expone su Gramática Generativa a
través de su obra que denomina Estructuras
Sintácticas con lo cual quiere abandonar esta
forma descriptiva a fin de concederle a la
lingüística un verdadero status científico al
exponer una forma gramatical que expone un
conjunto de reglas que hacen posible generar
o explicar todas y cada una de las
manifestaciones lingüísticas 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
gramática.

 Por ejemplo en L = { an bn / n  1 }
queremos indicar que las palabras
que constituyen el lenguaje son
todas las que estan formadas por
símbolos a seguidos de símbolos b
en igual número.
DEFINICION DE
GRAMATICA

Una gramática es una maquinita


que recibe como entrada letras y
genera cadenas con estas letras
siguiendo algún tipo de regla
DEFINICION DE GRAMATICA
Una gramática G es una cuádrupla

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 : símbolos terminales o símbolos que aparecen


en las frases del lenguaje "
• Vn : símbolos no terminales o auxiliares
• P : Conjunto finito de producciones consistente de
expresiones de la forma  donde  y  son
cadenas de símbolos, 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 : símbolo inicial al que pertenece a Vn
REPRESENTACION DE
GRAMATICAS
 Para la representación de una gramática
utilizaremos la BNF. La BNF (Backus
NormalForm, Backus-Naur Form, en
homenaje a Backus, su creador y a Naur, su
continuador), es un metalenguaje muy
utilizado para definir la estructura sintáctica
de lenguajes de programación (lenguajes
formales).

 La forma de Backus-Naur fue creada para


definir la escritura sintáctica del lenguaje de
programación ALGOL60.

 Las notaciones BNF, reducen el número de


reglas necesarias. Para ello, utilizan
los siguientes metasímbolos:
NOTACION BNF

SIMBOLO SIGNIFICADO
 El esquema de la derecha desarrolla el elemento de la izquierda
| de alternativa (se puede elegir únicamente uno de los elementos que
separa). Las reglas AaA y AbB se convierten en AaA | bB
{} de repetición (los elementos que incluyen, pueden repetirse cero o más
veces), se usa tambien * o el +
[] de opción (los elementos que incluyen pueden utilizarse o no). Son
expresiones diferentes A | B+ y [A | B]+
() de agrupación (sirven para agrupar los elementos que incluyen)
GRAMATICA EJEMPLO

Análisis para w = a*( a + a )


G= ( Vn, Vt, E, P)
Vn={ E } E
Vt={ +, *, ( , ) , a } ____ | ___
E * E
P{E E+E | |
E E*E a (E)
E (E) ____ | ____
E a E + E
} | |
a a
GRAMATICA CON O SIN EXPRESIONES
REGULARES

Reconocimiento de un identificador:

CON EXPRESION REGULAR SIN EXPRESION REGULAR

G= ( Vn, Vt, A, P) G= ( Vn, Vt, A, P)


Vn={ A, L, D } Vn={ A, L, D, M }
Vt={ A,B,..Z, a, b, ….z, 0, 1, …,9 } Vt={ A,B,..Z, a, b, ….z , 0, 1, …,9
}
P={
A  L (L / D)* P={
L A/B/…./Z/a/b/…/z AL M
D0/1/…./9 ML M / DM / 
} L A/B/…./Z/a/b/…/z
D0/1/…./9
}
GRAMATICA CON O SIN EXPRESIONES
REGULARES

P={ P={
A  L (L / D)* AL M
L A/B/…./Z/a/b/…/z ML M / DM / 
D0/1/…./9 L A/B/…./Z/a/b/…/z
} D0/1/…./9
}

PALAb r a 9 AL M
PLM
PALM
PALLM
PALAL M
PALAb L M
A  L (L / D)* PALAb r L M
PALAb r a DM
PALAb r a 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) G= ( Vn, Vt, Id, P)


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

P={ P={
AL M <Id><Letra> <MasSimb>
ML M / D M /  <MasSimb>  <Letra> <MasSimb> / 
L A/B/…./Z/a/b/…/z <MasSimb>  <Digito> <MasSimb> / 
D0/1/…./9 <Letra>  A/B/…./Z/a/b/…/z
} <Digito>0/1/…./9
}
GRAMATICA CON Vt CON MAS DE UN
CARACTER

Reconocer una línea de declaración de


variables, Por ejemplo:

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


Vn={S, Id , Letra, Digito, otro, Mas }
Vt={ A,B,..Z, a, b, ….z, int, , }

P={
<S> int <Id> <otro>
<otro> , <Id> <otro> / 
<Id><Letra> <Mas>
<Mas>  <Letra> <Mas> / 
<Mas>  <Digito> <Mas> / 
<Letra>  A/B/…./Z/a/b/…/z
<Digito>0/1/…./9
}
GRAMATICA HASTA UN NIVEL LEXICO

Reconocer una línea de declaración de


variables, Por ejemplo:

int dato, a , cantidad


Se describen los
G= ( Vn, Vt, S, P)
lexemas hasta el
Vn={S, Id , Letra, Digito, Mas }
Vt={ A,B,..Z, a, b, ….z, int, , } detalle,..en este
caso G describe
P={ como se forman los
<S> int <Id> <otro> identificadores
<otro> , <Id> <otro> / 
<Id><Letra> <Mas>
<Mas>  <Letra> <Mas> / 
<Mas>  <Digito> <Mas> / 
<Letra>  A/B/…./Z/a/b/…/z
<Digito>0/1/…./9
}
RECONOCIMIENTO
P={
<S> int <Id> <otro>
<otro> , <Id> <otro> / 
int ca8, b <Id><Letra> <Mas>
<Mas>  <Letra> <Mas> / 
<Mas>  <Digito> <Mas> / 
<S>
<Letra>  A/B/…./Z/a/b/…/z
<Digito>0/1/…./9
int <id> <otro> }

<Letra> <Mas>
, <id> <otro>
<Letra> <Mas>
<Letra> <Mas> 
<Digito> <Mas>
b 

c a 8 
GRAMATICA HASTA UN NIVEL
SINTACTICO

Reconocer una línea de declaración de


variables, Por ejemplo:

int dato, a , cantidad

Se describen los
G= ( Vn, Vt, S, P) lexemas hasta el
Vn={S, Mas } detalle,..en este
Vt={ id, int, , } caso G describe
como se forman los
P={ identificadores
<S> int id <Mas>
<Mas> , id <Mas> / 
}
RECONOCIMIENTO

int dato, a, cantidad


G= ( Vn, Vt, S, P)
Vn={S, Mas }
Vt={ id, int }
<S>
P={
<S> int id <Mas>
int id <Mas> <Mas> , id <Mas> / 
}
dato , id <Mas>

a , id <Mas>

cantidad 
FORMA GRAMATICAL CORRECTA
Secuencias a reconocer
L(G)={ an bm / n impar y m par}

G=(Vn, Vt, P, S)
Vn={ S, A, B} Vt={ a, b}
P={ SaAbbB abb aaaaaaabbbb
AaaA /  S S
BbbB/ 
}
aAbbB aAbbB

  aaA bbB

aaA 

aaA


FORMA GRAMATICAL NO CORRECTA

L(G)={ an bm / n impar y m par}


podemos Podemos
reconocer mal reconocer bien
G=(Vn, Vt, P, S)
Vn={ S, A, B} Vt={ a, b}
P={ SaAbbB
AaA / 
BbB/  aabbb aaabbbb
}
S S

aAbbB aAbbB

aA bB aA bB

  aA bB

 
JERARQUIA DE CHOMSKY

 En los 50’s, 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
"Jerarquía de Chomsky".

 Esta Jerarquía de Chomsky define una


clasificación de cuatro tipos de gramática
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 autómatas 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:
Gramática Libre del Contexto / algebraicas /
incontextuales ( G.L.C)

A  , A  Vn ,   ( Vn  Vt )*

Observación:
 Toda gramática de tipo 3 es tambien de tipo 2
 Equivale en cuanto a potencia descriptiva, al autómata
con pila o Pushdown
TIPOS DE GRAMATICA
TIPO 1:
Gramática Sensible al Contexto / Contextuales Este tipo de producciones,
implica que las sustituciones
aAb  aBb sólo pueden efectuarse en
donde cierto contexto (el símbolo 'A'
A  Vn se podrá sustituir por '
a, b  (Vn Vt)* ' B ' si y sólo si, está precedido
B  (Vn Vt)+ por ’a', y le sigue ‘b'), esto es,
son gramáticas dependientes
Definicion alternativa (sensibles) al contexto


con |  |  |  |
,   ( Vn  Vt ) +
TIPOS DE GRAMATICA
TIPO 0:
Gramática sin restriccion / Estructura de frase

Las gramáticas de tipo 0, son gramáticas 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 máquina de Turing, y sus reglas son del tipo:



Donde  y   (Vn Vt)*


LENGUAJE GENERADO POR
UNA GRAMATICA

• Al lenguaje L generado por una


gramática tipo X, se le conoce
como "lenguaje de tipo X".

• El lenguaje recibe el nombre del


tipo de gramática más restringida
capaz de generarlo.
LENGUAJE GENERADO POR
UNA GRAMATICA
El lenguaje formado por todas las
cadenas de longitud par sobre el
alfabeto ={a} se puede formar con las
gramáticas G :

G1
S  aSa | que es de tipo 2 y también por
G2
S aA |
A aS que es de tipo 3

Por lo tanto concluimos que el lenguaje es de tipo 3


G.L.C

• La mayor parte de los lenguajes de


programación se representan mediante
una gramática de este tipo.

• Estas gramáticas suponen una


ampliación sobre las gramáticas
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)
Ea }

La secuencia:

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

FORMA SENTENCIAL
G.L.C
Arbol de derivación

E*E

E+E

a a a
G.L.C. AMBIGUA
Una gramática G es
ambigua si hay al menos
una cadena en L(G) que
tenga dos o mas árboles de
derivación distintos.

Ejemplo de gramática 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 derivación

E E

E*E E + E

E +E E*E

a a a a a a
G.L.C. AMBIGUA
Recomendación
Para algunos tipos de
analizadores sintácticos es
preferible que la gramática no
sea ambigua pues si lo fuera, no
se podría determinar de manera
exclusiva que árbol de análisis
sintáctico seleccionar para una
frase
G.L.C. AMBIGUA
Eliminar la
ambiguedad

Se elimina la ambigüedad G=(Vn, Vt, P, E)


atendiendo a la precedencia
Vn= { E, T, F }
deseada para los
Vt = { + , * , a, ( ,) }
operadores. Una gramática
equivalente a la gramática P={
anterior que no es ambigua EE+T|T
es: TT*F|F
F a|(E)
}
G.L.C. RECURSIVA
Una gramática es recursiva por la izquierda
si tiene un no terminal A tal que existe una
derivación para alguna cadena  de la
forma:

+
A  A  ,   ( Vn  Vt ) * , A  Vn

La recursión izquierda es un problema que


debe ser resuelto antes que se quiera
trabajar con una gramática para construir
un analizador descendente, ya que éste
no funcionará si la gramática la posee.
ELIMINAR RECURSIVAD

AA|
Se sustituye AA| por las producciones no
recursivas por la izquierda

A  A’ A , A’  Vn
A’  A’ |  a ,   ( Vn  Vt ) *
EJEMPLO

B1 YAB|XZ
B2 XYZ

• En apariencia, esta gramática no tiene


recursión izquierda (ninguna producción
empieza con el no terminal que se está
definiendo.
REEMPLAZAMOS
Reemplazando B1 en B2:

B1 YAB|XZ
B2 XYZ

Tenemos
X  A B Z |X Z Z

Hay
recursividad
GRAMATICA
SIN RECURSION
AA|

X  A B Z |X Z Z A  A’
A’  A’ | 

Después de eliminar la recursividad:

X ABZX'
X´  Z Z X ' | 
EJERCICIOS
Genere una gramática 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) SAb c) S aB
B cb ABc Bb BaB
B B

d) S aBbB e) SA f) S aB
BcBA AB B bA
BAaab Bab A 
A a
g) SSa h) SBbA i) SaBb
SbS BbabA B
S AabBA BbB
SOLUCION

L= { aN bN cN / N >0} S S
Vn={ S, R, Q} ↓ ↓
Vt={ a, b, c } aRQ aSRQ
↓ ↓
P={ SaSRQ / aRQ
abQ aaRQRQ
QR RQ
↓ ↓
aRab abc aabQRQ
bR bb ↓
bQbc aabRQQ
cQcc } ↓
aabbQQ

aabbcQ

aabbcc
LABORATORIO

 Defina la gramática de su
lenguaje
 La gramática no debe incluir
instrucciones recursivas.
 Incluya también en su trabajo
el lenguaje definido en la
anterior clase para poder
comparar.

Enviar la gramática a:

zorroculto69@hotmail.com

Vous aimerez peut-être aussi