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 |
| − | + | |nombre=Gramática regular | |
| − | + | |imagen=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 [[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 | + | 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 | + | ===Gramática regular izquierda (GRI)=== |
| − | Sea una gramática ''G=<N,T,P,S>'' se dice que la misma es | + | 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 | + | ===Gramática regular=== |
| − | + | ''G'' es una ''gramática regular'' si es GRD o GRI. | |
| − | ===Gramática regular | + | |
| − | ''G'' es una | + | ==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: | ||
| − | + | *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]]. | |
| − | + | **[[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 | ||
| − | ** [[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'' | |
| − | + | 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 | ||
</pre> | </pre> | ||
| − | + | ||
| − | En todos los casos se percibe la estrecha relación entre las | + | 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 | + | 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 | + | 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: | |
| − | + | ||
| − | * [[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 == |
| − | * [[ | + | *[[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. | |
| − | + | *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]. | |
| − | + | ||
</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. 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.
Sumario
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
donde
y
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:
donde A y B son elementos no terminales de N, x es un símbolo del alfabeto T y
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:
donde A y B son elementos no terminales de N, x es un símbolo del alfabeto T y
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:
- 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.
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>:
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:
Véase también
Fuentes
- 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 Santiago de Cuba, 2000.
- Lenguajes regulares en Wikipedia.

