Diferencia entre revisiones de «Gramática regular»

Línea 1: Línea 1:
{{Definición|nombre=Gramática regular|imagen=Jerarquia_Chomsky_A.gif|concepto=Gramática que permite la definición de lenguajes regulares o de tipo 3.}}
+
{{Definición
 +
|nombre=Gramática regular
 +
|imagen=Jerarquia_Chomsky_A.gif
 +
|concepto=Gramática que permite la definición de lenguajes regulares o de tipo 3.}}
 
<div align="justify">
 
<div align="justify">
'''Gramática regular'''. En [[Lingüística]], [[Matemáticas]] e [[Informática]] y en la [[jerarquía de Chomsky]] se refiere a las gramáticas que definen a los lenguajes de tipo 3 o [[Lenguaje regular|lenguajes regulares]].
+
'''Gramática regular'''. En [[Lingüística]], [[Matemáticas]] e [[Informática]] y en la [[jerarquía de Chomsky]] se refiere a las gramáticas que definen a los lenguajes de tipo 3 o [[Lenguaje regular|lenguajes regulares]].
 
+
Se dividen en dos tipos fundamentales según la forma de sus producciones:
Se dividen en dos tipos fundamentales según la forma de sus producciones.
 
 
 
 
* Gramática regular derecha.
 
* Gramática regular derecha.
 
* Gramática regular izquierda.
 
* Gramática regular izquierda.
 
+
Dependiendo de si la [[Recursividad|recursión]] de los símbolos no terminales se produce a la derecha o la izquierda, respectivamente.
Dependiendo de si la [[Recursividad|recursión]] de los símbolos no terminales se produce a la derecha o izquierda respectivamente.
+
==Definiciones==
 
 
==Definiciones.==
 
 
Se define una [[gramática formal]] ''G'' como la cuarteta ''<N,T,P,S>'' donde ''N'' es el [[conjunto]] de símbolos no terminales, ''S'' es un símbolo de ''N'' que identifica el símbolo inicial o de partida, ''T'' es el [[alfabeto]] o conjunto de símbolos terminales y ''P'' es el conjunto de reglas de la forma [[Archivo:Alfa_flecha_beta.gif|middle]] donde [[Archivo:Alfa_beta_pertenecen_clausura_N_union_T.gif|middle]] y [[Archivo:Alfa.gif|middle]] contiene al menos un no terminal de ''N''.
 
Se define una [[gramática formal]] ''G'' como la cuarteta ''<N,T,P,S>'' donde ''N'' es el [[conjunto]] de símbolos no terminales, ''S'' es un símbolo de ''N'' que identifica el símbolo inicial o de partida, ''T'' es el [[alfabeto]] o conjunto de símbolos terminales y ''P'' es el conjunto de reglas de la forma [[Archivo:Alfa_flecha_beta.gif|middle]] donde [[Archivo:Alfa_beta_pertenecen_clausura_N_union_T.gif|middle]] y [[Archivo:Alfa.gif|middle]] contiene al menos un no terminal de ''N''.
 
+
===Gramática regular derecha (GRD).===
+
===Gramática regular derecha (GRD)===
Sea una gramática ''G=<N,T,P,S>'' se dice que la misma es '''gramática regular derecha (GRD)''' si todas sus producciones tienen una de estas formas:
+
Sea una gramática ''G=<N,T,P,S>'' se dice que la misma es ''gramática regular derecha (GRD)'' si todas sus producciones tienen una de estas formas:
 
 
 
* [[Archivo:A_flecha_x_B.gif|middle]]  
 
* [[Archivo:A_flecha_x_B.gif|middle]]  
 
* [[Archivo:A_flecha_x.gif|middle]]
 
* [[Archivo:A_flecha_x.gif|middle]]
 
* [[Archivo:A_flecha_xi.gif|middle]]
 
* [[Archivo:A_flecha_xi.gif|middle]]
 
+
 
