Faz 3 — Semantik Analiz ve Tip Denetimi (Type Checking) #72
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#72
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 kurallarını işleten Semantik Analiz (Anlamsal Analiz) ve Tip Denetimi (Type Checking) motorunu yazacağız.
Sözdizimi (Syntax) doğru olan bir kod anlamsal olarak yanlış olabilir (örneğin
int x = "merhaba" + 5;yazmak sözdizimsel olarak geçerlidir ancak mantıksızdır).Tip Denetimi, ifadelerin veri tiplerinin uyumlu olup olmadığını kontrol eder. Ayrıca dilimizin "otomatik tip dönüşümü yasaktır" kuralını işletir. Yapısal doğrulama ise
break/continuedeyimlerinin döngü dışında kullanılmasını engeller.Gelişme (Neyi, Nerede ve Nasıl Yapacaksın?)
Aşağıdaki adımları sırasıyla gerçekleştir:
src/sema/type_checker.hppve.cppdosyalarını oluştur. AST'yi aşağıdan yukarıya (bottom-up) gezerek herExpressionNodedüğümünün tipini (resolvedType) belirle.=), aritmetik operatörlerde ve fonksiyon çağrılarında tip uyumunu denetle. Gizli değişken-değişken dönüşümlerini yasakla (hata:E003).float x = 1;geçerli olmalı çünkü1kayıpsızca float'a dönüşebilir, ancakint y = 1.5;E003hatası vermelidir).ErrorTypeata. Bu sayede, o ifadeyi kullanan üst ifadelerde tekrar tekrar sahte hatalar üretilmez.src/sema/structural_validator.hppve.cppdosyalarını oluştur. Ağacı tırmanarakbreak/continueifadelerinin üstünde bir döngü olup olmadığını (E004),returnifadesinin bir fonksiyon gövdesinde olup olmadığını (E005ve dönüş tipi uyumu içinE006) denetle.Geliştirme Dalı (Branch):
feature/faz3-semantic-analysisSonuç ve Başarı Kriterleri
Bu işin bittiğini ve başarılı olduğunu şu kriterlerle doğrulayacağız:
examples/fibonacci.sqtdosyası semantik analizden sıfır hatayla geçmeli ve her AST ifadesinin tipi JSON çıktısında (resolvedType) görünmelidir.break;yazıldığında veyaintdeğişkenestringatandığında) derleyici ilgili hata kodlarını (E003,E004vb.) raporlamalı ve derleme süreci kesilmelidir.Mühendis Olmayanlar İçin Analiz: Bu aşama, derleyicinin yazılan kodun "anlamlı" olup olmadığını kontrol ettiği güvenlik kapısıdır. Karmaşıklığı Orta-Yüksek, yapım süresi yaklaşık 3-4 gündür.
İmza/Yorum: Sabit ifadelerde constant folding istisnasını unutmama kuralları burada işletilecektir.
Faz 3 tamamlandı.
Yapılanlar:
src/semantic/type_checker: her ExpressionNode'a resolvedType atar; E003 (tip uyuşmazlığı), E006 (return tipi), E008 (argüman sayısı/tipi)src/semantic/structural_validator: E004 (break/continue döngü dışı), E005 (return fonksiyon dışı)saqut checkkomutu: tokenize→parse→collect→typecheck→validate pipeline'ı, JSON çıktıexamples/semantic/: widening, narrowing, bad_return, break_outside, bad_args fixture'larıCommit:
d9b023c