Bazı dillerin bunu yapmasına ve diğerlerinin yapmamasına ne izin verir? Neden noktalı virgül eklemek için tek tip bir sistem tutmuyorsunuz?
Robert Swift hakkında iyi bir cevap verdi, genel olarak ayrıştırma ve neden noktalı virgül kullanıp kullanmamaya biraz daha eklemeye çalışacağım.
Programı derlediğinizde, kaynak dosyanız çalıştırılabilir koda dönüştürülmeden önce, ilk adımlardan biri okuma ve ayrıştırma olmak üzere birkaç adım vardır . Ayrıştırma sırasında kodunuz bir dil dizisinden dilin dilbilgisine göre yapılandırılmış bir temsile dönüştürülür . Bunun için kodunuzu oluşturan öğelerin (değişkenler, sabitler, bildirimler vb.) Bir şekilde tanımlanması ve ayrılması gerekir. Aşağıdaki gibi bir beyanda bulunduğunuzda:
int someNumber = 0;
Bir şekilde kavram şöyle açık olması gerekiyor karakterlerin sadece bir dizi var "diye bir 'şey' yaratmak someNumber
Çeşidi int
ve assign 0
kendisine" .
Bu, ifadenin tam olarak nerede başladığını ve bittiğini tanımlamayı gerektirir. Şunu düşünün:
int someNumber = 0;
int otherNumber = 1;
Bunların iki farklı beyan olduğunu bilmeniz gerekir. ;
Çözümleyici bulana kadar karakterleri okur ve girişimleri sadece tek bir ifade olarak okundu anlamak böylece C benzeri diller, bunun için kullanılıyor. Bu, Robert'ın dediği gibi, aynı satırda aşağıdaki gibi birkaç ifadeye sahip olmasını sağlar:
int someNumber = 0; int otherNumber = 1;
Bunları iki satırda yazmakla tamamen aynı etkiye sahiptir.
Python gibi diğer dillerde her ifadeyi farklı bir satıra koymanız beklenir.
x = 3
if x < 10:
print 'x smaller than 10'
else:
print 'x is bigger than 10 or equal'
Bu yüzden a eklemenize gerek yoktur ;
, çünkü dilin kendisi aynı satıra ifade eklemenizi engeller!
Yine de, LISP veya Scheme gibi diğer diller, ifadeleri gruplandırmanın çok farklı bir yoluna sahiptir (tamam, gerçekten ifadeler değildir, ancak şimdilik görmezden gelelim). Yani her şey için sadece paranteziniz var:
(define (do-stuff x)
(begin
(display (format "value: ~a" x))
x))
Yine, gerek yok ;
aynı sembolleri (kullandığından sadece )
, (
şeyleri) diğer dillerdir o {
, }
, :
Neden Gereklidir: sadece Lisp sözdizimi bilir vs. Birisi isteyebilir ;
İfadeleriniz sonunda ?
Sadece yabancı bir örnek eklemek için: OCaml ifadelerinin sonunda sadece noktalı virgül kullanmakla kalmıyor ... iki tane var!
let rec fact x =
if x <= 1 then 1 else x * fact (x - 1);;
Niye ya? Bilmiyorum. :)
Farklı diller, farklı amaçlar ve farklı felsefelerle tasarlanmıştır. Tüm diller aynı sözdizimini ve kuralları paylaşıyorsa, muhtemelen aynı şeyleri aynı şekilde yapmanıza izin verir.