C
Sembol tablosu
Sembol tablosu ve yönetimini öğrenirsin.
Sembol tablosu nedir?
Sembol tablosu, derleyicinin tanımlayıcıları (değişken, fonksiyon, tür) adlarıyla sakladığı veri yapısıdır. Her sembol ad, tür, kapsam (scope) ve konum bilgisi taşır.
Lexer bir tanımlayıcı görünce tabloya bakar; yoksa ekler. Parser ve codegen tabloyu tür denetimi ve adres üretimi için kullanır. Yaygın uygulama karma tablo (hash table) ya da sıralı bağlantılı listedir; kapsam desteği için her kapsam ayrı bir tablo tutar. Bir değişken kapsam dışına çıkınca tablosu bırakılır. Sembol tablosu derleyicinin belleğidir; tutarlılığı derleme başarısını belirler.
lookup ve insert
Tablonun iki temel işlemi vardır: lookup adla arama, insert yeni sembol ekleme. Bu ikisi parser ve codegen boyunca sürekli çağrılır.
Bir değişken bildirimi görünce insert yaparsın; kullanımı görünce lookup. Eğer lookup boş dönerse tanımsız değişken hatası verirsin. Kapsam desteği için tablo yığını gibi yönetilir: yeni kapsamda yeni tablo açılır, kapsam bitince tablo yığından çekilir. İç içe kapsamlarda önce iç tablo, sonra dış tablo aranır. Bu sayede gölgeleme (shadowing) doğru çalışır.
Uygulama Sembol tablosunu yazdır
struct symbol { const char *name; int type; } tanımla. void print_symbol(struct symbol s) fonksiyonu tanımla; gövdesi printf("%s:%d\n", s.name, s.type); olsun. main içinde üç elemanlı bir struct symbol table[] dizisi oluştur: {"x", 0}, {"y", 1}, {"sum", 2}. Bir for döngüsüyle her elemanı print_symbol ile yazdır.
Örnek çözümü göster
#include <stdio.h>
struct symbol { const char *name; int type; };
void print_symbol(struct symbol s) {
printf("%s:%d\n", s.name, s.type);
}
int main(void) {
struct symbol table[] = {
{"x", 0},
{"y", 1},
{"sum", 2}
};
int n = sizeof(table) / sizeof(table[0]);
for (int i = 0; i < n; i++) {
print_symbol(table[i]);
}
return 0;
}
Kendini test et
-
Sembol tablosu neyi saklar?
- İsim ve bilgileri
- Yalnız değer
- Yalnız adres
- Yalnız tür
Cevabı göster
İsim ve bilgileri — Sembol tablosu tanımlayıcı adını ve özelliklerini birlikte tutar.
-
Sembol tablosu kavramlarını eşle
- symbol
- İsim ve bilgisi
- scope
- Erişim alanı
- lookup
- Arama
- insert
- Ekleme
-
symtab lookup çağrısını tamamla
int type = symtab_____(name);
Cevabı göster
int type = symtab_lookup(name);
Sıradaki ders: Özet - Derleyici temelleri