Faz 0 — Tip Sistemi ve Hata Kayıt Motoru (Type & Diagnostics) #69

Closed
opened 2026-06-14 21:58:13 +03:00 by saqut · 1 comment
Owner

Giriş (Nedir, Neden Yapıyoruz?)

Bu iş paketinde derleyicinin çalışması için en temel iki altyapıyı kuracağız: Tip Sistemi (Type System) ve Hata Kayıt/Diagnostic Motoru.
Tip Sistemi, derleyicinin kaynak koddaki verileri (sayılar, metinler vb.) anlamlandırabilmesi ve tür doğruluğunu denetleyebilmesi için gerekli veri yapısını sağlar.
Hata Kayıt Motoru ise derleme sırasında oluşan hataları (örneğin tip uyuşmazlığı veya tanımsız değişken kullanımı) biriktirip, kullanıcıya hatanın kaynak koddaki tam yerini (dosya, satır, sütun koordinatları) göstererek raporlayan mekanizmadır. Bu yapı sayesinde derleyici ilk bulduğu hatada hemen durmayacak, tüm hataları toplayıp tek seferde kullanıcıya sunacaktır.


Gelişme (Neyi, Nerede ve Nasıl Yapacaksın?)

Aşağıdaki adımları sırasıyla gerçekleştir:

  1. Tip Yapısı: src/core/type.hpp adında yeni bir dosya oluştur. Burada TypeKind (Primitive, Array, Struct, Function, Error) enum sınıfını ve Type sınıfını tanımla. Primitif türler için int, float, double, char, string, bool, void alt tiplerini destekle. Dizi (Array) türü için eleman tipini (elementType), fonksiyon için dönüş ve parametre tiplerini taşıyacak alanlar ekle. equals() ve toString() gibi metotları implement et.
  2. Hata Yapısı: src/diagnostic/diagnostic.hpp dosyasını oluştur. Burada hata seviyelerini (Error, Warning, Note, Hint) içeren DiagLevel enum sınıfını ve hatanın koordinatlarını tutan Diagnostic yapısını tanımla.
  3. Diagnostic Kataloğu: Aynı dosyada derleyicide oluşabilecek hata kodlarını içeren kataloğu (örneğin E001 - Tanımsız Değişken, E002 - Çift Tanım, E003 - Tip Uyuşmazlığı, E010 - Döngüsel Struct Tanımı vb.) sabitle.
  4. DiagnosticEngine: src/diagnostic/diagnostic_engine.hpp dosyasını oluştur. DiagnosticEngine sınıfı hataları bir vektörde biriktirmeli, report() metoduyla yeni hata almalı ve printAll() ile bunları ekrana formatlı yazmalıdır.

Geliştirme Dalı (Branch): feature/faz0-temeller


Sonuç ve Başarı Kriterleri

Bu işin bittiğini ve başarılı olduğunu şu kriterlerle doğrulayacağız:

  1. Type::equals() metodu için yazılan birim testler (Unit Tests) farklı tip kombinasyonlarını (örneğin int ile int eşit, int ile float veya int[] farklı) hatasız doğrulamalıdır.
  2. DiagnosticEngine sınıfına 3 farklı hata raporlanıp printAll() çağrıldığında, çıktıda hata kodları (E001 vb.) ve kaynak kod satır/sütun koordinatları doğru sırayla ve biçimde ekrana yazılmalıdır.
  3. Derleyici uyarısız (-Wall -Wextra) derlenmelidir.

Mühendis Olmayanlar İçin Analiz: Bu aşama derleyicinin arka planındaki veri yapılarını kurduğu için görsel bir çıktı üretmez, ancak sonraki tüm aşamaların temelidir. Karmaşıklığı Düşük, yapım süresi yaklaşık 1-2 gündür.
İmza/Yorum: Bu altyapı semantik analizin (Faz 3) hata raporlayabilmesi için kritik önkoşuldur.

