Sembol tablosu
- C kursu
- Uzman
- Ders 17/47
- 5 dk
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.
Başlangıç kodu
#include <stdio.h>
// symbol yapısını tanımla
// üç elemanlı tablo oluştur ve for ile print_symbol çağır
int main(void) {
return 0;
}Örnek çözüm
#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;
}Beklenen çıktı
x:0 y:1 sum:2
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Sembol tablosu neyi saklar?
- İsim ve bilgileri Doğru cevap
- Yalnız değer
- Yalnız adres
- Yalnız tür
Açıklama: Sembol tablosu tanımlayıcı adını ve özelliklerini birlikte tutar.
2 Sembol tablosu kavramlarını eşle
| Kavram | Anlamı |
|---|---|
symbol |
İsim ve bilgisi |
scope |
Erişim alanı |
lookup |
Arama |
insert |
Ekleme |
3 symtab lookup çağrısını tamamla
int type = symtab_____(name);
int type = symtab_lookup(name);
Açıklama: symtab_lookup adla arama yapar.