Yanıtlar:
Sözdizimi, dilin yapısı veya grameri ile ilgilidir. Şu soruyu cevaplar: Nasıl geçerli bir cümle kurarım? Tüm diller, hatta İngilizce ve diğer insan ("doğal") dilleri bile gramerlere, yani cümlenin uygun şekilde inşa edilip edilmediğini tanımlayan kurallara sahiptir.
İşte bazı C dili sözdizimi kuralları:
Anlambilim, cümlenin anlamı ile ilgilidir. Soruları cevaplıyor: bu cümle geçerli mi? Eğer öyleyse, cümle ne anlama geliyor? Örneğin:
x++; // increment
foo(xyz, --b, &qrs); // call foo
sözdizimsel olarak geçerli C ifadeleridir. Ama ne demek istiyorlar? Bu ifadeleri çalıştırılabilir bir talimatlar dizisine dönüştürmeye çalışmak bile geçerli mi? Bu sorular anlambilimin merkezindedir.
İlk ifadede ++ operatörünü düşünün. Her şeyden önce, bunu denemek bile geçerli mi?
Son olarak, bazı anlambilimlerin derleme zamanında belirlenemeyeceğini ve bu nedenle çalışma zamanında değerlendirilmesi gerektiğini unutmayın. ++ operatörü örneğinde, x zaten veri türü için maksimum değerdeyse, ona 1 eklemeye çalıştığınızda ne olur? Başka bir örnek: Programınız değeri NULL olan bir göstericiye başvurmayı kaldırmaya çalışırsa ne olur?
Özetle sözdizimi, yalnızca cümlenin dilin grameri için geçerli olup olmadığıyla ilgilenen kavramdır. Anlambilim, cümlenin geçerli bir anlamı olup olmadığı ile ilgilidir.
x
verileri için maksimum değerde olduğu ve 1
buna ilave edilir daha sonra bazı garip çıkışı (sonuçlanır 0
,) o anlamsal hata değildir?
UINT_MAX + 1 == 0
) olarak tanımlanır . İmzalanmış taşma tanımsız. Modern derleyiciler genellikle var INT_MAX + 1 == INT_MIN
ama mesela bu güvenemeyiz durumlar (orada olduğu optimizasyon bağlı sonsuz değildir; bkz blog.llvm.org/2011/05/what-every-c-programmer-should-know. html ). for (i = 0; i <= N; ++i) { ... }
N
INT_MAX
Sözdizimi, bir dilin etimolojisinin izini sürerek , nesnelerin nasıl bir araya getirildiğini ifade eder.
Örneğin, sözdizimsel olarak doğru olması için bir tür, sonra bir ad ve ardından bir noktalı virgül bildirerek kodun bir araya getirilmesini isteyebilirsiniz.
Type token;
Öte yandan, anlambilim anlamla ilgilidir. Bir derleyici veya yorumlayıcı sözdizimi hatalarından şikayet edebilir. İş arkadaşlarınız anlambilimden şikayet edecekler.
Wikipedia'nın cevabı var. Okuma sözdizimi (programlama dilleri) & semantik (bilgisayar bilimi) wikipages.
Veya herhangi bir derleyici veya yorumlayıcının çalışmalarını düşünün . İlk adım, dizgelerin sözcükbirimlerine bölünmesi ve ardından bazı soyut sözdizimi ağacı ( sözdiziminin bir temsilidir) oluşturan ayrıştırılmasıyla simgelerin üretildiği sözcüksel analizdir . Sonraki adımlar, bu AST'yi (anlambilim) dönüştürmeyi veya değerlendirmeyi içerir.
Ayrıca, her anahtar kelime Fransızca eşdeğeri haline getirilmiştir C varyantı tanımlanmıştır if (böylece gözlemlemek if
olma si
, do
olma faire
,else
olma sinon
vb.), Dilinizin sözdizimini kesinlikle değiştireceğinizi, ancak çok fazla değişmeyeceğinizi unutmayın. anlambilim: bu Fransızca-C'de programlama daha kolay olmayacak!
Anlambilim, kodunuzun ne anlama geldiğidir - sözde kodla tanımlayabileceğiniz şeydir. Sözdizimi gerçek yapıdır - değişken adlarından noktalı virgüllere kadar her şey.
Sözdizimi , ifadelerin, ifadelerin ve program birimlerinin yapısı veya biçimidir, ancak Anlambilim bu ifadelerin, ifadelerin ve program birimlerinin anlamıdır. Anlambilim doğrudan sözdiziminden gelir . Sözdizimi , belirli bir programlama dilinin belirttiği kodun yapısını / biçimini belirtir, ancak Anlambilim , sembollere, karakterlere ve kelimelere atanan anlamla ilgilenir.
Sözdizimi bir programlama dili olan ifadeler, ifadeleri ve program birimlerinin şeklidir. Onun semantik bu ifadeler, ifadeleri ve program birimlerinin anlamı budur. Örneğin, bir Java while ifadesinin sözdizimi şöyledir:
while (boolean_expr) statement
Bu ifade biçiminin anlam bilgisi, Boole ifadesinin mevcut değeri doğru olduğunda, gömülü ifadenin çalıştırılmasıdır. Daha sonra kontrol, işlemi tekrarlamak için dolaylı olarak Boole ifadesine döner. Boole ifadesi yanlışsa, kontrol while yapısını izleyen ifadeye aktarılır.
Sözdizimi: Dilin gramatik yapısına atıfta bulunur .. Eğer c dilini yazıyorsanız. Veri türlerini, belirteçleri [değişmez veya "printf ()" gibi bir simge olabilir. 3 simgesi vardır, "printf, (,)"]. Aynı şekilde, işlevi nasıl kullandığınızı, işlev sözdizimini, işlev bildirimini, tanımlamayı, başlatmayı ve çağırmayı çok dikkatli olmalısınız.
Anlambilim iken, mantık veya cümle veya ifadeler kavramı ile ilgilidir. Kavram veya mantık dışında bir şey söylüyor veya yazıyorsanız, anlamsal olarak yanılıyorsunuz.
Genellikle, kodun sözdizimi ve anlambilim analizi derleyicinin 'ön uç' kısmında yapılır.
Sözdizimi: Derleyici, her bir anahtar sözcük ve semboller için belirteçler üretir: belirteç, anahtar sözcüğün bilgi türünü ve koddaki konumunu içerir. Bu belirteçleri kullanarak, bir AST (Özet Sözdizimi Ağacı'nın kısaltması) oluşturulur ve analiz edilir. Burada aslında hangi derleyici kontrol ediyor, kodun sözcüksel olarak anlamlı olup olmadığı, yani 'anahtar sözcük dizisi' dil kurallarına uygun mu? Önceki cevaplarda önerildiği gibi, bunu dilin grameri olarak görebilirsiniz (kodun anlamı / anlamı değil). Yan not: Sözdizimi hataları bu aşamada rapor edilir. (Sisteme hata türüne sahip jetonları döndürür)
Anlambilim: Şimdi, derleyici kod işlemlerinin 'mantıklı' olup olmadığını kontrol edecek. Örneğin, dil Type Inference'ı destekliyorsa, bir float'a bir dizge atamaya çalışıyorsanız, sematik hata rapor edilecektir. VEYA aynı değişkeni iki kez bildirmek. Bunlar, 'dilbilgisi' / sözdizimi açısından doğru olan ancak işlem sırasında hiçbir anlam ifade etmeyen hatalardır. Yan not: Aynı değişkenin iki kez bildirilip bildirilmediğini kontrol etmek için, derleyici bir sembol tablosunu yönetir
Dolayısıyla, bu 2 ön uç aşamasının çıktısı, açıklamalı bir AST (veri türleriyle birlikte) ve sembol tablosudur.
Kullandığımız normal dili düşünürsek; burada, İngilizce:
örneğin Okula gidiyor. - Hatalı dilbilgisi / sözdizimi, doğru bir anlam / anlam iletmek istemesine rağmen.
örneğin O soğuğa gider. - soğuk bir sıfattır. İngilizcede, bunun dilbilgisine uymadığını söyleyebiliriz, ancak aslında aklıma gelen doğru sözdizimine sahip yanlış anlambilime en yakın örnek.