### Giriş (Nedir, Neden Yapıyoruz?) Bu iş paketinde derleyicinin çalışması için en temel iki altyapıyı kuracağız: Tip Sistemi (Type System) ve Hata Kayıt/Diagnostic Motoru. Tip Sistemi, derleyicinin kaynak koddaki verileri (sayılar, metinler vb.) anlamlandırabilmesi ve tür doğruluğunu denetleyebilmesi için gerekli veri yapısını sağlar. Hata Kayıt Motoru ise derleme sırasında oluşan hataları (örneğin tip uyuşmazlığı veya tanımsız değişken kullanımı) biriktirip, kullanıcıya hatanın kaynak koddaki tam yerini (dosya, satır, sütun koordinatları) göstererek raporlayan mekanizmadır. Bu yapı sayesinde derleyici ilk bulduğu hatada hemen durmayacak, tüm hataları toplayıp tek seferde kullanıcıya sunacaktır. --- ### Gelişme (Neyi, Nerede ve Nasıl Yapacaksın?) Aşağıdaki adımları sırasıyla gerçekleştir: 1. **Tip Yapısı:** `src/core/type.hpp` adında yeni bir dosya oluştur. Burada `TypeKind` (Primitive, Array, Struct, Function, Error) enum sınıfını ve `Type` sınıfını tanımla. Primitif türler için `int`, `float`, `double`, `char`, `string`, `bool`, `void` alt tiplerini destekle. Dizi (Array) türü için eleman tipini (`elementType`), fonksiyon için dönüş ve parametre tiplerini taşıyacak alanlar ekle. `equals()` ve `toString()` gibi metotları implement et. 2. **Hata Yapısı:** `src/diagnostic/diagnostic.hpp` dosyasını oluştur. Burada hata seviyelerini (`Error`, `Warning`, `Note`, `Hint`) içeren `DiagLevel` enum sınıfını ve hatanın koordinatlarını tutan `Diagnostic` yapısını tanımla. 3. **Diagnostic Kataloğu:** Aynı dosyada derleyicide oluşabilecek hata kodlarını içeren kataloğu (örneğin `E001` - Tanımsız Değişken, `E002` - Çift Tanım, `E003` - Tip Uyuşmazlığı, `E010` - Döngüsel Struct Tanımı vb.) sabitle. 4. **DiagnosticEngine:** `src/diagnostic/diagnostic_engine.hpp` dosyasını oluştur. `DiagnosticEngine` sınıfı hataları bir vektörde biriktirmeli, `report()` metoduyla yeni hata almalı ve `printAll()` ile bunları ekrana formatlı yazmalıdır. *Geliştirme Dalı (Branch):* `feature/faz0-temeller` --- ### Sonuç ve Başarı Kriterleri Bu işin bittiğini ve başarılı olduğunu şu kriterlerle doğrulayacağız: 1. `Type::equals()` metodu için yazılan birim testler (Unit Tests) farklı tip kombinasyonlarını (örneğin `int` ile `int` eşit, `int` ile `float` veya `int[]` farklı) hatasız doğrulamalıdır. 2. `DiagnosticEngine` sınıfına 3 farklı hata raporlanıp `printAll()` çağrıldığında, çıktıda hata kodları (`E001` vb.) ve kaynak kod satır/sütun koordinatları doğru sırayla ve biçimde ekrana yazılmalıdır. 3. Derleyici uyarısız (`-Wall -Wextra`) derlenmelidir. *Mühendis Olmayanlar İçin Analiz:* Bu aşama derleyicinin arka planındaki veri yapılarını kurduğu için görsel bir çıktı üretmez, ancak sonraki tüm aşamaların temelidir. Karmaşıklığı **Düşük**, yapım süresi yaklaşık **1-2 gün**dür. *İmza/Yorum:* Bu altyapı semantik analizin (Faz 3) hata raporlayabilmesi için kritik önkoşuldur.
saqut added the
faz-plani
label 2026-06-14 22:08:31 +03:00
Author
Owner

Faz 0 tamamlandı — commit f607f43.

Yapılanlar

  • src/core/type.hppType (Primitive/Array/Struct/Function/Error), equals() (katı yapısal, gizli dönüşüm yok — ADR-010), toString(), toJson() (cam ilkesi), factory'ler, fromName().
  • src/diagnostic/diagnostic.hppDiagLevel, Diagnostic (veri birincil), hata kataloğu (E001–E010, W001–W003), jsonEscape, makeDiagnostic.
  • src/diagnostic/diagnostic_engine.hpp — toplar (ilk hatada durmaz, ADR-013), printAll() (insan-okur, sıralı) + toJson() (makine-okur).
  • tests/ — çerçevesiz birim testleri (tests/run.sh).

Başarı kriterleri

  • Type::equals birim testleri (int/float/array/struct/function/error) geçti.
  • DiagnosticEngine: 3 tanı → printAll sıralı + konumlu, toJson yapısal, hasErrors/errorCount doğru.
  • -Wall -Wextra temiz.

Header-only (ADR-003); henüz pipeline'a bağlı değil — Faz 2/3 (sembol tablosu, tip denetleyici) tüketecek.

Kapatma/onay kararı sende bırakıldı (lisans §7: birleştirme/onay yalnızca Abdussamed ULUTAŞ).

✅ **Faz 0 tamamlandı** — commit `f607f43`. **Yapılanlar** - `src/core/type.hpp` — `Type` (Primitive/Array/Struct/Function/Error), `equals()` (katı yapısal, gizli dönüşüm yok — ADR-010), `toString()`, `toJson()` (cam ilkesi), factory'ler, `fromName()`. - `src/diagnostic/diagnostic.hpp` — `DiagLevel`, `Diagnostic` (veri birincil), hata kataloğu (E001–E010, W001–W003), `jsonEscape`, `makeDiagnostic`. - `src/diagnostic/diagnostic_engine.hpp` — toplar (ilk hatada durmaz, ADR-013), `printAll()` (insan-okur, sıralı) + `toJson()` (makine-okur). - `tests/` — çerçevesiz birim testleri (`tests/run.sh`). **Başarı kriterleri** - ✅ `Type::equals` birim testleri (int/float/array/struct/function/error) geçti. - ✅ `DiagnosticEngine`: 3 tanı → `printAll` sıralı + konumlu, `toJson` yapısal, `hasErrors`/`errorCount` doğru. - ✅ `-Wall -Wextra` temiz. Header-only (ADR-003); henüz pipeline'a bağlı değil — Faz 2/3 (sembol tablosu, tip denetleyici) tüketecek. > Kapatma/onay kararı sende bırakıldı (lisans §7: birleştirme/onay yalnızca Abdussamed ULUTAŞ).
saqut closed this issue 2026-06-16 00:36:50 +03:00
Sign in to join this conversation.
No description provided.