Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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

HataNedenÇö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