Está en la página 1de 6

LENGUAJES FORMALES Y COMPUTABILIDAD

MODULO 1.1. – Introducción a los Lenguajes Formales


1. Introducción

Toda comunicación implica la utilización de un lenguaje. Es posible distinguir dos tipos de lenguajes: los
naturales y los formales. Los lenguajes formales obedecen reglas estrictas, no evolucionan y se crean de
manera artificial con un fin específico. Los lenguajes naturales, en cambio, se generan de manera
espontánea, evolucionan con el tiempo y las reglas que rigen su estructura se van estableciendo cuando
el lenguaje ya existe

Bienvenidos al fascinante mundo de los lenguajes formales, un campo fundamental en la Informática.


Los lenguajes formales nos permiten describir, analizar y comprender la estructura y el
comportamiento de distintos sistemas, desde programas informáticos hasta lenguajes de
programación y modelos de computación.

No se deben confundir los lenguajes formales con el registro lingüístico formal (también llamado a
veces lenguaje formal), correspondiente al uso cuidadoso y correcto del lenguaje propio de ciertas
situaciones comunicativas, opuesto al registro informal, en el que se emplean frases y
expresiones coloquiales

Un lenguaje formal es un conjunto de cadenas o secuencias de símbolos provenientes de un alfabeto


definido artificialmente siguiendo reglas y estructuras específicas. Estos lenguajes se utilizan para
representar y describir patrones, datos, instrucciones o información de una manera precisa y formal,
generalmente en contextos lógicos, matemáticos, ingenieriles, computacionales o lingüísticos.

Ejemplos: algunos ejemplos del uso de lenguajes formales en tu vida cotidiana son:

Los Códigos de Barras en los productos que compramos representan


información de manera codificada. Siguen una estructura específica, donde cada
ancho de barra y espacio entre barras corresponde a un número o conjunto de
números para poder ser leídos por dispositivos de escaneo

La partitura musical es un ejemplo de lenguaje formal. Las notas, símbolos y la


disposición en el pentagrama siguen reglas fijas que representan sonido, ritmo y
otras características musicales de forma codificada.

Las señales de tráfico y las normas de conducción siguen un conjunto


específico de reglas y símbolos que constituyen un lenguaje formal para
comunicar acciones, restricciones y condiciones en las vías
LENGUAJES FORMALES Y COMPUTABILIDAD

En nuestro ámbito, los lenguajes formales tienen aplicaciones fundamentales en la definición de


lenguajes de programación, en el diseño de compiladores para procesar y analizar la estructura de
programas, en la validación y/o verificación de software, en el modelamiento de sistemas de control,
en el manejo de patrones en la Inteligencia Artificial, y en la verificación de circuitos digitales, entre
otros.

Ejemplos: algunos de los ejemplos del uso de lenguajes formales en la Informática son:

Protocolos de comunicación usados en internet, como el


lenguaje HTML, el protocolo de transferencia HTTP o el
protocolo de transferencia de archivos FTP, que usan una
estructura formal fija y predefinida para transmitir información
entre dispositivos de manera consistente,

La Manipulación de Cadenas de Caracteres: Mediante


lenguajes formales se definen patrones de búsqueda que
permiten encontrar y manipular cadenas de texto de manera
eficiente. Se utilizan en la validación de formularios web,
análisis léxico en compiladores, búsquedas avanzadas en
editores de texto, entre otros.

Los Lenguajes de Programación: como Python, Java, C++,


etc., se basan en estructuras formales bien definidas. Sus
sintaxis y semántica siguen reglas específicas, como las
definidas por gramáticas formales (veremos en breve este
concepto)

XML y JSON: Estos lenguajes se utilizan para estructurar y


representar datos de manera jerárquica y legible por
máquinas. Son fundamentales en la comunicación entre
aplicaciones y sistemas distribuidos

SQL: Es un lenguaje formal utilizado para manipular bases de


datos relacionales. Permite realizar consultas, actualizaciones,
inserciones y eliminaciones de datos de forma estructurada.

Las Redes de Petri: Son modelos matemáticos y gráficos que


representan sistemas concurrentes. Se usan en el diseño de
protocolos de comunicación, en la modelización de sistemas
distribuidos y en la verificación de protocolos de red.
LENGUAJES FORMALES Y COMPUTABILIDAD

¡A Practicar!: te invitamos a que realices la actividad del Foro de Discusión Grupal


correspondiente al Módulo 1

2. Tipos de Lenguajes Formales