donde ''A'' y ''B'' son elementos no terminales de ''N'', ''x'' es un símbolo del alfabeto ''T'' y [[Archivo:Xi.gif|middle]] es la [[cadena vacía]].
 
donde ''A'' y ''B'' son elementos no terminales de ''N'', ''x'' es un símbolo del alfabeto ''T'' y [[Archivo:Xi.gif|middle]] es la [[cadena vacía]].
 
+
===Gramática regular izquierda (GRI).===
+
===Gramática regular izquierda (GRI)===
Sea una gramática ''G=<N,T,P,S>'' se dice que la misma es '''gramática regular izquierda (GRI)''' si todas las producciones en ''P'' tienen una de estas formas:
+
Sea una gramática ''G=<N,T,P,S>'' se dice que la misma es ''gramática regular izquierda (GRI)'' si todas las producciones en ''P'' tienen una de estas formas:
 
 
 
* [[Archivo:A_flecha_B_x.gif|middle]]  
 
* [[Archivo:A_flecha_B_x.gif|middle]]  
 
* [[Archivo:A_flecha_x.gif|middle]]
 
* [[Archivo:A_flecha_x.gif|middle]]
 
* [[Archivo:A_flecha_xi.gif|middle]]
 
* [[Archivo:A_flecha_xi.gif|middle]]
 
+
donde ''A'' y ''B'' son elementos no terminales de ''N'', ''x'' es un símbolo del alfabeto ''T'' y [[Archivo:Xi.gif|middle]] es la cadena vacía.
donde ''A'' y ''B'' son elementos no terminales de ''N'', ''x'' es un símbolo del alfabeto ''T'' y [[Archivo:Xi.gif|middle]] es la [[cadena vacía]].
+
===Gramática regular===
 
+
''G'' es una ''gramática regular'' si es GRD o GRI.
===Gramática regular.===
+
''G'' es una '''gramática regular''' ssi es GRD ó GRI.
+
==Ejemplos==
 
 
==Ejemplos.==
 
 
===Ejemplo 1.===
 
===Ejemplo 1.===
 
Demuestre que el lenguaje conformado por los nombres de [[variable|variables]] de [[PROLOG]] es un lenguaje regular.  
 
Demuestre que el lenguaje conformado por los nombres de [[variable|variables]] de [[PROLOG]] es un lenguaje regular.  
 
+
 
Primero debe recordarse que un nombre de variable PROLOG viene dada por la forma:  
 
Primero debe recordarse que un nombre de variable PROLOG viene dada por la forma:  
 
+
''Cualquier palabra que comience con una letra mayúscula seguida o no de combinaciones de letras, cifras o subrayados o que comience con al menos un subrayado seguido o no de cualquier secuencia de alfanuméricos o subrayados''.
''cualquier palabra que comience con una letra mayúscula seguida o no de combinaciones de letras, cifras o subrayados o que comience con al menos un subrayado seguido o no de cualquier secuencia de alfanuméricos o subrayados''.
+
 
+
Cada una de las siguientes construcciones son equivalentes en virtud de la definición dada antes:
Cada de las siguientes construcciones son equivalentes en virtud de la definición dada antes:
 
  
 
* Una gramática regular derecha ''<{S,F},{_;0...9;A...Z;a...z},P,S>''con las producciones ''P'' conformadas por:
 
* Una gramática regular derecha ''<{S,F},{_;0...9;A...Z;a...z},P,S>''con las producciones ''P'' conformadas por:
Línea 48: Línea 42:
 
** [[Archivo:F_flecha_vacia_o_letra_F_o_digito_F_o_subrayado_F.gif|middle]].
 
** [[Archivo:F_flecha_vacia_o_letra_F_o_digito_F_o_subrayado_F.gif|middle]].
 
* La [[expresión regular]] ''(_|(A|B|...|Z))(A|B|...|Z|a|b|...|z|_)*''.
 
