Faz 0 — Tip Sistemi ve Hata Kayıt Motoru (Type & Diagnostics) #69
Labels
No Label
cli-ux
faz-plani
felsefe-gozden-gecir
ffi-builtin
fikir
gelecek-vizyon
ir-vm
kalite-mimari
moduller-import
test-senaryosu
tip-sistemi
tooling-lsp
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: saqut/saqut-compiler#69
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
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:
src/core/type.hppadında yeni bir dosya oluştur. BuradaTypeKind(Primitive, Array, Struct, Function, Error) enum sınıfını veTypesınıfını tanımla. Primitif türler içinint,float,double,char,string,bool,voidalt tiplerini destekle. Dizi (Array) türü için eleman tipini (elementType), fonksiyon için dönüş ve parametre tiplerini taşıyacak alanlar ekle.equals()vetoString()gibi metotları implement et.src/diagnostic/diagnostic.hppdosyasını oluştur. Burada hata seviyelerini (Error,Warning,Note,Hint) içerenDiagLevelenum sınıfını ve hatanın koordinatlarını tutanDiagnosticyapısını tanımla.E001- Tanımsız Değişken,E002- Çift Tanım,E003- Tip Uyuşmazlığı,E010- Döngüsel Struct Tanımı vb.) sabitle.src/diagnostic/diagnostic_engine.hppdosyasını oluştur.DiagnosticEnginesınıfı hataları bir vektörde biriktirmeli,report()metoduyla yeni hata almalı veprintAll()ile bunları ekrana formatlı yazmalıdır.Geliştirme Dalı (Branch):
feature/faz0-temellerSonuç ve Başarı Kriterleri
Bu işin bittiğini ve başarılı olduğunu şu kriterlerle doğrulayacağız:
Type::equals()metodu için yazılan birim testler (Unit Tests) farklı tip kombinasyonlarını (örneğinintileinteşit,intilefloatveyaint[]farklı) hatasız doğrulamalıdır.DiagnosticEnginesınıfına 3 farklı hata raporlanıpprintAll()çağrıldığında, çıktıda hata kodları (E001vb.) ve kaynak kod satır/sütun koordinatları doğru sırayla ve biçimde ekrana yazılmalıdır.-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.
✅ 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::equalsbirim testleri (int/float/array/struct/function/error) geçti.DiagnosticEngine: 3 tanı →printAllsıralı + konumlu,toJsonyapısal,hasErrors/errorCountdoğru.-Wall -Wextratemiz.Header-only (ADR-003); henüz pipeline'a bağlı değil — Faz 2/3 (sembol tablosu, tip denetleyici) tüketecek.