Diğerleri de “Hayır” ı dil örnekleri ile doğru olarak cevapladılar Herhangi bir OOP içermeyen bir dile istisnalar eklemek için bir örnek ekleyerek uzayabileceğimi düşündüm.
Ben DSKL (Bildirimsel Sıralı Çekirdek Dili) durumunda bu yapacak OZ , iyi böyle akademi şeyler için uygun bir dilde. DSKL (veya DKL) burada (rastgele arama sonucu), Tablolar ve Değerler bölümünü görebilir. Kesin tanım, değiştirilemez değişkenleri olmayan (ilan edilmiş ve sonradan bağlanmış) ve yerleşik bir OOP içermeyen çok basit bir dil olması dışında önemli değildir.
OOP, bu çekirdek diline dilsel bir soyutlama olarak bile eklenemez. Çekirdek diline benzersiz adlar ekleyerek (NewName) ve yerel kapsamı kullanarak kapsülleme elde edilebilir. Veya çekirdek diline (NewCell) değişken bir durum ekleyerek ve yerel kapsama kullanarak kapsülleme ile uygun OOP elde edilebilir. Ama olamaz yalnız belirtilen çekirdek dili ile sağlanabilir.
O zaman çekirdek diline istisnalar eklersek, OOP desteği olmayan ancak istisnalar dışında bir dile sahip oluruz. Nasıl olduğunu göstereyim:
Bir yığın ve depolama ile soyut bir makine tanımlayarak, dilimizdeki her bir ifadenin ne yapması gerektiğini tanımlayabiliriz ( deyimin anlamını ). Örneğin skip
, yığında hiçbir şey yapmamalı A = 3
, yığında ise (/ birleştirmek) A'dan (/ ile) 3'e kadar bağlanmalıdır.
İstisnalarımızın nasıl tanımlanması gerektiğinin sözdizimini ekleyerek başlarız . Bunu <statement>
DKL’ye iki cümle daha ekleyerek yapıyoruz .
<statement> ::== ... (old stuff)
| try <statement> catch <id> then <statement> end
| raise <id> end
İşte bilinen deneme / yakalama ve istisnaları artırmanın / atmanın bir yolu.
Anlambiliklerini soyut makinede nasıl çalışması gerektiği ile tanımlıyoruz :
Anlamsal deyimi deneyin : (try <statement1> catch <id> then <statement2> end)
Yap:
- Semantik deyimi yığına itin
(catch <id> then <statement2> end)
- Semantik deyimi yığına itin
(<statement1>)
1. ifadenin yığının üstünde olacağını ve önce çalıştırılmayı denediğini unutmayın.
Anlamsal ifade: Yükselt(raise <id> end)
:
- Yığında başka bir şey yoksa, durdurulan ve yakalanmamış bir istisnayı rapor edin.
- Aksi halde, ilk anlamsal deyimi yığından patlat. Bu bir catch ifadesi değilse, 1. adıma gidin.
- Yığın üzerine
(catch <id> then <statement> end)
basma formunda bir yakaladık (<statement>)
.
Yakalama
Normal uygulama sırasında bir yakalama ifadesi görürsek, bu, içeriye ne olursa olsun, bu seviyeye kadar istisnalar olmadan yürütülen anlamına gelir. Böylece sadece catch
yığını açıp hiçbir şey yapmıyoruz.
QED, istisnalar dışında bir dilimiz var ve OOP olasılığımız yok.
Daha basit hale getirmek için ortam kısmını soyut makineden çıkardım.