Diferencia entre revisiones de «Gramática regular»

(Véase también.)
 
m (Texto reemplazado: «<div align="justify">» por «»)
 
(No se muestran 8 ediciones intermedias de 6 usuarios)
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
<div align="justify">
+
|nombre=Gramática regular
'''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]].
+
|imagen=Jerarquia_Chomsky_A.gif
 
+
|concepto=Gramática que permite la definición de lenguajes regulares o de tipo 3.}}
Se dividen en dos tipos fundamentales según la forma de sus producciones.
 
  
 +
'''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:
 
* 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 derecha (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==
 
+
===Ejemplo 1===
==Ejemplos.==
 
===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''.
 +
 +
Cada una de las siguientes construcciones son equivalentes en virtud de la definición dada antes:
  
''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''.
+
*Una gramática regular derecha ''<{S,F},{_;0...9;A...Z;a...z},P,S>''con las producciones ''P'' conformadas por:
 
+
**[[Archivo:S_flecha_mayuscula_F_o_subrayado_F.gif|middle]].
Cada de las siguientes construcciones son equivalentes en virtud de la definición dada antes:
+
**[[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|_)*''.
* Una gramática regular derecha ''<{S,F},{_;0...9;A...Z;a...z},P,S>''con las producciones ''P'' conformadas por:
+
*El siguiente [[autómata]] finito representado como [[Diagrama de Estados|diagrama de estados]] permite el reconocimiento de variables de PROLOG.
** [[Archivo:S_flecha_mayuscula_F_o_subrayado_F.gif|middle]].
+
**[[Archivo:Variable_PROLOG_diagrama_estados.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|_)*''.
 
* El siguiente [[autómata finito]] representado como [[diagrama de estados]] permite el reconocimiento de variables de PROLOG.
 
** [[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
                        w = w[1:] #Quitar el primer caracter
+
o un subrayado, todo está bien
                if w=='':
+
w = w[1:] #Quitar el primer carácter
                        #Si ya no quedan elementos a revisar, es una variable PROLOG
+
if w=='':
                        return True
+
#Si ya no quedan elementos a revisar, es una variable PROLOG
        return False
+
return True
 +
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úmero natural|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]][[Category:Ciencias_informáticas]][[Categoría:Informática]]

última versión al 17:43 20 jun 2019

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