⚙️ Turing

Lenguajes, gramáticas y máquinas · ¿tiene solución su problema?
Teoría de la computación, en la práctica

Si sabe describir su problema como un lenguaje, le decimos qué máquina lo resuelve.

Todo problema de «reconocer» algo —una cifra válida, una palabra, una frase bien construida, un patrón— puede verse como un lenguaje: un conjunto de palabras formadas con un alfabeto y unas reglas. Según la memoria que exijan esas reglas, la solución la da un autómata finito, un autómata de pila o una máquina de Turing… o no existe.

Demostración en vivo · palíndromosq0
Leyendo…

¿Qué computamos?

🔢 Cifras

Sumar 1 en binario, sumar en unario, pasar de binario a unario, múltiplos de 3.

🔤 Letras

Palíndromos (ABBA), aⁿbⁿ, aⁿbⁿcⁿ, ordenar letras, copiar una palabra.

🧩 Palabras y símbolos

Paréntesis equilibrados, expresiones aritméticas con su precedencia, identificación por ejemplos.

💬 Frases

Gramática del español (sujeto + predicado) con árbol sintáctico y reglas de transformación de frases.

La escalera de las máquinas (jerarquía de Chomsky)

Si su problema necesita…LenguajeMáquina¿Solución?Ejemplo
Recordar solo una cantidad fija de informaciónRegular · tipo 3Autómata finitoSí, siempre y en tiempo lineal¿Termina en «ción»? ¿Es múltiplo de 3 en binario?
Emparejar cosas anidadas o en espejoLibre de contexto · tipo 2Autómata de pilaSí, siempreParéntesis, ABBA, aⁿbⁿ, frases
Comparar tres o más partes, o copias exactasSensible al contexto · tipo 1Turing con cinta acotadaSí, aunque puede ser costosoaⁿbⁿcⁿ, ww
Memoria y pasos ilimitadosRecursivamente enumerable · tipo 0Máquina de TuringSi hay algoritmo que termine; si no, solo «semidecidible»Calcular, transformar, buscar
Predecir el comportamiento de cualquier programaIndecidibleNingunaNo (Turing, 1936)¿Terminará este programa?

Cómo traducir su problema a un lenguaje

Elemento del lenguajePregunta para su problemaEjemplo: «¿es un palíndromo?»
Alfabeto Σ¿Con qué símbolos trabaja? (cifras, letras, palabras…){A, B}
Palabras¿Qué es una entrada? ¿Cuáles son válidas y cuáles no?ABBA ✔ · ABAB ✘
Reglas¿Qué condición o transformación define lo válido?S → A S A | B S B | A | B | ε
Memoria¿Cuánto hay que recordar mientras se lee?La primera mitad entera → hace falta una pila
Estados de aceptación («de satisfacción»)¿Cuándo damos la entrada por buena?Cuando se han tachado todos los pares sin discrepancias
Paso 1 · Características

Diagnóstico de su problema

Marque lo que necesita su problema. Si no marca nada, basta con memoria fija (lenguaje regular).

Paso 2 · Ejemplos

Identificador de lenguajes por ejemplos

Escriba palabras que su problema debe aceptar y otras que debe rechazar (una por línea; ε = palabra vacía). Las compararemos con un catálogo de lenguajes conocidos y le diremos cuáles encajan, de la máquina más sencilla a la más potente.

Los ejemplos nunca demuestran nada: solo descartan. Cuantos más y más variados, más fiable el resultado.

Estado—0 pasoslee —
Pulse «Paso» o «Ejecutar».

Programa

Formato: estado, lee -> nuevo, escribe, mueve con mueve = R (derecha) · L (izquierda) · S (quieto). Blanco: _. Si no hay transición, la máquina se detiene: acepta si está en un estado de aceptación y, si no, rechaza.

Tabla de transiciones δ

La fila resaltada es la transición que se acaba de aplicar.

Diagrama de estados

Doble círculo: aceptación · flecha naranja: estado inicial · etiquetas «lee/escribe movimiento» · el estado actual se resalta mientras la máquina funciona.

📦 Exportar y probar

Lleve esta máquina a su proyecto: código autónomo con la misma lógica del simulador.

Funciona en el navegador y en Node.js (sin dependencias).

PHP 7.4 o superior con mbstring. Se puede incluir con require o ejecutar desde la línea de órdenes.

Genera todas las entradas posibles hasta la longitud indicada, las ejecuta y guarda el resultado esperado: una batería lista para pruebas automáticas.

Una regla por línea: A -> x B y | z | ε. Separe los símbolos con espacios. Los no terminales son los que aparecen a la izquierda; el primero es el inicial.

📦 Exportar y probar

Reconocedor autónomo (algoritmo de Earley) con su gramática incrustada.

Funciona en el navegador y en Node.js (sin dependencias).

PHP 7.4 o superior con mbstring. Se puede incluir con require o ejecutar desde la línea de órdenes.

En modo caracteres se prueban todas las combinaciones del alfabeto; en modo palabras, frases generadas por la gramática y variaciones (palabras quitadas, cambiadas o desordenadas).

patrón -> reemplazo sustituye la primera aparición; patrón ->. reemplazo sustituye y termina. ε = vacío. Use comillas para conservar espacios: "mi " -> "tu ". En cada paso se aplica la primera regla de la lista que encaje (algoritmo de Markov).

Más allá del aula

Usos profesionales

Pensar un problema como un lenguaje sirve para decidir qué tipo de solución necesita antes de programarla. Además, de esta web puede llevarse productos concretos:

💻 Código JS y PHP

De cada máquina y de cada gramática, sin dependencias.

📐 Diagramas SVG

Diagrama de estados y árbol de derivación para la documentación.

🧪 Casos de prueba

Baterías en CSV y JSON con el resultado esperado.

🔗 Enlaces

Comparta una máquina con un enlace que la abre ya cargada.

La herramienta trabaja a escala de diseño y prueba (entradas cortas, gramáticas pequeñas). Para producción, el código exportado es un buen punto de partida; en proyectos grandes se usan generadores de analizadores (ANTLR, Bison) o verificadores de modelos.