Otros han respondido correctamente "No" con ejemplos de idiomas. Pensé que podría extender agregando un ejemplo sobre cómo agregar excepciones a un idioma sin involucrar a OOP.
Lo haré en el caso del DSKL (lenguaje de núcleo secuencial declarativo) de OZ , un lenguaje muy adecuado para cosas académicas como esta. El DSKL (o DKL) se puede ver aquí (resultado de búsqueda aleatorio), la parte de declaraciones y valores. La definición exacta no es importante, aparte de ser un lenguaje muy simple sin variables modificables (se declaran y luego se vinculan), y sin OOP incorporado.
OOP ni siquiera se puede agregar como una abstracción lingüística a este lenguaje kernel. Al agregar nombres únicos al idioma del kernel (NewName) y usar el alcance local, se puede lograr la encapsulación. O agregando un estado mutable al lenguaje del núcleo (NewCell) y utilizando el alcance local, se puede lograr una OOP adecuada con encapsulación. Pero no se puede lograr solo con el lenguaje del núcleo especificado.
Si luego agregamos excepciones al idioma del kernel, tendremos un idioma sin soporte de OOP pero tendremos excepciones. Déjame mostrarte cómo:
Al definir una máquina abstracta con una pila y un almacenamiento, podemos definir qué debe hacer cada declaración en nuestro lenguaje (la semántica de la declaración). Por ejemplo, skip
en la pila no se debe hacer nada, A = 3
en la pila se debe unir (/ unificar) A a (/ con) 3.
Comenzamos agregando la sintaxis de cómo deberían definirse nuestras excepciones. Hacemos esto agregando otras dos cláusulas <statement>
en el DKL.
<statement> ::== ... (old stuff)
| try <statement> catch <id> then <statement> end
| raise <id> end
Aquí está el conocido try / catch, y una forma de aumentar / lanzar excepciones.
Definimos su semántica por cómo deberían funcionar en la máquina abstracta:
Probar
La declaración semántica es: (try <statement1> catch <id> then <statement2> end)
Hacer:
- Empuje sobre la pila la declaración semántica
(catch <id> then <statement2> end)
- Empuje sobre la pila la declaración semántica
(<statement1>)
Tenga en cuenta que la declaración 1 estará en la parte superior de la pila y se intentó ejecutar primero.
Elevar
La declaración semántica es: (raise <id> end)
Hacer:
- Si no hay nada más en la pila, deténgase e informe una excepción no detectada.
- De lo contrario, haga estallar la primera declaración semántica de la pila. Si no es una declaración catch, vaya al paso 1.
- Tenemos una trampa, en el formulario
(catch <id> then <statement> end)
Empuje (<statement>)
hacia la pila.
Captura
Si vemos una instrucción catch durante la ejecución normal, esto significa que todo lo que se ejecutó en el interior sin generar excepciones hasta este nivel. Por lo tanto, solo sacamos catch
la pila y no hacemos nada.
QED, tenemos un lenguaje con excepciones y sin posibilidad de OOP.
He eliminado la parte del entorno de la máquina abstracta para simplificarla.