Derleyici Tasarımı - Sözcüksel Analiz
Sözcüksel analiz, bir derleyicinin ilk aşamasıdır. Değiştirilen kaynak kodunu, cümle şeklinde yazılan dil ön işlemcilerinden alır. Sözcüksel analizci, kaynak koddaki tüm boşlukları veya yorumları kaldırarak bu sözdizimlerini bir dizi simgeye böler.
Sözcüksel analizci bir belirteci geçersiz bulursa, bir hata oluşturur. Sözcüksel çözümleyici, sözdizimi çözümleyicisi ile yakın çalışır. Kaynak koddan karakter akışlarını okur, yasal belirteçleri kontrol eder ve istendiğinde verileri sözdizimi çözümleyicisine iletir.
Jetonlar
Sözcüklerin bir belirteçteki bir dizi karakter (alfanümerik) olduğu söylenir. Geçerli bir belirteç olarak tanımlanacak her sözcükbirimi için önceden tanımlanmış bazı kurallar vardır. Bu kurallar, bir kalıp aracılığıyla gramer kuralları ile tanımlanır. Bir kalıp, neyin bir belirteç olabileceğini açıklar ve bu kalıplar, normal ifadeler aracılığıyla tanımlanır.
Programlama dilinde anahtar sözcükler, sabitler, tanımlayıcılar, dizeler, sayılar, operatörler ve noktalama işaretleri simgeler, simge olarak kabul edilebilir.
Örneğin, C dilinde değişken bildirim satırı
int value = 100;
simgeleri içerir:
int (keyword), value (identifier), = (operator), 100 (constant) and ; (symbol).
Jetonların Özellikleri
Dil teorisinin aşağıdaki terimleri nasıl üstlendiğini anlayalım:
Alfabe
Herhangi bir sonlu simge kümesi {0,1} bir ikili alfabe kümesidir, {0,1,2,3,4,5,6,7,8,9, A, B, C, D, E, F} Onaltılık alfabe kümesidir, {az, AZ} bir dizi İngilizce alfabe grubudur.
Teller
Herhangi bir sonlu alfabe dizisi bir dizge olarak adlandırılır. Dizenin uzunluğu, alfabelerin toplam oluşum sayısıdır, örneğin, dize öğretici noktasının uzunluğu 14'tür ve | tutorialspoint | ile gösterilir. = 14. Alfabesi olmayan bir dizge, yani sıfır uzunlukta bir dizi boş dizge olarak bilinir ve ε (epsilon) ile gösterilir.
Özel Semboller
Tipik bir yüksek seviyeli dil aşağıdaki sembolleri içerir: -
Aritmetik Semboller | Toplama (+), Çıkarma (-), Modulo (%), Çarpma (*), Bölme (/) |
Noktalama | Virgül (,), Noktalı Virgül (;), Nokta (.), Ok (->) |
Görev | = |
Özel ödev | + =, / =, * =, - = |
Karşılaştırma | ==,! =, <, <=,>,> = |
Önişlemci | # |
Konum Belirteci | & |
Mantıklı | &, &&, |, ||,! |
Vardiya Operatörü | >>, >>>, <<, <<< |
Dil
Bir dil, bazı sonlu alfabe kümeleri üzerinde sonlu bir dizi dizisi olarak kabul edilir. Bilgisayar dilleri sonlu kümeler olarak kabul edilir ve bunlar üzerinde matematiksel olarak ayarlanmış işlemler gerçekleştirilebilir. Sonlu diller düzenli ifadelerle tanımlanabilir.
En Uzun Maç Kuralı
Sözcüksel analizci kaynak kodunu okuduğunda, kodu harf harf tarar; ve bir boşluk, operatör sembolü veya özel sembollerle karşılaştığında, bir kelimenin tamamlandığına karar verir.
For example:
int intvalue;
Her iki sözcükbirimi de 'int'e kadar tararken, sözcüksel analizci bunun bir int anahtar kelimesi mi yoksa tanımlayıcı int değerinin baş harfleri mi olduğunu belirleyemez.
En Uzun Eşleşme Kuralı, taranan sözcük biriminin mevcut tüm belirteçler arasındaki en uzun eşleşmeye göre belirlenmesi gerektiğini belirtir.
Sözcüksel analizör de takip eder rule prioritybir dilin ayrılmış bir kelimesine, örneğin bir anahtar kelimeye, kullanıcı girdisine göre öncelik verilir. Diğer bir deyişle, sözcüksel analizci, mevcut herhangi bir ayrılmış sözcükle eşleşen bir sözcük birimi bulursa, bir hata oluşturmalıdır.