* La [[expresión regular]] ''(_|(A|B|...|Z))(A|B|...|Z|a|b|...|z|_)*''.
* El siguiente [[autómata finito]] representado como [[diagrama de estados]] permite el reconocimiento de variables de PROLOG.
+
* El siguiente [[autómata finito]] representado como [[diagrama de estados]] permite el reconocimiento de variables de PROLOG.
 
** [[Archivo:Variable_PROLOG_diagrama_estados.gif|middle]]
 
** [[Archivo:Variable_PROLOG_diagrama_estados.gif|middle]]
 
 
o la definición de la [[función]] reconocedora hecha en [[Python]]:
 
o la definición de la [[función]] reconocedora hecha en [[Python]]:
 
 
<pre>
 
<pre>
 
def variablePROLOG(w):
 
def variablePROLOG(w):
        '''(str)-->bool. True si "w" es un nombre de variable correcto'''
+
''(str)-->bool. True si "w" es un nombre de variable correcto''
        if (w[0].isalpha and w[0]==w[0].upper()) or w[0]=='_':
+
if (w[0].isalpha and w[0]==w[0].upper()) or w[0]=='_':
                #El primer caracter es una mayuscula o un subrayado
+
#El primer carácter es una mayúscula o un subrayado
                w = w[1:] #Se quita el primer caracter
+
w = w[1:] #Se quita el primer carácter
                while w and (w[0].isalnum() or w[0]=='_'):
+
while w and (w[0].isalnum() or w[0]=='_'):
                        #Mientras queden caracteres en "w" y el primer caracter actual sea un alfanumerico o un subrayado, todo esta bien
+
#Mientras queden caracteres en "w" y el primer carácter actual sea un alfanumérico o un subrayado, todo está bien
                        w = w[1:] #Quitar el primer caracter
+
w = w[1:] #Quitar el primer carácter
                if w=='':
+
if w=='':
                        #Si ya no quedan elementos a revisar, es una variable PROLOG
+
#Si ya no quedan elementos a revisar, es una variable PROLOG
                        return True
+
return True
        return False
+
return False
 
</pre>
 
</pre>
 
+
En todos los casos se percibe la estrecha relación entre las gramáica regulares y las demás formalizaciones de lenguajes regulares.
+
En todos los casos se percibe la estrecha relación entre las gramáticas regulares y las demás formalizaciones de lenguajes regulares.
 
+
===Ejemplo 2.===
+
===Ejemplo 2===
En un acuario de [[Miami]] se entrenan las capacidades intelectuales de los [[Delfín|delfines]] en cautiverio y tiene especial importancia los resultados que tiene uno de los ejemplares quien ha aprendido a reconocer cantidades pares a partir de imagenes de peces, llegando a distinguir cuando hay un número par o no de peces en la imagen. Muestre que las imágenes de cantidad de peces pares es un lenguaje regular que puede percibir el delfín.
+
En un acuario de [[Miami]] se entrenan las capacidades intelectuales de los [[Delfín|delfines]] en cautiverio y tiene especial importancia los resultados que tiene uno de los ejemplares, quien ha aprendido a reconocer cantidades pares a partir de imágenes de peces, llegando a distinguir cuando hay un número par o no de peces en la imagen. Muestre que las imágenes de cantidad de peces pares es un lenguaje regular que puede percibir el delfín.
 
+
Se define a cada pez de las imágenes con la letra ''p'' minúscula y se ve que para las imagenes pares puede definirse las siguientes producciones ''P'' de una gramática regular ''<{I},{p},P,I>'':
+
Se define a cada pez de las imágenes con la letra ''p'' minúscula y se ve que para las imágenes pares pueden definirse las siguientes producciones ''P'' de una gramática regular ''<{I},{p},P,I>'':
 
+
 
* [[Archivo:I_flecha_pp_o_pp_I.gif|middle]]
 
* [[Archivo:I_flecha_pp_o_pp_I.gif|middle]]
 
+
 
Por ende, se trata de un LR.
 
Por ende, se trata de un LR.
 
