Sei sulla pagina 1di 4

Ing.

de Sistemas Autómatas y Compiladores

GRAMATICAS

Ente formal para especificar, de una manera finita, el conjunto de sentencias o cadenas de símbolos
potencialmente infinitos que constituyen un lenguaje.
Representan un esquema generativo para denotar un lenguaje, ya que a través de sus reglas de
producción generan las cadenas del lenguaje que representa la gramática.
Formalmente una gramática es una cuádrupla: G = (N,S,S,P) donde:

 N = conjunto de símbolos No terminales. Símbolos auxiliares que intervienen en el


proceso de generación de cadenas a través de la gramática.
 S = conjunto de símbolos terminales. Alfabeto del lenguaje que genera la gramática.
 S = símbolo inicial. Símbolo no terminal a partir del cual se aplican las reglas de
producción de la gramática para obtener las distintas cadenas del lenguaje.
 P = conjunto de reglas de producción ó producciones. Reglas que establecen como se
generan las cadenas. Una producción es un par de cadenas que pertenecen a la siguiente
expresión: (NUS)*N(NUS)*  (NUS)*, que están separadas por una flecha, la primera
cadena se denomina antecedente y la segunda consecuente. Se dice que el antecedente
produce al consecuente.

Ejemplo 1:
Sea la gramática G1=({X},{a,b},X,P) donde el conjunto de producciones es:
X  ab
X  aXb

Ejemplo 2:
Sea la gramática G2=({C,A,B},{a,b,c,d},C,P) donde P son las producciones:
C  ACB
A  b
aaA  aaBB
C  d
A  aA
B  dcd

1. REPRESENTACIÓN DE LOS SÍMBOLOS GRAMATICALES


Los símbolos terminales se representan por los siguientes símbolos:
 Letras minúsculas.

-1-
 Operadores tales como +, -, *, /.
 Caracteres especiales tales como: @, (, ),;, [, ], etc.
 Los dígitos.
 Las palabras reservadas de los lenguajes de programación.
Los símbolos No terminales se representan por:
 Letras mayúsculas
 Nombres en minúsculas, encerrados entre paréntesis angulares (<, >).

2. NOTACIÓN

Las reglas de producción que tienen un mismo antecedente se pueden redefinir de la siguiente
manera:
A a1
A a2
...
A a1 | a1 | ... | ak
A ak

Ejemplo:
Las reglas de producción de la gramática anterior se pueden rescribir de la forma siguiente:
C  ACB | d 1,2
A  b | Aa 3,4
aaA  aaBB 5
B  dcd 6

3. FORMA SENTENCIAL (FS)


Es cualquier secuencia de terminales y no terminales obtenida mediante derivaciones a partir del
símbolo inicial, según como se detalla:
 S es una FS
 Si aßs es una FS y àd  P, entonces ads es una FS.
Una FS de una gramática G que no contiene símbolos no terminales se constituye en una sentencia
o cadena de lenguaje que genera la gramática.

4. PROCESO DE DERIVACIÓN
Proceso que permite generar las cadenas del lenguaje que representa la gramática; mediante la
aplicación de las reglas de producción a partir del símbolo inicial de la gramática.
Una derivación consiste en reemplazar en una FS una subcadena que coincide con el antecedente
de una producción, por el consecuente.

Ejemplo 1:
Sea la gramática G2=({C,A,B},{a,b,c,d,},C,P) donde P son las producciones:
C  ACB | d 1,2
A  aA | b 3,4
aaA  aaBB 5
B  dcd 6
Aplicado derivaciones a partir del símbolo inicial se obtiene la derivación:
(1) (3) (4) (2) (6)
C  ACB  aACB  abCB  abdB  abddcd
Ejemplo 2:
Sea la gramática:
E  E + T | E - T | T 1,2,3
T  T * F | T / F | F 4,5,6
F  ( E ) | nro 7,8
Determinar si nro+nro-nro  L(G)
2 1 3 6 6 6 8
E  E-T  E+T-T  T+T-T  F+T-T  F+F-T  F+F-F  nro+F-F
8 8
 nro+nro-F  nro+nro-nro

4.1. DERIVACION MÁS A LA IZQUIERDA


Derivación en la cual siempre se reemplazan los símbolos no terminales que están mas a la
izquierda en cada forma sentencial.
4.2. DERIVACION MÁS A LA DERECHA
Derivación en la cual siempre se reemplazan los símbolos no terminales que están mas a la
derecha en cada forma sentencial.
5. LENGUAJE GENERADO POR UNA GRAMÁTICA
El lenguaje generado por una gramática G=(N,S,S,P), L(G), es el conjunto de cadenas formadas
por símbolos terminales y que son derivables a partir del símbolo inicial de la gramática.
L(G) = {w / w  S*, S à+ w }
Dos gramáticas se dicen equivalentes si generan el mismo lenguaje.
Ejercicios de Gramáticas
1. Escribir una gramática que genere:
a. Números enteros
b. Números tanto enteros como reales con y sin signo.
c. Identificadores.

2. Obtener las derivaciones de las cadenas 002 y 0001 a partir de la siguiente gramática:
G = ({A,B}, {0, 1, 2},A, {A  0B,A 2,B  0A,B  1})

3. Demostrar que las cadenas abc y aabbcc pertenecen al lenguaje de la gramática G =


({S,B,C},{a,b,c},S,P) donde P={S → aSBC | aBC, CB → BC, aB → ab, bB → bb, bC → bc, cC →
cc}

4. Describir los lenguajes que generan las siguientes gramáticas descritas mediante sus
producciones y considerando que S es el símbolo inicial en cada una de ellas:

a) S → aA | λ, A → bS
b) S → Aa, A → B, B → Aa
c) S → ABC , A → aA | λ , B → bB | λ , C → cC | λ
d) S → aS | bT, T → aa

5. Construir gramáticas sobre Σ = {a, b} que generen los lenguajes cuyo conjunto de cadenas sean:
a) Cadenas con una única a.
b) Cadenas con al menos la subcadena bab
c) Cadenas con no más de tres a’s.
d) L = {abna | n ≥ 1}
e) L = {an+2bn | n ≥ 1}
f) L = {anbm | n ≥ 0,m > n}
g) L = {anbn+1 | n≥0}

6. Escribir una gramática formal para cada uno de los siguientes lenguajes:
a) Cadenas de 0 y 1 que terminan con 00.
b) Cadenas de 0 y 1 en las cuales los 0, si aparecen, lo hacen en grupos de tres.
c) Números múltiplos de 5 mayores o iguales que 100
d) Identificadores del lenguaje C: [a-zA-Z][0-9a-zA-Z_]*
e) -?0x[0-9A-F]+
f) 10*
g) ab+|c*