Anlambilim nedir?


13

Birçok popüler dil var. Ancak, bilgisayar bilimcileri bize, bu dillerdeki programların davranışlarını kesinlikle ve açık bir şekilde program davranışına (örneğin kimliklerini kanıtlamaya) karşı koymak için, bunları başka, iyi anlaşılmış bir dile çevirmemiz gerektiğini söylüyor. Böyle bir dile "anlambilim" diyorlar. Yazarlar birçok anlambilimden birini önermektedir. Yapılarının anlamını ve dilinizi nasıl onların diline çevirebileceğinizi açıklarlar. Bunu yaptıktan sonra, herkes programınızı kesinlikle anlayacak, diyorlar.

İyi görünüyor, ama bir şey anlamıyorum. Bize ilkini anlamak için başka bir dil tanıdıklarını söylüyorlar mı? Neden orijinalinden daha iyi anlıyoruz? Neden bu anlambilim bundan daha iyidir? Neden C'nin anlambilimini tanımlamak için başka bir dil icat etmek yerine C'nin anlambilimini hemen öğrenmeyesiniz? Aynı şey sözdizimi için de geçerlidir. Sözdizimi ile ilgili neden aynı soruyu sormuyorum?

PS Yorumlarda, anlambilimin başka bir dil veya çeviriye dönüşmediğini duydum. Ancak VHDL için Biçimsel Semantik, bir şeyi sadece bir şekilde anlarsanız, onu anlamadığınızı ve bir dili başka bir (bilinen) dile çeviren bir mekanizmaya sahip olursak "anlamın anlamı" belirtilebileceğini söyler. Yani "anlambilim biçimsel sistemler arasında bir ilişkidir". Hennessy, Programlama Dillerinin Anlambilimi'nde, anlambilimin BNF veya Sözdizimi Diyagramı olarak sağlandığı zaman anlambilimin "anlam" programının resmi olarak işlenmesine izin verdiğini söylüyor. Dil değilse biçimsel sistem nedir?

PS2 Verilen HDL programının kapıların ara bağlantısına HW sentezinin semantik çıkarma işlemi olduğunu söyleyebilir miyim? Daha sonra (yüksek seviye) tanımlamayı anladığımız (düşük seviye) dile çeviriyoruz.


Ne tür diyagramlar demek istiyorsun? Anlambilimle çalışıyorum ama neredeyse hiç diyagram kullanmıyorum.
Dave Clarke

1
Anlambilime "dil" demezdim. Anlambilim dillerin anlamını tanımlar . Örneğin, ikili sayıların sözdizimi . Sadece semantik gerçek sayılar elde edilir; Bunun mümkün olan tek anlambilim olmadığını, ayrıca BCD, 2-tamamlayıcı ve daha birçok şey olduğunu unutmayın. {0,1}+value(w)=i=1|w|wi2ni+1
Raphael

@ Affedersiniz, sorumu Atama Karar Diyagramları izlenimi ile oluşturdum. Ayrıca, yazarların farklı anlambilim önerdiği bir kitap olan VHDL için Resmi Semantik, her birinde çok sayıda diyagram var. Bunun bizim haritaladığımız bir dil olduğunu düşünüyordum.
Val

Bu, anlambilime çok daha az ve daha çok donanıma derleme yolunda ara bir adım gibi geliyor.
Dave Clarke

Evet, ancak açıklamadan "anlamı" çıkarırlar.
Val

Yanıtlar:


15

Neden C'nin anlambilimini tanımlamak için başka bir dil icat etmek yerine C'nin anlambilimini hemen öğrenmeyesiniz?

Çünkü C'nin anlambilimini tanımlamak için bir tür dile ihtiyacınız vardır, örneğin İngilizce. İngilizce belirsiz olabilir ve özellikle C99 anlambilimidir.

Anlambilimin bilgisayar bilimi kavramı genellikle bir programın matematiksel açıklamasıdır ve bu açıklama tam olarak bir çeviri değildir. Farklı şeylerle ilgili olabilecek çeşitli semantik türleri vardır:

  1. programın hangi matematiksel işlevi hesapladığı hakkında ( anlamsal anlambilim ),
    lambda x: x + x =(x2x)
  2. programdan önce ve sonra özellikler hakkında ( aksiyomatik anlambilim ),
    {a>0} x = a; y = 0; while(1 < x){ x = x/2; y++; } {y=log(a)}
  3. programın nasıl azalacağı hakkında ( operasyonel semantik ). burada öncesi ve sonrası hafızanızı temsil eder. Bu durumda ve için bellek hücreleri ise veveve eğer .
    (σ, while(x){x--;y++;})σ
    σ,σσ=(xa,yb)σ=(xa+b,y0)xyxya

Şimdilik biraz üzücü, bir programı anlambilimiyle evrensel olarak anlamak ne kolay ne de hepsinin niyeti değildir. Birincisi değil, çünkü bu matematik dağınık olabilir. Anlambilim gerçekte ortak ve açık bir açıklama sağladığından ikincisi değildir, ancak bir programı anlamak için kullanılmaz.

Anlambilimi okumak o kadar anlamlı değilse, dilin temel unsurları üzerine anlambilimi okumak ve kabul etmek çok önemlidir, örneğin C'nin nasıl devam ettiğini net bir şekilde açıklamakilkel eserler.continue

Sonuç olarak:

Bize ilkini anlamak için başka bir dil tanıdıklarını söylüyorlar mı?

Teknik olarak hayır, dil matematiktir. Ayrıca temel olarak tüm programlama dilleri için aynıdır, bu yüzden yeni bir dil tanıtmak bile, eğer herkes için aynıysa, hemen hemen tamam olacaktır.

Neden orijinalinden daha iyi anlıyoruz?

Matematik olduğu için anlaşılması daha zor olabilir, ancak çok daha kesin ve eksiksizdir.

Aynı şey sözdizimi için de geçerlidir.

Doğrulanmış ayrıştırıcılar üzerinde çalışmalar var, ancak bir ayrıştırıcının anlambiliminin ne anlama geleceği önemsiz değil.


2
"matematik [...] çok daha kesin ve eksiksiz." - tabii ki matematiğin biçimsel sözdizimi ve anlambilimi için soruyu soruyor. ;)
Raphael
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.