Los lenguajes formales pueden clasificarse según diferentes criterios. El más relevante es la
expresividad del lenguaje, es decir, la capacidad que tiene un lenguaje L para para describir o
representar un conjunto específico de cadenas o estructuras. Cuanto más expresivo sea un lenguaje
formal, más variedad de cadenas o estructuras puede representar y más complejo es.

Conocer el tipo de un Lenguaje Formal ayuda a comprender su complejidad, cómo puede ser
descrito y reconocido, y cuáles son sus aplicaciones prácticas. Esto influye en varios aspectos del
diseño y la implementación de sistemas informáticos, desde la creación de lenguajes de
programación hasta el desarrollo de compiladores y la comprensión de la computabilidad de
problemas (posibilidad de resolverse mediante algoritmos).

Según su expresividad, los lenguajes se clasifican, como muestra la Figura 1, en:

Figura 1: clasificación de Lenguajes Formales (elaboración propia)


Lenguajes Regulares ⊂ Lenguajes Libres de Contexto ⊂ Lenguajes Sensibles
al Contexto ⊂ Lenguajes Recursivamente Enumerables

 Lenguajes Regulares: Estos lenguajes se caracterizan por su capacidad para describir patrones
simples y regulares dentro de secuencias de símbolo, como números, identificadores, o patrones
de texto que siguen una estructura predecible y repetitiva.
LENGUAJES FORMALES Y COMPUTABILIDAD

Definición: Son lenguajes descritos por expresiones regulares o gramáticas regulares. Algunas
expresiones regulares son más expresivas que otras; por ejemplo, una expresión regular que
puede reconocer cualquier cantidad de caracteres es más expresiva que otra que solo puede
reconocer un patrón específico

Características: Los lenguajes regulares son reconocidos por autómatas finitos, lo que los hace
útiles para modelar patrones simples o para implementar analizadores léxicos en compiladores.
Se usan para representar números enteros, identificadores en lenguajes de programación, o
palabras que cumplen ciertas reglas gramaticales simples.

Ejemplos: Algunos ejemplos de lenguajes regulares son:

Identificadores en lenguajes de programación: Los identificadores válidos en la mayoría de los


lenguajes de programación suelen seguir patrones simples, como comenzar con una letra seguida
opcionalmente por letras, dígitos o guiones bajos. Por ejemplo: variable, nombre_2, dato123.

Lenguaje de expresiones regulares simples: Las expresiones regulares básicas como ab*, que
representa todas las cadenas que comienzan con 'a' seguida por cero o más b's (a, ab, abb, etc.)
¨
Lenguaje de cadenas que contienen un patrón específico: Por ejemplo, el conjunto de cadenas
que contienen el patrón abc en cualquier lugar de la cadena (abca, babc, cabcd, etc.).
Otro ejemplo sería el lenguaje de números binarios pares, es decir el conjunto de todos los números
binarios que terminan en cero (0, 10, 110, etc.).

Lenguaje de cadenas que siguen un patrón específico de repetición: Por ejemplo, el conjunto de
todas las cadenas que consisten en bloques repetidos de dos caracteres (aa, bb, cc, etc.).

 Lenguajes Libres de Contexto (LLC): Estos lenguajes son más expresivos que los lenguajes
regulares y pueden representar estructuras más complejas, como construcciones anidadas,
jerarquías y agrupaciones.

Definición: Estos lenguajes se describen utilizando gramáticas libres de contexto.

Características: Los LLC son reconocidos por autómatas de pila, lo que los hace adecuados para
describir la sintaxis de lenguajes de programación, para la modelización de estructuras y patrones
que tienen una forma más compleja y recursiva. En efecto, este tipo de lenguajes son los que
más desarrollo han tenido, debido a que son la base de la mayoría de los lenguajes de
programación que incluyan construcciones como sentencias condicionales, bucles y funciones.

Ejemplo: Algunos ejemplos de lenguajes libres de contexto son:

- Lenguaje de paréntesis anidados y corchetes correctamente emparejados: Este


lenguaje incluye secuencias correctamente emparejadas de paréntesis y corchetes. Por
ejemplo: ([{}]), [(()){}].
LENGUAJES FORMALES Y COMPUTABILIDAD

Lenguaje de expresiones aritméticas balanceadas: Este lenguaje incluye todas las expresiones
aritméticas bien formadas donde los paréntesis están correctamente equilibrados. Por ejemplo: ((2
+ 3) * (5 - 1)).