+
===Ejemplo 3.===
+
===Ejemplo 3===
 
Defina una gramática regular que permita reconocer [[números naturales]].
 
Defina una gramática regular que permita reconocer [[números naturales]].
 
+
 
Primero, desde el punto de vista lexicográfico un número natural en base decimal es al menos un [[dígito]] entre 1 y 9, seguido o no de una secuencia de cifras decimales.
 
Primero, desde el punto de vista lexicográfico un número natural en base decimal es al menos un [[dígito]] entre 1 y 9, seguido o no de una secuencia de cifras decimales.
 
+
 
La gramática para representarlos podría ser:
 
La gramática para representarlos podría ser:
 
+
 
''Naturales=<{U,N}.{0,1,2,3,4,5,6,7,8,9},P,U>'' con el conjunto de producciones ''P'' dado por:
 
''Naturales=<{U,N}.{0,1,2,3,4,5,6,7,8,9},P,U>'' con el conjunto de producciones ''P'' dado por:
 
+
 
* [[Archivo:U_produccion_naturales.gif|middle]].
 
* [[Archivo:U_produccion_naturales.gif|middle]].
 
* [[Archivo:N_produccion_naturales.gif|middle]].
 
* [[Archivo:N_produccion_naturales.gif|middle]].
 
+
 
==Véase también.==
 
==Véase también.==
* [[Autómata finito]].
+
* [[Lenguaje regular]].
 
* [[Expresión regular]].
 
* [[Expresión regular]].
 
* [[Flex]].
 
* [[Flex]].
 
* [[Jerarquía de Chomsky]].
 
* [[Jerarquía de Chomsky]].
 
