Semantik ile çalışma

Söz dizimi ağaçları , kaynak kodun sözcük temelli ve söz dizimi yapısını gösterir. Bu bilgiler yalnızca kaynaktaki tüm bildirimleri ve mantığı açıklamak için yeterli olsa da, nelerin başvurulmakta olduğunu belirlemek için yeterli bilgi değildir. Bir ad şunu temsil edebilir:

  • tür
  • alan
  • yöntem
  • yerel değişken

Bunların her biri benzersiz bir şekilde farklı olsa da, tanımlayıcılardan hangisinin aslında başvurduğuna karar vermek genellikle dil kurallarının derin bir şekilde anlaşılmasını gerektirir.

Kaynak kodda temsil edilen program öğeleri vardır ve programlar derleme dosyalarında paketlenmiş daha önce derlenmiş kitaplıklara da başvurabilir. Derlemeler için kaynak kodu olmasa ve bu nedenle söz dizimi düğümleri veya ağaçları olmasa da, programlar yine de içindeki öğelere başvurabilir.

Bu görevler için Anlam modeline ihtiyacınız vardır.

Kaynak kodun bozulmamış modeline ek olarak, anlamsal model dil kurallarını kapsüller ve tanımlayıcıları başvurulan doğru program öğesiyle doğru şekilde eşleştirmenin kolay bir yolunu sağlar.

Derleme

Derleme, tüm derleme başvurularını, derleyici seçeneklerini ve kaynak dosyaları içeren bir C# veya Visual Basic programı derlemek için gereken her şeyin bir gösterimidir.

Tüm bu bilgiler tek bir yerde olduğundan, kaynak kodunda yer alan öğeler daha ayrıntılı olarak açıklanabilir. Derleme, bildirilen her türü, üyeyi veya değişkeni simge olarak temsil eder. Derleme, kaynak kodda bildirilen veya bir derlemeden meta veri olarak içeri aktarılan simgeleri bulmanıza ve ilişkilendirmenize yardımcı olan çeşitli yöntemler içerir.

Söz dizimi ağaçlarına benzer şekilde, derlemeler sabittir. Derlemeyi oluşturduktan sonra, siz veya paylaştığınız başka biri tarafından değiştirilemez. Ancak, var olan bir derlemeden yeni bir derleme oluşturabilir ve bunu yaparken bir değişiklik belirtebilirsiniz. Örneğin, var olan bir derlemeyle her şekilde aynı olan bir derleme oluşturabilirsiniz, ancak ek bir kaynak dosya veya derleme başvurusu içerebilir.

Simgeler

Sembol, kaynak kod tarafından bildirilen veya bir derlemeden meta veri olarak içeri aktarılan ayrı bir öğeyi temsil eder. Her ad alanı, tür, yöntem, özellik, alan, olay, parametre veya yerel değişken bir simgeyle temsil edilir.

Türdeki Compilation çeşitli yöntemler ve özellikler sembolleri bulmanıza yardımcı olur. Örneğin, bildirilen bir tür için ortak meta veri adına göre bir simge bulabilirsiniz. Ayrıca, sembol tablosunun tamamına genel ad alanı tarafından köklenen bir simge ağacı olarak da erişebilirsiniz.

Simgeler ayrıca, derleyicinin kaynaktan veya meta verilerden belirlediği, başvuruda bulunılan diğer simgeler gibi ek bilgiler içerir. Her simge türü, derleyicinin topladığı bilgileri ayrıntılı olarak belirten kendi yöntemlerine ve özelliklerine sahip, 'den ISymboltüretilen ayrı bir arabirimle temsil edilir. Bu özelliklerin çoğu doğrudan diğer simgelere başvurur. Örneğin, IMethodSymbol.ReturnType özelliği size yöntemin döndürdüğü gerçek tür simgesini bildirir.

Simgeler, kaynak kod ve meta veriler arasında ad alanlarının, türlerin ve üyelerin ortak bir gösterimini sunar. Örneğin, kaynak kodunda bildirilen bir yöntem ve meta verilerden içeri aktarılan bir yöntem aynı özelliklere sahip bir IMethodSymbol ile temsil edilir.

Simgeler kavram olarak CLR tür sistemine API tarafından System.Reflection gösterildiği gibi benzerdir, ancak yalnızca türlerden daha fazla model oluşturmaları bakımından daha zengindir. Ad alanları, yerel değişkenler ve etiketler sembollerdir. Ayrıca simgeler CLR kavramlarının değil dil kavramlarının bir gösterimidir. Çok fazla çakışma vardır, ancak birçok anlamlı ayrım da vardır. Örneğin, C# veya Visual Basic'te yineleyici yöntemi tek bir simgedir. Ancak yineleyici yöntemi CLR meta verilerine çevrildiğinde bir tür ve birden çok yöntemdir.

Anlamsal model

Anlamsal model, tek bir kaynak dosya için tüm semantik bilgileri temsil eder. Aşağıdakileri keşfetmek için bunu kullanabilirsiniz:

  • Kaynaktaki belirli bir konumda başvuruda bulunan simgeler.
  • Herhangi bir ifadenin sonuç türü.
  • Hatalar ve uyarılar olan tüm tanılamalar.
  • Değişkenlerin kaynak bölgeleri içinde ve dışında nasıl aktığı.
  • Daha kurgusal soruların yanıtları.