Lenguaje de sentencias if-else anidadas: Un conjunto de sentencias if-else correctamente


anidadas

 Lenguajes Sensibles al Contexto: A pesar de ser más expresivos que los lenguajes libres de
contexto, los lenguajes sensibles al contexto aún tienen limitaciones y no pueden representar
todos los lenguajes recursivamente enumerables.

Definición: Estos lenguajes se describen utilizando gramáticas sensibles al contexto. Son


herramientas importantes en la teoría de lenguajes formales y en el análisis de la estructura
(sintaxis y semántica) de lenguajes utilizados en programación y otros campos.

Características: Los lenguajes sensibles al contexto tienen reglas más flexibles que los LLC, lo
que les permite expresar estructuras con restricciones más complejas. Son más expresivos ya que
las reglas de producción no son completamente independientes del contexto, sino que pueden
tomar en cuenta la estructura circundante de la palabra.

Ejemplos: Algunos ejemplos de lenguajes sensibles al contexto son:

Lenguaje del conjunto de todas las cadenas de la forma {an bn cn | n ≥ 1}

Lenguaje de palíndromos de longitud par: Este conjunto de cadenas consiste en palíndromos


(cadenas que se leen igual de izquierda a derecha y de derecha a izquierda) con una longitud par. Por
ejemplo: {wwR ∣ w ∈ {a,b}∗}, donde wR representa la cadena w al revés

Lenguaje {ww ∣ w ∈ {a,b}∗} Este lenguaje está formado por cadenas repetidas, donde una cadena
es igual a su propia repetición. Por ejemplo, aa, bb, aaaa, bbbb, etc.

 Lenguajes Recursivamente Enumerables: también conocidos como lenguajes recursivos


parcialmente decidibles, engloban tanto a los lenguajes recursivos (o decidibles) como a los
lenguajes no recursivos (o indecidibles). Los lenguajes recursivamente enumerables pueden
describir conjuntos de cadenas para los cuales existe un proceso algorítmico que puede generar
todas las cadenas válidas en el lenguaje, pero no necesariamente puede determinar si una cadena
arbitraria pertenece o no al lenguaje en un tiempo finito.

Definición: Son lenguajes reconocidos por Máquinas Universales de Turing que, cuando se le da
una cadena perteneciente al lenguaje, eventualmente se detiene y acepta esa cadena. Sin
embargo, si la cadena no pertenece al lenguaje, la máquina podría no detenerse o podría entrar
en un bucle infinito.

Características: Son los lenguajes más generales y complejos en términos de capacidad


computacional. Pueden ser generados por un programa de computadora que eventualmente
LENGUAJES FORMALES Y COMPUTABILIDAD

puede enumerar todas las cadenas válidas del lenguaje, pero no necesariamente detenerse en el
proceso.

Ejemplo:

Lenguaje de palabras reservadas y sintaxis válida en un lenguaje de programación: Este


conjunto comprende todas las combinaciones sintácticamente válidas y palabras reservadas en un
lenguaje de programación específico. A pesar de que la verificación de la sintaxis puede ser compleja,
se pueden enumerar todas las combinaciones sintácticamente correctas en este lenguaje, lo que lo
hace recursivamente enumerable.

3. Elementos de un Lenguaje Formal


Para definir un lenguaje formal, se requiere:

 Un alfabeto: Es un conjunto finito de símbolos y/o caracteres que constituyen los elementos
básicos del lenguaje.

Ejemplo: el alfabeto {0, 1} se usa comúnmente en lenguajes binarios.

 Palabras o Cadenas: Son secuencias de símbolos tomados del alfabeto del lenguaje. Pueden ser
de longitud variable y contener cualquier combinación de símbolos del alfabeto.

 Reglas o gramática formal: definen de manera unívoca cómo se pueden combinar los símbolos
del alfabeto para formar lo que se denominan palabras válidas o cadenas válidas en el lenguaje,
esto es, de todas las posibles palabras (de todas las posibles combinaciones de símbolos),
aquellas que pertenecen al lenguaje.

Ejemplo: los elementos del lenguaje L= {00,11,01,10} del sistema binario son

 Los símbolos 0 y 1
 El alfabeto {0, 1}
 La regla p= xx con x|x x=0 o x=1

¡A PRACTICAR! Identifica los elementos de los siguientes lenguajes


formales:
 L1: números de dos cifras que terminan en 6
 L2: fases de la luna
 L3: serie de los números naturales pares
 L4: números capicúa entre 1 y 200000

También podría gustarte