+
==Fuentes.==
+
==Fuentes==
# Tanembaum, A. Compilers: Principles, Tecniques, and Tools. Tomo 1. ACM Press. 5ta Edición.
+
*Tanembaum, A. Compilers: Principles, Tecniques, and Tools. Tomo 1. ACM Press. 5ta. edición.
# Conferencias de la Asignatura "Compilación 1" del [[Departamento de Ciencias de la Computación de la Universidad de Oriente|Departamento de Ciencias de la Computación]] de la [[Universidad de Oriente]]. [[Santiago de Cuba]], [[2000]].
+
*Conferencias de la Asignatura "Compilación 1" del Departamento de Ciencias de la Computación de la [[Universidad de Oriente]] [[Santiago de Cuba]], [[2000]].
# [http://es.wikipedia.org/wiki/Lenguaje_regular Lenguajes regulares en Wikipedia].
+
*[http://es.wikipedia.org/wiki/Lenguaje_regular Lenguajes regulares en Wikipedia].
 
+
 
</div>
 
</div>
 
[[Categoría:Lingüística]][[Categoría:Matemáticas]][[Categoría:Informática]]
 
[[Categoría:Lingüística]][[Categoría:Matemáticas]][[Categoría:Informática]]

Revisión del 18:59 29 feb 2012

Gramática regular
Información sobre la plantilla
Jerarquia Chomsky A.gif
Concepto:Gramática que permite la definición de lenguajes regulares o de tipo 3.

Gramática regular. En Lingüística, Matemáticas e Informática y en la jerarquía de Chomsky se refiere a las gramáticas que definen a los lenguajes de tipo 3 o lenguajes regulares. Se dividen en dos tipos fundamentales según la forma de sus producciones:

  • Gramática regular derecha.
  • Gramática regular izquierda.

Dependiendo de si la recursión de los símbolos no terminales se produce a la derecha o la izquierda, respectivamente.

Definiciones

Se define una gramática formal G como la cuarteta <N,T,P,S> donde N es el conjunto de símbolos no terminales, S es un símbolo de N que identifica el símbolo inicial o de partida, T es el alfabeto o conjunto de símbolos terminales y P es el conjunto de reglas de la forma Alfa flecha beta.gif donde Alfa beta pertenecen clausura N union T.gif y Alfa.gif contiene al menos un no terminal de N.

Gramática regular derecha (GRD)

Sea una gramática G=<N,T,P,S> se dice que la misma es gramática regular derecha (GRD) si todas sus producciones tienen una de estas formas:

  • A flecha x B.gif
  • A flecha x.gif
  • A flecha xi.gif

donde A y B son elementos no terminales de N, x es un símbolo del alfabeto T y Xi.gif es la cadena vacía.

Gramática regular izquierda (GRI)

Sea una gramática G=<N,T,P,S> se dice que la misma es gramática regular izquierda (GRI) si todas las producciones en P tienen una de estas formas:

  • A flecha B x.gif
  • A flecha x.gif
  • A flecha xi.gif

donde A y B son elementos no terminales de N, x es un símbolo del alfabeto T y Xi.gif es la cadena vacía.

Gramática regular

G es una gramática regular si es GRD o GRI.

Ejemplos

Ejemplo 1.

Demuestre que el lenguaje conformado por los nombres de variables de PROLOG es un lenguaje regular.

Primero debe recordarse que un nombre de variable PROLOG viene dada por la forma: Cualquier palabra que comience con una letra mayúscula seguida o no de combinaciones de letras, cifras o subrayados o que comience con al menos un subrayado seguido o no de cualquier secuencia de alfanuméricos o subrayados.

Cada una de las siguientes construcciones son equivalentes en virtud de la definición dada antes:

  • Una gramática regular derecha <{S,F},{_;0...9;A...Z;a...z},P,S>con las producciones P conformadas por:
    • S flecha mayuscula F o subrayado F.gif.
    • F flecha vacia o letra F o digito F o subrayado F.gif.
  • La expresión regular (_|(A|B|...|Z))(A|B|...|Z|a|b|...|z|_)*.
  • El siguiente autómata finito representado como diagrama de estados permite el reconocimiento de variables de PROLOG.
    • Variable PROLOG diagrama estados.gif

o la definición de la función reconocedora hecha en Python:

def variablePROLOG(w):
''(str)-->bool. True si "w" es un nombre de variable correcto''
if (w[0].isalpha and w[0]==w[0].upper()) or w[0]=='_':
#El primer carácter es una mayúscula o un subrayado
w = w[1:] #Se quita el primer carácter
while w and (w[0].isalnum() or w[0]=='_'):
#Mientras queden caracteres en "w" y el primer carácter actual sea un alfanumérico o un subrayado, todo está bien
w = w[1:] #Quitar el primer carácter
if w=='':
#Si ya no quedan elementos a revisar, es una variable PROLOG
return True
return False

En todos los casos se percibe la estrecha relación entre las gramáticas regulares y las demás formalizaciones de lenguajes regulares.

Ejemplo 2

En un acuario de Miami se entrenan las capacidades intelectuales de los delfines en cautiverio y tiene especial importancia los resultados que tiene uno de los ejemplares, quien ha aprendido a reconocer cantidades pares a partir de imágenes de peces, llegando a distinguir cuando hay un número par o no de peces en la imagen. Muestre que las imágenes de cantidad de peces pares es un lenguaje regular que puede percibir el delfín.

Se define a cada pez de las imágenes con la letra p minúscula y se ve que para las imágenes pares pueden definirse las siguientes producciones P de una gramática regular <{I},{p},P,I>:

  • I flecha pp o pp I.gif

Por ende, se trata de un LR.

Ejemplo 3

Defina una gramática regular que permita reconocer números naturales.

Primero, desde el punto de vista lexicográfico un número natural en base decimal es al menos un dígito entre 1 y 9, seguido o no de una secuencia de cifras decimales.

La gramática para representarlos podría ser:

Naturales=<{U,N}.{0,1,2,3,4,5,6,7,8,9},P,U> con el conjunto de producciones P dado por:

  • U produccion naturales.gif.
  • N produccion naturales.gif.

Véase también.

Fuentes