Outros responderam "Não" com exemplos de idiomas. Eu pensei que poderia estender adicionando um exemplo de como adicionar exceções a um idioma sem nunca envolver OOP.
Farei isso no caso da DSKL (Declarative Sequential Kernel Language) da OZ , uma linguagem bem adequada para assuntos acadêmicos como este. O DSKL (ou DKL) pode ser visto aqui (resultado da pesquisa aleatória), a parte Declarações e Valores. A definição exata não é importante, além de ser uma linguagem muito simples, sem variáveis modificáveis (elas são declaradas e posteriormente vinculadas) e nenhuma OOP incorporada.
OOP não pode nem ser adicionado como uma abstração linguística a essa linguagem do kernel. Adicionando nomes exclusivos ao idioma do kernel (NewName) e usando o escopo local, o encapsulamento pode ser alcançado. Ou adicionando um estado mutável à linguagem do kernel (NewCell) e usando o escopo local OOP adequado com encapsulamento pode ser alcançado. Mas não pode ser alcançado apenas com a linguagem do kernel especificada.
Se adicionarmos exceções ao idioma do kernel, teremos um idioma sem suporte a OOP, mas teremos exceções. Deixe-me mostrar como:
Definindo uma máquina abstrata com uma pilha e um armazenamento, podemos definir o que cada declaração em nossa linguagem deve fazer (a semântica da declaração). Por exemplo, skip
na pilha não deve fazer nada, A = 3
na pilha deve vincular (/ unificar) A a (/ com) 3.
Começamos adicionando a sintaxe de como nossas exceções devem ser definidas. Fazemos isso adicionando mais duas cláusulas à <statement>
DKL.
<statement> ::== ... (old stuff)
| try <statement> catch <id> then <statement> end
| raise <id> end
Aqui está o try / catch conhecido e uma maneira de gerar / lançar exceções.
Definimos suas semânticas pela maneira como elas devem funcionar na máquina abstrata:
Tente
A declaração semântica é: (try <statement1> catch <id> then <statement2> end)
Faça:
- Empurre para a pilha a instrução semântica
(catch <id> then <statement2> end)
- Empurre para a pilha a instrução semântica
(<statement1>)
Observe que a instrução 1 estará no topo da pilha e tentada executada primeiro.
Aumentar
A declaração semântica é (raise <id> end)
:
- Se nada mais estiver na pilha, pare e relate uma exceção não capturada.
- Senão, pop a primeira declaração semântica da pilha. Se não for uma declaração de captura, vá para a etapa 1.
- Temos uma pegadinha, no formulário
(catch <id> then <statement> end)
Empurre (<statement>)
para a pilha.
Catch
Se virmos uma instrução catch durante a execução normal, isso significa que tudo o que havia dentro foi executado sem gerar exceções até esse nível. Assim, apenas colocamos catch
a pilha e não fazemos nada.
QED, temos um idioma com exceções e sem possibilidade de POO.
Eu removi a parte do ambiente da máquina abstrata para simplificá-la.