Hata Mesajları Rehberi
BERK derleyicisi ve runtime tarafından üretilen hata mesajlarının açıklamaları ve çözüm önerileri.
⚠️ Compile-Time Hataları
Syntax Hataları
E001: Beklenmeyen token
// HATA
fonksiyon test() {
değişken x = 5
// Noktalı virgül eksik
}
// ÇÖZÜM
fonksiyon test() {
değişken x = 5;
}
Açıklama: Parser beklenmeyen bir token ile karşılaştı. Genellikle eksik noktalama işareti veya yazım hatasından kaynaklanır.
E002: Parantez eşleşmiyor
// HATA
değişken sonuç = (5 + 3 * 2
// ÇÖZÜM
değişken sonuç = (5 + 3) * 2
Çözüm: Tüm parantezlerin, köşeli parantezlerin ve süslü parantezlerin eşleştiğinden emin olun.
Type Hataları
E101: Tip uyumsuzluğu
// HATA
değişken x: tam = "merhaba" // string, tam'a atanamaz
// ÇÖZÜM
değişken x: metin = "merhaba" // Doğru tip
// veya
değişken x: tam = 42 // Doğru değer
Açıklama: Değişkenin tipi ile atanan değerin tipi uyuşmuyor.
E102: Tip çıkarımı başarısız
// HATA
değişken x // Tip ve değer yok
// ÇÖZÜM
değişken x: tam = 0 // Açık tip
// veya
değişken x = 0 // Tip çıkarımı
E103: Geçersiz operatör kullanımı
// HATA
değişken x = "hello" * 5 // String ile sayı çarpılamaz
// ÇÖZÜM
değişken x = "hello" + " world" // String concatenation
// veya
değişken x = 5 * 3 // Sayısal çarpma
Kapsam Hataları
E201: Tanımlanmamış değişken
// HATA
yazdır(isim) // 'isim' tanımlanmamış
// ÇÖZÜM
değişken isim = "BERK"
yazdır(isim)
E202: Değişken zaten tanımlı
// HATA
değişken x = 5
değişken x = 10 // Tekrar tanımlama
// ÇÖZÜM
değişken x = 5
x = 10 // Yeniden atama (tanımlama değil)
E203: Sabite atama yapılamaz
// HATA
sabit PI = 3.14
PI = 3.14159 // Sabite atama
// ÇÖZÜM
değişken pi = 3.14 // Değişken kullan
pi = 3.14159 // Artık değiştirilebilir
Fonksiyon Hataları
E301: Fonksiyon bulunamadı
// HATA
sonuç = hesapla(5, 10) // 'hesapla' tanımlanmamış
// ÇÖZÜM
fonksiyon hesapla(a: tam, b: tam) -> tam {
döndür a + b
}
sonuç = hesapla(5, 10)
E302: Parametre sayısı uyumsuz
fonksiyon topla(a: tam, b: tam) -> tam {
döndür a + b
}
// HATA
sonuç = topla(5) // 2 parametre gerekli, 1 verildi
// ÇÖZÜM
sonuç = topla(5, 10)
E303: Dönüş tipi uyumsuz
// HATA
fonksiyon al_isim() -> metin {
döndür 42 // tam, metin değil
}
// ÇÖZÜM
fonksiyon al_isim() -> metin {
döndür "BERK"
}
🔥 Runtime Hataları
Aritmetik Hataları
R001: Sıfıra bölme
// HATA
değişken x = 10 / 0
// ÇÖZÜM
eğer bölen != 0 {
değişken x = 10 / bölen
} değilse {
yazdır("Sıfıra bölme hatası!")
}
R002: Sayısal overflow
// HATA
değişken x: tam8 = 200 // tam8 max: 127
// ÇÖZÜM
değişken x: tam32 = 200 // Daha büyük tip
Bellek Hataları
R101: Null pointer erişimi
// HATA
değişken ptr: *tam = boş_değer
yazdır(*ptr) // Null dereference
// ÇÖZÜM
eğer ptr != boş_değer {
yazdır(*ptr)
}
R102: Array sınır aşımı
// HATA
değişken dizi = [1, 2, 3]
yazdır(dizi[5]) // Index out of bounds
// ÇÖZÜM
eğer 5 < dizi.uzunluk {
yazdır(dizi[5])
} değilse {
yazdır("Geçersiz index")
}
I/O Hataları
R201: Dosya bulunamadı
// HATA
değişken içerik = fs.oku_dosya("yok.txt")
// ÇÖZÜM
eğer fs.var_mı("dosya.txt") {
değişken içerik = fs.oku_dosya("dosya.txt")
} değilse {
yazdır("Dosya bulunamadı")
}
// VEYA try-catch kullan
dene {
değişken içerik = fs.oku_dosya("dosya.txt")
} yakala hata {
yazdır("Hata: " + hata.mesaj)
}
R202: Erişim izni yok
// ÇÖZÜM
dene {
fs.yaz_dosya("/root/dosya.txt", veri)
} yakala hata {
yazdır("İzin hatası: " + hata.mesaj)
}
🧪 Test Hataları
T001: Assert başarısız
içe_aktar testing
test "toplama testi" {
değişken sonuç = topla(2, 2)
testing.assert_eşit(sonuç, 5) // HATA: 4 != 5
}
// ÇÖZÜM: Beklenen değeri düzelt
testing.assert_eşit(sonuç, 4) // OK
💡 Hata Ayıklama İpuçları
Compiler Verbose Mode
BERK-lang compile --verbose program.berk
# Detaylı compile bilgisi
Debug Print
// Değişken değerlerini kontrol et
değişken x = hesapla()
io.yazdır("x değeri: " + x)
// Type kontrolü
io.yazdır("Tip: " + type_of(x))
Stack Trace
dene {
tehlikeli_fonksiyon()
} yakala hata {
// Stack trace göster
io.yazdır(hata.stack_trace)
}
🔧 Yaygın Hatalar ve Çözümleri
| Hata | Neden | Çözüm |
|---|---|---|
| Segmentation fault | Geçersiz bellek erişimi | Pointer kontrolü, bounds checking |
| Stack overflow | Sonsuz recursion | Base case ekle, iteration kullan |
| Deadlock | Thread'ler birbirini bekliyor | Lock sırası düzenle, timeout ekle |
| Memory leak | Allocation'lar free edilmemiş | Scope sonunda cleanup, RAII pattern |
🆘 Yardım Alma
- GitHub Issues: Hata raporu gönderin
- Discord: Topluluktan yardım isteyin
- Dokümantasyon: İlgili modül sayfasını inceleyin
- Examples: Örnek kodları kontrol edin