Gramática regular

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

En informática teórica y teoría del lenguaje formal, una gramática regular es una gramática que es regular por la derecha o regular por la izquierda. Si bien su definición exacta varía de un libro de texto a otro, todos requieren que

  • todas las reglas de producción tienen en la mayoría de un símbolo no final;
  • ese símbolo es siempre al final o siempre al comienzo del lado derecho de la regla.

Toda gramática regular describe un lenguaje regular.

Gramáticas estrictamente regulares

Una gramática regular derecha (también llamada gramática lineal derecha) es una gramática formal (N, Σ, P, S) en el que todas las reglas de producción en P son de una de las siguientes formas:

  1. Aa
  2. AaB
  3. A → ε

donde A, B, SN son símbolos no terminales, a< /i> ∈ Σ es un símbolo terminal, y ε denota la cadena vacía, es decir, la cadena de longitud 0. S se denomina símbolo de inicio.

En una gramática regular por la izquierda, (también llamada gramática lineal por la izquierda), todas las reglas obedecen a las formas

  1. Aa
  2. ABa
  3. A → ε

El lenguaje descrito por una gramática dada es el conjunto de todas las cadenas que contienen solo símbolos terminales y pueden derivarse del símbolo de inicio mediante la aplicación repetida de reglas de producción.

Las reglas de ambos tipos no deben mezclarse; por ejemplo, la gramática con el conjunto de reglas { SaT, TSb, S→ε } no es regular, y describe el idioma { aibi: i }, que tampoco es regular.

Algunos libros de texto y artículos no permiten reglas de producción vacías y asumen que la cadena vacía no está presente en los idiomas.

Gramáticas regulares extendidas

Y la gramática derecha-regular extendida es aquella en la que todas las reglas obedecen a una de

  1. Aw, donde A es un no-terminal en N y w está en una cadena (posiblemente vacía) de terminales*
  2. AwB, donde A y B están dentro N y w está en la*.

Algunos autores llaman a este tipo de gramática una gramática regular por la derecha (o gramática lineal por la derecha) y el tipo anterior una gramática estrictamente regular por la derecha< /i> (o gramática estrictamente lineal a la derecha).

Una gramática regular izquierda extendida es aquella en la que todas las reglas obedecen a una de

  1. Aw, donde A es un no-terminal en N y w está en la*
  2. ABw, donde A y B están dentro N y w está en la*.

Ejemplos

Un ejemplo de gramática regular derecha G con N = {S, A}, Σ = {a, b, c}, P< /i> consta de las siguientes reglas

S → aS
S → bA
A → ε
A → cA

y S es el símbolo de inicio. Esta gramática describe el mismo lenguaje que la expresión regular a*bc*, a saber. el conjunto de todas las cadenas que consta arbitrariamente de muchas "a"s, seguidas de una única "b", seguida de arbitrariamente muchos "c"s.

Una gramática regular derecha extendida algo más larga pero más explícita G para la misma expresión regular está dada por N = {S, A, B, C}, Σ = {a, b, c}, donde P consta de las siguientes reglas:

S → A
A → aA
A → B
B → bC
C → ε
C → cC

... donde cada letra mayúscula corresponde a frases que comienzan en la siguiente posición en la expresión regular.

Como ejemplo del área de los lenguajes de programación, el conjunto de todas las cadenas que denotan un número de punto flotante se puede describir mediante una gramática regular derecha extendida G con N = {S, A,B,C,D,E,F}, Σ = {0,1,2,3,4,5,6,7,8,9,+,-,.,e}, donde S es el símbolo de inicio y P consta de las siguientes reglas:

S → +AA → 0AB → 0CC → 0CD → +EE → 0FF → 0F
S → -AA → 1AB → 1CC → 1CD → -EE → 1FF → 1F
S → AA → 2AB → 2CC → 2CD → EE → 2FF → 2F
A → 3AB → 3CC → 3CE → 3FF → 3F
A → 4AB → 4CC → 4CE → 4FF → 4F
A → 5AB → 5CC → 5CE → 5FF → 5F
A → 6AB → 6CC → 6CE → 6FF → 6F
A → 7AB → 7CC → 7CE → 7FF → 7F
A → 8AB → 8CC → 8CE → 8FF → 8F
A → 9AB → 9CC → 9CE → 9FF → 9F
A →.BC → eDF → ε
A → BC → ε

Poder expresivo

Existe una correspondencia biunívoca directa entre las reglas de una gramática (estrictamente) regular correcta y las de un autómata finito no determinista, de modo que la gramática genera exactamente el lenguaje que acepta el autómata. Por tanto, las gramáticas regulares correctas generan exactamente todos los lenguajes regulares. Las gramáticas regulares de izquierda describen los reversos de todos esos lenguajes, es decir, exactamente también los lenguajes regulares.

Toda gramática regular derecha estricta es regular derecha extendida, mientras que toda gramática regular derecha extendida puede volverse estricta insertando nuevos no terminales, de modo que el resultado genere el mismo idioma; por lo tanto, las gramáticas regulares correctas extendidas también generan los lenguajes regulares. Análogamente, también lo hacen las gramáticas extendidas de izquierda regular.

Si no se permiten producciones vacías, solo se pueden generar todos los idiomas regulares que no incluyen la cadena vacía.

Mientras que las gramáticas regulares solo pueden describir lenguajes regulares, lo contrario no es cierto: los lenguajes regulares también pueden ser descritos por gramáticas no regulares.

Mezcla de reglas izquierda-regular y derecha-regular

Si se permite la combinación de reglas regulares izquierda y derecha, todavía tenemos una gramática lineal, pero no necesariamente regular. Es más, tal gramática no necesita generar un lenguaje regular: todas las gramáticas lineales pueden adoptar fácilmente esta forma y, por lo tanto, tales gramáticas pueden generar exactamente todos los lenguajes lineales, incluidos los no regulares.

Por ejemplo, la gramática G con N = {S, A}, Σ = {a, b}, P con comienzo símbolo S y reglas

S → aA
A → Sb
S → ε

genera , el lenguaje lineal paradigmático no regular.

Contenido relacionado

Pascal (lenguaje de programación)

Estándar de Internet

Sistema de archivos jerárquico

Más resultados...
Tamaño del texto:
  • Copiar
  • Editar
  • Resumir
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save