PL/0 es un lenguaje de programación diseñado específicamente para fines educativos. Creado por Niklaus Wirth en 1976 como parte de su libro 'Algorithms + Data Structures = Programs', PL/0 se asemeja a Pascal pero es significativamente más simple. Su principal objetivo no es ser un lenguaje para aplicaciones del mundo real, sino servir como un ejemplo claro y conciso de cómo construir un compilador. Esto se logra limitando intencionalmente sus características: no soporta números reales, tiene un conjunto muy reducido de operaciones aritméticas y carece de estructuras de control de flujo complejas más allá de 'if' y 'while'.
La simplicidad de PL/0 se manifiesta en su necesidad de declarar explícitamente todas las constantes y variables. Solo admite enteros como tipo de dato y un conjunto limitado de operadores. Una característica peculiar es una función que determina si un número es impar. En su implementación original, el lenguaje carecía de rutinas de entrada y salida, lo que obligaba a la salida de los valores de las variables durante la ejecución del programa, mostrando su evolución en tiempo real. Las versiones modernas suelen incluir rutinas básicas de entrada y salida.
PL/0 utiliza estructuras de control de flujo 'if-then' y 'while-do', así como procedimientos definidos por el usuario que no aceptan parámetros. Su gramática, definida utilizando la notación EBNF (Extended Backus-Naur Form), es deliberadamente simple, lo que facilita a los estudiantes la creación de un analizador sintáctico descendente recursivo (recursive descent parser), una técnica fundamental en la construcción de compiladores. Esto lo convierte en una herramienta valiosa en cursos de compiladores en todo el mundo, donde los estudiantes a menudo lo expanden agregando características como 'REPEAT...UNTIL', paso de parámetros a procedimientos, y estructuras de datos más complejas como arreglos, cadenas y números de punto flotante.
Aunque PL/0 es limitado en su funcionalidad original, su valor reside en su capacidad para ilustrar los principios básicos de la construcción de compiladores. La simplicidad del lenguaje permite a los estudiantes concentrarse en la implementación del compilador en sí, en lugar de lidiar con la complejidad de un lenguaje de programación completo. En los últimos años, se han desarrollado implementaciones modernas que combinan PL/0 con conceptos de programación orientada a objetos y patrones de diseño, utilizando lenguajes de scripting como Python para facilitar la comprensión y modificación del código fuente del compilador. Finalmente, PL/0 fue reemplazado por Oberon-0 en las ediciones posteriores del libro de Wirth, reflejando una mayor complejidad en el diseño del lenguaje para fines educativos.
