From 3e685ea960aacf01f028c13b508dd283dab130c6 Mon Sep 17 00:00:00 2001 From: abdussamedulutas Date: Tue, 26 May 2026 00:24:27 +0300 Subject: [PATCH] docs: kapsamli ADR dokumantasyonu, tum kaynak dosyalara detayli kommentler --- compile.sh | 31 +- fikirler.md | 385 ++++++++++++++++++++++++ saqut | Bin 780816 -> 781728 bytes source.sqt | 11 +- src/ir/ir.hpp | 219 +++++++++++--- src/lexer/lexer.hpp | 370 +++++++++++++++++++---- src/main.cpp | 66 ++++- src/parser/ast.hpp | 331 ++++++++++++++++----- src/parser/parser.hpp | 495 ++++++++++++++++++++++++------- src/parser/token.hpp | 567 ++++++++++++++++++++++++++++-------- src/tokenizer/tokenizer.hpp | 379 ++++++++++++++++++++---- src/tools.hpp | 28 +- 12 files changed, 2415 insertions(+), 467 deletions(-) create mode 100644 fikirler.md diff --git a/compile.sh b/compile.sh index 457a9d1..4b8f9e1 100755 --- a/compile.sh +++ b/compile.sh @@ -1,8 +1,33 @@ #!/bin/bash -# saQut Compiler — build script -# Derleme: g++ src/main.cpp -Isrc -o saqut +# ============================================================================ +# saQut Compiler — Derleme Betiği +# ============================================================================ +# +# AMAÇ: Projeyi tek komutla derlemek. +# +# KULLANIM: +# ./compile.sh → saqut binary'sini üret +# ./saqut → derleyiciyi çalıştır +# +# DERLEME SÜRECİ: +# Tek bir .cpp dosyası (src/main.cpp) tüm header-only kütüphaneleri +# include eder. Harici bağımlılık yoktur. +# +# g++ parametreleri: +# -Isrc : include path (header'lar src/ altında) +# -std=c++17 : C++17 standardı (std::variant, constexpr, vb.) +# -Wall -Wextra : Tüm uyarıları aç +# -O0 -g : Optimizasyon kapalı, debug sembolleri açık +# -o saqut : Çıktı binary adı +# +# GELECEK: +# - Makefile veya CMakeLists.txt ile daha esnek build +# - Release modu: -O2 -DNDEBUG +# - Test modu: ayrı bir test binary'si +# +# ============================================================================ -set -e +set -e # Hata durumunda dur echo "=== saQut Compiler Build ===" diff --git a/fikirler.md b/fikirler.md new file mode 100644 index 0000000..f667d67 --- /dev/null +++ b/fikirler.md @@ -0,0 +1,385 @@ +# saQut Derleyici — Mimari Fikirler ve Karar Kaydı (ADR) + +> Bu belge, saQut derleyicisinin backend stratejisi, mimari kararları ve +> gelecek yol haritası hakkında kapsamlı analizleri içerir. +> Her kararın **neden** alındığı, alternatiflerin neden elendiği ve +> gelecekte hangi koşullarda tekrar değerlendirileceği belirtilmiştir. + +--- + +## ADR-001: Backend Stratejisi + +### Bağlam + +saQut derleyicisi şu anda: +- **Lexer**: Karakter seviyesinde tarama (src/lexer/lexer.hpp) +- **Tokenizer**: Token üretimi, 6 token tipi, yorum satırı desteği (src/tokenizer/tokenizer.hpp) +- **Parser**: Pratt parser ile ifade ayrıştırma + recursive descent ile statement ayrıştırma (src/parser/parser.hpp) +- **AST**: Program, FunctionDecl, Block, değişken tanımlama, if/for/while/do-while/return, expression node'ları (src/parser/ast.hpp) +- **IR**: Sadece temel matematik opcode'ları (mathadd/sub/mul/div) ve declare (src/ir/ir.hpp) + +Henüz çalışan bir backend yok. Kod üretimi (code generation) aşaması boş. + +### Değerlendirilen Seçenekler + +#### 1. LLVM (Low Level Virtual Machine) + +**Nedir**: Derleyici altyapısı. C/C++/Rust/Swift gibi dillerin kullandığı endüstri standardı. + +**Artıları**: +- Agresif optimizasyonlar (loop unrolling, inlining, vectorization, LTO) +- Çok platformlu kod üretimi (x86, ARM, RISC-V, WebAssembly, GPU) +- JIT ve AOT (Ahead-of-Time) derleme desteği +- Olgun hata ayıklama bilgisi üretimi (DWARF, PDB) +- Geniş araç zinciri (llc, opt, lld, clang) +- GC (Garbage Collection) desteği için statepoint mekanizması + +**Eksileri**: +- **Bağımlılık boyutu**: LLVM kütüphaneleri ~1GB+ disk alanı kaplar +- **Derleme hızı**: LLVM'nin kendi derlenmesi dakikalar alır, link zamanı yavaştır +- **Öğrenme eğrisi**: LLVM IR karmaşıktır, C++ API'si ağırdır +- **Hata ayıklama zorluğu**: LLVM IR seviyesinde hata bulmak zordur +- **Hafif projeler için aşırı**: saQut gibi deneysel bir derleyici için "sineği top ile vurmak" olur +- **Build sistemi karmaşası**: LLVM'nin kendi build sistemi CMake ile entegre olur, proje yapısını domine eder + +**Karar**: ❌ Şimdilik kullanılmamalı. Deneysel aşamada çok ağır. Dil olgunlaştığında ve optimizasyon ihtiyacı somutlaştığında tekrar değerlendirilebilir. + +--- + +#### 2. GNU Lightning (JIT) + +**Nedir**: Anında makine kodu üreten hafif kütüphane. Register tabanlı, hedef mimariye göre kod üretir. + +**Artıları**: +- Çok hafif (birkaç yüz KB) +- Anında kod üretimi ve çalıştırma (JIT) +- x86, ARM, MIPS, PowerPC gibi mimarilere kod üretebilir +- Kod üretimi hızlıdır (optimizasyon yapmaz, direkt çeviri) +- C API'si basit ve temiz + +**Eksileri**: +- **Optimizasyon yok**: Constant folding, dead code elimination gibi temel optimizasyonlar bile yok +- **Bakım durumu belirsiz**: Proje uzun süredir aktif geliştirilmiyor +- **Sınırlı tip desteği**: Karmaşık veri tipleri ve struct'lar için manuel işlem gerekir +- **Hata toleransı düşük**: Yanlış register kullanımı sessizce yanlış kod üretir +- **Portability sorunları**: Her platformda aynı performansı vermez +- **GC ve exception handling desteği yok** + +**Karar**: ⚠️ Prototip aşamasında kullanılabilir ancak üretim için uygun değil. + +--- + +#### 3. Sıfırdan Custom Backend (Go yaklaşımı) + +**Nedir**: Go dilinin yaptığı gibi, kendi kod üreticini yazmak. + +**Go'nun yaklaşımı**: +- Go başlangıçta Plan 9 assembler'dan kendi assembler'ına geçti +- Kendi register allocator, instruction selector ve optimizer'ını yazdı +- Sonuç: LLVM bağımlılığı yok, hızlı derleme, tam kontrol +- Go 1.21+ ile PGO (Profile-Guided Optimization) bile eklendi + +**Artıları**: +- **Tam kontrol**: Her şeyi istediğin gibi tasarlayabilirsin +- **Bağımlılık yok**: Dış kütüphane gerektirmez +- **Hızlı derleme**: Optimizasyon seviyesini sen belirlersin +- **Dil ile entegrasyon**: saQut diline özel optimizasyonlar yapabilirsin +- **Öğrenme değeri**: Derleyicinin her katmanını anlarsın + +**Eksileri**: +- **Çok iş**: Register allocation, instruction selection, calling convention, stack frame yönetimi, peephole optimization... hepsini sıfırdan yazmak aylar sürer +- **Platform bağımlılığı**: Her hedef mimari için ayrı kod üretici gerekir +- **Optimizasyon kalitesi**: LLVM seviyesinde optimizasyon yapmak yıllar alır +- **Bakım yükü**: Tüm backend hataları senin sorumluluğunda + +**Karar**: ✅ **Önerilen uzun vadeli strateji**. Aşamalı olarak inşa edilmeli: +1. Aşama: C koduna transpile et (hızlı prototip, hemen çalışır) +2. Aşama: Basit bir register allocator + x86-64 kod üretici +3. Aşama: Orta seviye optimizasyonlar ekle +4. Aşama: ARM64 desteği ekle + +--- + +#### 4. QBE (Quick Backend) + +**Nedir**: LLVM'den 10 kat daha hızlı, hafif bir derleyici backend'i. cproc, harecc gibi C derleyicileri tarafından kullanılır. + +**Artıları**: +- LLVM'den çok daha hafif (birkaç MB) +- Hızlı kod üretimi (LLVM'den ~10x) +- Makul optimizasyonlar (register allocation, copy propagation, memory folding) +- x86-64 ve ARM64 desteği +- Basit SSA-tabanlı IR + +**Eksileri**: +- C'de yazılmış, FFI gerektirir +- Optimizasyonlar LLVM kadar agresif değil +- Dokümantasyon İngilizce, küçük topluluk +- 32-bit ve RISC-V desteği deneysel +- Hata ayıklama bilgisi (DWARF) desteği yok + +**Karar**: ✅ **Orta vadede en iyi seçenek**. Custom backend yazılana kadar QBE ideal bir ara çözüm. + +--- + +#### 5. Cranelift (WebAssembly odaklı) + +**Nedir**: Bytecode Alliance tarafından geliştirilen, Rust'ta yazılmış JIT/AOT derleyici backend'i. Wasmtime'ın JIT motoru. + +**Artıları**: +- Hızlı JIT derlemesi +- x86-64, ARM64, RISC-V64 desteği +- Güvenlik odaklı (memory safety, sandboxing) +- Modern mimari (SSA, e-graphs) + +**Eksileri**: +- Rust'ta yazılmış, C++ projesine entegrasyon zor +- WebAssembly odaklı, native diller için ikincil öncelik +- Dokümantasyon sınırlı, hızlı değişiyor +- Optimizasyonlar LLVM kadar agresif değil + +**Karar**: ❌ saQut gibi C++ tabanlı bir proje için uygun değil. + +--- + +#### 6. C Koduna Transpile Etme + +**Nedir**: AST'yi doğrudan C kaynak koduna çevirip GCC/Clang ile derlemek. + +**Artıları**: +- **En hızlı prototip yolu**: Hemen çalışan bir sistem +- GCC/Clang optimizasyonlarından bedava faydalanma +- Hata ayıklama kolay (üretilen C kodunu okuyabilirsin) +- Her platformda çalışır (C derleyicisi olan her yerde) + +**Eksileri**: +- İki aşamalı derleme (yavaş) +- saQut'a özgü optimizasyonlar kaybolabilir +- Debug bilgisi orijinal kaynak koda değil, üretilen C koduna işaret eder +- Dil özellikleri C'nin sınırları içinde kalır +- Hata mesajları C derleyicisinden gelir, anlaşılması zor + +**Karar**: ✅ **Birinci aşama için ideal**. Hemen çalışan bir sistem kurup, sonra native backend'e geçiş yapılabilir. + +--- + +### Nihai Karar ve Yol Haritası + +``` +┌─────────────┐ ┌──────────────────┐ ┌─────────────────┐ +│ Aşama 1 │────▶│ Aşama 2 │────▶│ Aşama 3 │ +│ C Transpile│ │ QBE Backend │ │ Custom Backend │ +│ (hemen) │ │ (orta vade) │ │ (uzun vade) │ +└─────────────┘ └──────────────────┘ └─────────────────┘ + 1-2 hafta 2-4 hafta 2-6 ay +``` + +**Aşama 1 — C Transpile**: Hemen başlanabilir. Mevcut AST ve IR'yi C koduna çevirip GCC ile derlemek. Bu sayede: +- Dilin semantiği test edilebilir +- Gerçek programlar çalıştırılabilir +- Backend baskısı olmadan dil geliştirmeye devam edilebilir + +**Aşama 2 — QBE**: Dil yeterince olgunlaştığında, QBE ile native kod üretimi: +- C derleyicisi bağımlılığı kalkar +- Derleme hızı artar +- Temel optimizasyonlar QBE tarafından yapılır + +**Aşama 3 — Custom Backend**: Dil tamamen stabilize olduğunda: +- Tam kontrol +- saQut'a özgü optimizasyonlar +- Minimum bağımlılık + +--- + +## ADR-002: Parser Mimarisi — Neden Pratt? + +### Bağlam + +C/C++/Java gibi diller genellikle **recursive descent** veya **LALR(1) parser** (yacc/bison) ile ifade ayrıştırması yapar. saQut için hangi yaklaşım seçilmeli? + +### Değerlendirilen Seçenekler + +#### Recursive Descent (elle yazılmış) +- **+** Basit, okunabilir, hata mesajları kontrol edilebilir +- **+** Java/C# benzeri dillerde yaygın +- **−** Operatör önceliğini yönetmek için çok sayıda fonksiyon gerekir (parseAddExpr, parseMulExpr, parseUnaryExpr...) +- **−** Yeni operatör eklemek zor + +#### Pratt Parser (Top-Down Operator Precedence) +- **+** Operatör önceliğini merkezi bir tabloda yönetir +- **+** Yeni operatör eklemek tek satır (tabloya ekle + NUD/LED yaz) +- **+** Kod tekrarı yok, single source of truth +- **+** Hem prefix hem infix hem postfix operatörleri aynı çerçevede işler +- **−** Recursive descent kadar yaygın bilinmez +- **−** İlk bakışta anlaşılması zor gelebilir + +#### LALR(1) / Parser Generator +- **+** Gramer tanımı net +- **−** Hata mesajları anlaşılmaz +- **−** Shift/reduce conflict'leri ile uğraşmak zaman kaybı +- **−** Generated code okunamaz, debug zor + +### Karar + +✅ **Pratt Parser** seçildi çünkü: +1. saQut'un operatör seti geniş ve büyüyebilir (ileride `|>`, `?.`, `??` gibi özel operatörler eklenebilir) +2. Operatör önceliğini merkezi bir tabloda (TokenPrecedence) yönetmek, kod tekrarını önler +3. Hem ifadeler hem prefix/postfix operatörler aynı çerçevede işlenir +4. Recursive descent'in statement tarafı için kullanılması, Pratt'in ifade tarafı için kullanılması hibrit bir yaklaşım sunar (en iyi iki dünya) + +--- + +## ADR-003: Neden Header-Only? + +### Bağlam + +saQut derleyicisi tüm `.hpp` dosyalarında hem tanım (declaration) hem gerçekleme (implementation) içerir. Geleneksel C++ projelerinde `.hpp` + `.cpp` ayrımı yapılır. + +### Değerlendirme + +**Header-only avantajları**: +- Tek dosya = tek gerçeklik. Tanım ve gerçekleme arasında senkronizasyon sorunu olmaz +- `inline` anahtar kelimesi ile ODR (One Definition Rule) ihlali önlenir +- Derleme süreci basit: tek bir `.cpp` dosyası (main.cpp) her şeyi include eder +- Dağıtım kolay: Tüm derleyici tek bir header koleksiyonu + +**Header-only dezavantajları**: +- Tüm kod her yerde görünür (ama zaten açık kaynak) +- Büyük projelerde derleme süresi uzayabilir +- Circular dependency riski (ama include guard'lar ile yönetiliyor) + +### Karar + +✅ **Header-only** devam ediyor. saQut şu anda küçük bir proje ve bu yaklaşım: +1. Kodun anlaşılmasını kolaylaştırır (dosyalar arası atlama yok) +2. Build sistemini basitleştirir +3. Hızlı iterasyon sağlar + +Gelecekte proje çok büyürse (100K+ satır), `.hpp` + `.cpp` ayrımına geçilebilir. + +--- + +## ADR-004: Token Sistemi — Neden Polymorphic Token Sınıfları? + +### Bağlam + +Tokenizer farklı token tipleri için farklı veri alanlarına ihtiyaç duyar: +- NumberToken: `isFloat`, `hasEpsilon`, `base` +- StringToken: `context`, `size` +- IdentifierToken: `context`, `size` + +İki yaklaşım var: +1. **Tagged union**: Tek bir Token struct'ı, içinde `union` veya `std::variant` +2. **Class hierarchy**: Base Token sınıfı, her tip için alt sınıf + +### Karar + +✅ **Class hierarchy** seçildi çünkü: +1. C++'ta doğal ve yaygın bir pattern +2. Yeni token tipi eklemek kolay (yeni sınıf türet) +3. Tip güvenliği: `dynamic_cast` veya `gettype()` string karşılaştırması ile tip kontrolü +4. Bellek yönetimi açık: heap'te `new` ile oluşturulup pointer olarak saklanıyor + +⚠️ **Bilinen sorun**: `ParserToken` yapısı eskiden `Token token` (değer kopyası) tutuyordu, bu object slicing'e neden oluyordu (alt sınıf verileri kayboluyordu). `commit 40579ca` ile `Token* token` pointer'a geçildi. + +--- + +## ADR-005: IR Tasarımı + +### Bağlam + +Mevcut IR (src/ir/ir.hpp) sadece 5 opcode içeriyor: `declare`, `mathadd`, `mathsub`, `mathmul`, `mathdiv`. Bu bir "virtual register" IR'si — her işlem yeni bir sanal register'a yazılır. + +### Mevcut Durum + +``` +OPCode: declare, mathadd, mathsub, mathmul, mathdiv +Param: {isRegister: bool, value: variant} +IROpData: {op: OPCode, targetReg: int, arg1-3: Param} +``` + +### Eksikler (TODO) + +- [ ] Kontrol akışı: `branch`, `jump`, `compare` +- [ ] Fonksiyon çağrısı: `call`, `ret` +- [ ] Bellek: `load`, `store`, `alloc` +- [ ] Tip bilgisi: IR opcode'ları tipleri taşımıyor +- [ ] Debug bilgisi: Kaynak satır eşlemesi yok + +### Gelecek Yön + +IR'nin iki katmanlı olması planlanıyor: +- **HeavyIR**: Debug bilgisi, tip bilgisi, değişken isimleri içeren zengin IR (interpreter/debug için) +- **LightIR**: Sadece çalıştırma için gerekli minimum IR (JIT/compiler için) + +--- + +## Performans Karşılaştırması: JIT vs AOT + +| Kriter | JIT (Lightning/Custom) | AOT (LLVM/QBE/Custom) | Transpile (C) | +|---|---|---|---| +| İlk derleme hızı | ⚡ Çok hızlı (mikrosaniye) | 🐢 Yavaş (saniye) | 🐢 Orta | +| Çalışma hızı | 🐢 Optimizasyonsuz | ⚡ Yüksek optimizasyon | ⚡ GCC/Clang seviyesi | +| Bellek kullanımı | ✅ Düşük | ⚠️ Yüksek (LLVM) | ✅ Derleme anında yok | +| Debug kolaylığı | ⚠️ Makine kodu seviyesi | ✅ Kaynak eşlemesi var | ⚠️ C kodu üzerinden | +| Platform bağımsızlığı | ⚠️ Her mimariye özel | ✅ LLVM her yerde | ✅ C her yerde | +| Geliştirme süresi | ⚡ Kısa (Lightning ile) | 🐢 Uzun (LLVM öğrenme) | ⚡ En kısa | + +### Sonuç + +**Prototip için**: C transpile > QBE > JIT +**Üretim için**: Custom backend > QBE > LLVM +**Dinamik kod (REPL) için**: JIT (Lightning veya custom) + +--- + +## Gelecek Özellikler (Roadmap) + +### Kısa Vade (1-4 hafta) +- [ ] C koduna transpile (Aşama 1 backend) +- [ ] Tip kontrolü (symbol table) +- [ ] Fonksiyon parametreleri +- [ ] else-if zincirleri +- [ ] Mantıksal operatörler (&&, ||) kısa devre değerlendirmesi + +### Orta Vade (1-3 ay) +- [ ] QBE backend entegrasyonu +- [ ] Array/dizi desteği +- [ ] Struct/record tipleri +- [ ] Import/include sistemi +- [ ] Hata mesajlarında kaynak satır gösterimi +- [ ] Basit optimizasyonlar (constant folding, dead code elimination) + +### Uzun Vade (3-12 ay) +- [ ] Custom native backend +- [ ] Interpreter modu (REPL) +- [ ] Debugger desteği (DWARF) +- [ ] Package yöneticisi +- [ ] LSP sunucusu (IDE desteği) +- [ ] Kendi kendini derleyebilme (self-hosting) + +--- + +## Mimari Prensipler + +1. **Tek sorumluluk**: Her dosya/class tek bir iş yapar + - Lexer: Karakter → sayı/konum + - Tokenizer: Lexer → Token + - Parser: Token → AST + - IR Generator: AST → IR + - (Gelecek) Code Generator: IR → Makine kodu / C kodu + +2. **Bağımlılık yönü**: Tek yönlü + ``` + Lexer ← Tokenizer ← ParserToken ← AST ← Parser ← IR + ``` + +3. **Test edilebilirlik**: Her katman bağımsız test edilebilir + - Lexer: `scan("42")` → `INumber{42, base=10}` + - Tokenizer: `scan("1+2")` → `[NumberToken, OperatorToken, NumberToken]` + - Parser: `parse(tokens)` → `ASTNode*` + - IR: `parse(ast)` → `vector` + +4. **Hata toleransı**: Parser mümkün olduğunca ilerlemeye çalışır, ilk hatada durmaz (ileride panic mode eklenecek) + +5. **Kademeli geliştirme**: Her aşamada çalışan bir sistem. "Big bang" entegrasyon yok. diff --git a/saqut b/saqut index 49c73e85aa5f50c5b7bc4de41f4a408af2a3985f..9ed7f68a2f52b3423d6c43c47d829108237083a4 100755 GIT binary patch literal 781728 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�LrKtTgi<+WVWp*B* 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 z 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 z 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 0); + return x; +} diff --git a/src/ir/ir.hpp b/src/ir/ir.hpp index d369221..7881deb 100644 --- a/src/ir/ir.hpp +++ b/src/ir/ir.hpp @@ -1,3 +1,54 @@ +// ============================================================================ +// saQut Compiler — Intermediate Representation (Ara Gösterim) +// ============================================================================ +// +// DİZİN: src/ir/ir.hpp +// KATMAN: Katman 4 — AST'yi alır, IR üretir +// BAĞIMLI: AST (src/parser/ast.hpp), dolaylı olarak Tokenizer ve Parser +// KULLANAN: main.cpp (debug çıktısı), gelecekte Code Generator +// +// AMAÇ: +// Zengin AST'yi, çalıştırılabilir düşük seviyeli komutlara (IR) dönüştürür. +// IR, bir "virtual register machine" (sanal kayıtçı makinesi) modelidir. +// +// IR MODELİ: +// Her işlem (instruction) şu bileşenlerden oluşur: +// - opcode: İşlem kodu (mathadd, mathsub, mathmul, mathdiv, declare) +// - targetReg: Sonucun yazılacağı sanal register numarası +// - arg1-arg3: İşlem parametreleri (register veya sabit değer) +// +// Sanal register'lar sınırsızdır (gerçek register tahsisi sonraki aşamada). +// Bu yaklaşım, register allocation'ı ayrı bir probleme dönüştürür. +// +// ADR-005: IR Tasarımı +// İki katmanlı IR planlanıyor: +// - LightIR: Sadece çalıştırma için minimum bilgi (JIT/compiler) +// - HeavyIR: Debug bilgisi, tip bilgisi, değişken isimleri (interpreter/debug) +// +// Mevcut IR, LightIR'in embriyonik halidir. +// +// MEVCUT DURUM: +// Desteklenen AST düğümleri: +// ✅ BinaryExpression (sadece +, -, *, /) +// ✅ Literal (NumberToken) +// ✅ Program, FunctionDecl, Block (çocukları dolaşır) +// ✅ ExpressionStatement, VariableDecl, ReturnStatement +// ✅ IfStatement, WhileStatement, ForStatement, DoWhileStatement +// ❌ Kontrol akışı (branch/jump/compare) — TODO +// ❌ Fonksiyon çağrısı (call/ret) — TODO +// ❌ Mantıksal/kıyaslama operatörleri — TODO +// +// BİLİNEN SINIRLAMALAR (TODO): +// TODO: Kontrol akışı opcode'ları: br, jmp, cmp, br_eq, br_lt, vb. +// TODO: Fonksiyon çağrısı: call, ret, param +// TODO: Bellek: load, store, alloca +// TODO: Tip bilgisi: IR opcode'ları tipleri taşımıyor +// TODO: Float/int ayrımı düzgün değil (processNumber void* döndürüyor) +// TODO: String, bool, null literal'ları işlenmiyor +// TODO: Identifier (değişken okuma) işlenmiyor +// +// ============================================================================ + #ifndef SAQUT_IR #define SAQUT_IR @@ -5,41 +56,95 @@ #include #include "parser/ast.hpp" -// ============================================================ -// IR opcodes -// ============================================================ - +// ============================================================================ +// OPCode — İşlem Kodları +// ============================================================================ +// +// Sanal makinenin komut seti. Her komut bir veya daha fazla sanal register +// üzerinde işlem yapar. +// +// mathadd/mathsub/mathmul/mathdiv: arg1 ve arg2'yi işle, targetReg'e yaz +// declare: bir sabit değeri (literal) targetReg'e yükle +// +// TODO: cmp, br, jmp, call, ret, load, store, alloca eklenecek +// enum class OPCode { - mathadd, - mathsub, - mathdiv, - mathmul, - declare + mathadd, // targetReg = arg1 + arg2 + mathsub, // targetReg = arg1 - arg2 + mathdiv, // targetReg = arg1 / arg2 + mathmul, // targetReg = arg1 * arg2 + declare // targetReg = literal değer (arg1) }; +// ============================================================================ +// Param — İşlem Parametresi +// ============================================================================ +// +// Bir IR komutunun girdisi. İki tür olabilir: +// isRegister=true → value bir register numarasıdır (int) +// isRegister=false → value bir sabit değerdir (int veya float) +// +// std::variant kullanımı: Derleme zamanı tip güvenliği sağlar. +// C union'dan farkı: Hangi tipin aktif olduğunu bilir, yanlış erişimi engeller. +// struct Param { - bool isRegister; - std::variant value; + bool isRegister; // true: register referansı, false: sabit değer + std::variant value; // Değer (register numarası veya sabit) }; +// ============================================================================ +// IROpData — Tek Bir IR Komutu +// ============================================================================ +// +// Sanal makinenin bir instruction'ı. 3 adrese kadar (3-address code) destekler. +// Çoğu işlem 2 parametre kullanır (binary ops), declare 1 parametre kullanır. +// struct IROpData { - OPCode op; - int targetReg; - Param arg1; - Param arg2; - Param arg3; + OPCode op; // İşlem kodu + int targetReg; // Sonuç register'ı (sanal, sınırsız) + Param arg1; // Birinci parametre + Param arg2; // İkinci parametre + Param arg3; // Üçüncü parametre (ileride kullanım için) }; +// ============================================================================ +// Identifier — Sanal Register Yöneticisi +// ============================================================================ +// +// Sınırsız sanal register tahsisi. Her yeni değer için monoton artan bir +// numara verir. Gerçek register tahsisi (register allocation) daha sonra +// yapılacak — bu aşamada sadece unique ID üretir. +// +// last: Şu ana kadar tahsis edilmiş en yüksek register numarası. +// ++identifier.last → yeni register numarası. +// struct Identifier { - int last = 0; + int last = 0; // Son tahsis edilen register numarası }; -// ============================================================ -// CodeGenerator: AST → IR -// ============================================================ - +// ============================================================================ +// CodeGenerator — AST → IR Dönüştürücü +// ============================================================================ +// +// AST ağacını dolaşır (tree walk) ve her düğüm için karşılık gelen IR +// komutlarını üretir. Ziyaretçi deseni (visitor pattern) benzeri bir +// yaklaşım kullanır: parse() metodu ASTKind enum'ına göre dispatch eder. +// +// AKIŞ: +// 1. parse(rootAST) çağrılır +// 2. rootAST->kind'e göre uygun parse* metodu seçilir +// 3. Alt düğümler recursive olarak işlenir +// 4. Her BinaryExpression/Literal için IR komutu eklenir +// 5. Sonuç: IROpDatas vektörü doldurulur +// class CodeGenerator { private: + // ---------------------------------------------------------------------- + // processNumber: NumberToken'dan C++ native sayı üret. + // + // Neden void*? Hem int hem float döndürebilmek için. + // TODO: std::variant ile değiştir. + // ---------------------------------------------------------------------- void* processNumber(NumberToken* num, const std::string& rawStr) { if (num->isFloat || num->hasEpsilon) return new float(std::strtof(rawStr.c_str(), nullptr)); @@ -47,9 +152,16 @@ private: } public: - Identifier identifier; - std::vector IROpDatas; + Identifier identifier; // Sanal register yöneticisi + std::vector IROpDatas; // Üretilen IR komutları + // ------------------------------------------------------------------ + // parse: Ana dispatch fonksiyonu. AST düğüm tipine göre yönlendirir. + // + // BUG FIX (commit 40579ca): null giriş kontrolü eklendi. + // BinaryExpression'da Left null olabilir (unary operatörlerde). + // parse(nullptr) segfault'a neden oluyordu. + // ------------------------------------------------------------------ int parse(ASTNode* ast) { if (!ast) return 0; switch (ast->kind) { @@ -73,46 +185,46 @@ public: return parseIf((IfStatementNode*)ast); case ASTKind::WhileStatement: return parseWhile((WhileStatementNode*)ast); + case ASTKind::ForStatement: + return parseFor((ForStatementNode*)ast); + case ASTKind::DoWhileStatement: + return parseDoWhile((DoWhileStatementNode*)ast); default: return 0; } } + // --- Yapısal düğümler: çocukları dolaş --- + int parseProgram(ProgramNode* prog) { - for (auto* child : prog->getChildren()) - parse(child); + for (auto* child : prog->getChildren()) parse(child); return 0; } int parseFunctionDecl(FunctionDeclNode* fn) { - for (auto* child : fn->getChildren()) - parse(child); + for (auto* child : fn->getChildren()) parse(child); return 0; } int parseBlock(BlockNode* block) { - for (auto* child : block->getChildren()) - parse(child); + for (auto* child : block->getChildren()) parse(child); return 0; } int parseReturn(ReturnStatementNode* ret) { - if (ret->value) - return parse(ret->value); + if (ret->value) return parse(ret->value); return 0; } int parseVariableDecl(VariableDeclNode* vd) { - if (vd->initExpr) - return parse(vd->initExpr); + if (vd->initExpr) return parse(vd->initExpr); return 0; } int parseIf(IfStatementNode* ifn) { parse(ifn->condition); parse(ifn->thenBranch); - if (ifn->elseBranch) - parse(ifn->elseBranch); + if (ifn->elseBranch) parse(ifn->elseBranch); return 0; } @@ -122,6 +234,29 @@ public: return 0; } + int parseFor(ForStatementNode* fs) { + if (fs->init) parse(fs->init); + if (fs->condition) parse(fs->condition); + if (fs->update) parse(fs->update); + parse(fs->body); + return 0; + } + + int parseDoWhile(DoWhileStatementNode* dw) { + parse(dw->body); + if (dw->condition) parse(dw->condition); + return 0; + } + + // ------------------------------------------------------------------ + // parseBinaryExpr: İkili işlem ifadesini IR'ye dönüştür. + // + // Sadece +, -, *, / operatörleri desteklenir. + // Diğer operatörler (karşılaştırma, mantıksal) şimdilik es geçilir. + // + // BUG FIX (commit 438bc0e): Left veya Right null olabilir (unary prefix). + // parse(nullptr) çağrısı segfault yapıyordu. Ternary ile koruma eklendi. + // ------------------------------------------------------------------ int parseBinaryExpr(BinaryExpressionNode* bin) { OPCode op; switch (bin->Operator) { @@ -129,7 +264,7 @@ public: case TokenType::PLUS: op = OPCode::mathadd; break; case TokenType::MINUS: op = OPCode::mathsub; break; case TokenType::SLASH: op = OPCode::mathdiv; break; - default: return 0; + default: return 0; // Desteklenmeyen operatör } int left = bin->Left ? parse(bin->Left) : 0; @@ -145,6 +280,16 @@ public: return identifier.last; } + // ------------------------------------------------------------------ + // parseLiteral: Sayısal literal'ı IR'ye dönüştür. + // + // BUG FIX (commit 40579ca): &lit->parserToken.token → lit->parserToken.token + // ParserToken artık Token* tutuyor, & gereksiz (ve hatalı). + // + // BİLİNEN SORUN: Sadece NumberToken destekleniyor. + // StringToken, KeywordToken (true/false/null) için cast hatalı. + // TODO: Token tipine göre dispatch ekle. + // ------------------------------------------------------------------ int parseLiteral(LiteralNode* lit) { NumberToken* num = (NumberToken*)lit->parserToken.token; @@ -171,4 +316,4 @@ public: } }; -#endif +#endif // SAQUT_IR diff --git a/src/lexer/lexer.hpp b/src/lexer/lexer.hpp index dadb815..b8f4b5b 100644 --- a/src/lexer/lexer.hpp +++ b/src/lexer/lexer.hpp @@ -1,3 +1,62 @@ +// ============================================================================ +// saQut Compiler — Lexer (Karakter Seviyesinde Tarayıcı) +// ============================================================================ +// +// DİZİN: src/lexer/lexer.hpp +// KATMAN: Katman 1 — Derleyici pipeline'ının ilk aşaması +// BAĞIMLI: Yok (sadece standart kütüphane) +// KULLANAN: Tokenizer (src/tokenizer/tokenizer.hpp) +// +// AMAÇ: +// Ham kaynak kodu (std::string) karakter karakter tarayarak: +// 1. Karakter konumunu takip eder (offset) +// 2. Backtracking (geri alma) desteği ile desen eşleme yapar +// 3. Sayısal literal'ları okur ve sınıflandırır (decimal, hex, binary, octal, float) +// 4. Boşluk karakterlerini atlar +// 5. Satır/sütun bilgisi sağlar (hata mesajları için temel) +// +// ADR-006: Neden Kendi Lexer'ımız? +// - std::istringstream veya regex kullanmak yerine, tam kontrol sağlayan +// sıfırdan bir lexer yazdık. +// - Backtracking: offsetMap ile konum yığını tutar, denenen bir eşleşme +// başarısız olursa geri alınabilir. Bu özellik std::istream'de yoktur. +// - Performans: Sanal fonksiyon çağrısı yok, her şey inline. +// - Hata ayıklama: Her karakter okuması kontrol edilebilir. +// +// TASARIM KARARLARI: +// 1. offsetMap (std::vector): İç içe backtracking için yığın. +// beginPosition() → yığına mevcut konumu ekler +// acceptPosition() → yığındaki son konumu kalıcı yapar +// rejectPosition() → yığındaki son konumu atar (geri al) +// Bu sayede "dene, başarısız olursa geri al" patterni çalışır. +// +// 2. getchar() iki overload: +// - getchar(): mevcut konumdaki karakteri okur +// - getchar(int offset): mevcut konum + offset'teki karakteri okur +// İkincisi özellikle keyword kontrolünde önemlidir: +// "do" kelimesini gördükten sonra, bunun "double"ın başlangıcı olmadığını +// kontrol etmek için keyword sonrası karaktere bakılır. +// +// 3. isEnd(): offset >= size ile kontrol. offset her zaman [0, size] aralığında. +// size konumunda EOF (end of file) anlamına gelir. +// +// 4. readNumeric(): C/C++/Java sayı formatlarını destekler: +// - Decimal: 42, -3, +7 +// - Hex: 0xFF, 0X1A +// - Binary: 0b1010, 0B1100 +// - Octal: 0777 (0 ile başlayan ve 8-9 içermeyen) +// - Float: 3.14, .5, 1e10, 2.5E-3 +// - Negatif/Pozitif: -42, +3 (baştaki işaret) +// +// BİLİNEN SINIRLAMALAR (TODO): +// TODO: Satır/sütun takibi eklenmeli (şu anda sadece offset var) +// TODO: Unicode/UTF-8 desteği (şu anda sadece ASCII) +// TODO: ' char literal'ı okunamıyor +// TODO: Sayısal alt çizgi (_) ayracı: 1_000_000 formatı +// TODO: Binary floating point: 0b1.1p10 formatı (C99 hexfloat) +// +// ============================================================================ + #ifndef SAQUT_LEXER #define SAQUT_LEXER @@ -5,83 +64,172 @@ #include #include +// ============================================================================ +// INumber — Ara Sayısal Veri Yapısı +// ============================================================================ +// +// Lexer'ın readNumeric() fonksiyonu tarafından döndürülür. +// Tokenizer bu yapıyı NumberToken'a dönüştürür. +// +// Neden ayrı bir struct? Lexer katmanı Token sınıflarından haberdar değil. +// Bağımlılık yönü: Lexer ← Tokenizer. Lexer hiçbir üst katmanı include etmez. +// +// ALANLAR: +// start, end : Kaynak koddaki başlangıç/bitiş konumları (offset) +// token : Sayının ham string hali (örn: "0xFF", "3.14", "1e10") +// isFloat : Ondalıklı sayı mı? (nokta veya epsilon içeriyor mu) +// hasEpsilon : Bilimsel gösterim mi? (e/E içeriyor mu) +// base : Sayı tabanı: 2, 8, 10, veya 16 +// - 0x/0X ile başlarsa 16 +// - 0b/0B ile başlarsa 2 +// - 0 ile başlayıp 8-9 içermiyorsa 8 +// - diğer her şey 10 +// positive : Pozitif mi? (başında - işareti yoksa true) +// struct INumber { - int start = 0; - int end = 0; - std::string token; - bool isFloat = false; - bool hasEpsilon = false; - int base = 10; - bool positive = true; + int start = 0; // Kaynak koddaki başlangıç offset'i + int end = 0; // Kaynak koddaki bitiş offset'i + std::string token; // Sayının ham metni (örn: "42", "0xFF", "3.14e-2") + bool isFloat = false; // true ise float/double literal + bool hasEpsilon = false; // true ise bilimsel gösterim (örn: 1e10) + int base = 10; // Sayı tabanı: 2, 8, 10, 16 + bool positive = true; // false ise sayı negatif }; +// ============================================================================ +// Lexer — Karakter Seviyesinde Tarayıcı +// ============================================================================ +// +// Derleyici pipeline'ının en alt katmanı. Ham string üzerinde çalışır. +// Üst katmanlara (Tokenizer) karakter okuma ve konum yönetimi hizmeti sunar. +// +// DURUM DEĞİŞKENLERİ: +// input : Taranan kaynak kodun tamamı (string kopyası, değişmez) +// size : input.length() önbelleği (performans: her seferinde hesaplamaz) +// offset : Mevcut okuma konumu. 0 = ilk karakter, size = EOF +// offsetMap : Backtracking yığını. İç içe beginPosition/acceptPosition/rejectPosition +// +// PERFORMANS NOTU: +// Tüm metotlar inline tanımlanmıştır. Sanal fonksiyon çağrısı yoktur. +// offset değişiklikleri O(1)'dir. +// include() metodu O(n) karakter karşılaştırması yapar (n = kelime uzunluğu). +// class Lexer { public: - std::string input; - int size = 0; - int offset = 0; - std::vector offsetMap; + // --- Ham Veri --- + std::string input; // Kaynak kodun tamamı + int size = 0; // input.length() önbelleği + int offset = 0; // Mevcut okuma konumu (0 = başlangıç) + std::vector offsetMap; // Backtracking yığını - // --- Position tracking --- - void beginPosition(); - int getLastPosition(); - void acceptPosition(); - void setLastPosition(int n); - void rejectPosition(); + // --- Pozisyon Yönetimi (Backtracking API) --- + // + // Kullanım örneği: + // lexer.beginPosition(); // konumu kaydet + // if (lexer.include("for", false)) // dene (false = eşleşse de geri al) + // lexer.acceptPosition(); // başarılı → kalıcı yap + // else + // lexer.rejectPosition(); // başarısız → geri al - // --- Reading --- - bool isEnd(); - int* positionRange(); - std::string getPositionRange(); + void beginPosition(); // Şu anki konumu yığına kaydet + int getLastPosition(); // Yığındaki son konumu döndür + void acceptPosition(); // Yığındaki son konumu kalıcı yap (apply) + void setLastPosition(int n); // Yığındaki son konumu n olarak değiştir + void rejectPosition(); // Yığındaki son konumu at (discard) + + // --- Dosya Sonu ve Pozisyon Sorgulama --- + bool isEnd(); // offset >= size ise true (EOF) + int* positionRange(); // [start, end] offset aralığı (tahsis eder, silinmeli!) + std::string getPositionRange(); // Pozisyon aralığındaki metni döndür + + // --- Desen Eşleme --- + // include(): Belirtilen kelime mevcut konumda başlıyor mu? + // accept=true (varsayılan): eşleşirse konum ilerletilir + // accept=false: eşleşse bile konum geri alınır (keyword kontrolü için) + // Örnek: include("for", false) → "for" ile başlıyor mu? konumu değiştirme. bool include(std::string word, bool accept = true); - int getOffset(); - int setOffset(int n); - char getchar(int additionalOffset); - char getchar(); - void nextChar(); - void toChar(int n); + // --- Konum Okuma/Yazma --- + int getOffset(); // Mevcut offset'i döndür + int setOffset(int n); // Offset'i n olarak ayarla, yeni değeri döndür - void setText(std::string input); - void skipWhiteSpace(); - bool isNumeric(); - INumber readNumeric(); + // --- Karakter Okuma --- + char getchar(int additionalOffset); // offset + ek'teki karakteri oku + char getchar(); // Mevcut offset'teki karakteri oku + void nextChar(); // offset'i 1 ilerlet (EOF kontrolü yapar) + void toChar(int n); // offset'i n kadar ilerlet + + // --- Üst Seviye İşlemler --- + void setText(std::string input); // Yeni kaynak kodu yükle + void skipWhiteSpace(); // Boşluk/sekme/satırsonu karakterlerini atla + bool isNumeric(); // Mevcut karakter 0-9 aralığında mı? + INumber readNumeric(); // Sayı literal'ı oku ve INumber olarak döndür }; -// ============================================================ -// Implementation -// ============================================================ +// ============================================================================ +// GERÇEKLEME (Implementation) +// ============================================================================ +// Tüm metotlar inline olarak aşağıda tanımlanmıştır. +// Derleme modeli: header-only. main.cpp bu dosyayı include eder. +// ============================================================================ -void Lexer::beginPosition() { +// -------------------------------------------------------------------------- +// beginPosition: Mevcut offset'i yığına kaydet. +// İç içe çağrılabilir: 3 kere beginPosition → 3 elemanlı yığın. +// -------------------------------------------------------------------------- +inline void Lexer::beginPosition() { offsetMap.push_back(getLastPosition()); } -int Lexer::getLastPosition() { +// -------------------------------------------------------------------------- +// getLastPosition: Yığının tepesindeki konumu döndür. +// Yığın boşsa mevcut offset'i döndür (başlangıç durumu). +// -------------------------------------------------------------------------- +inline int Lexer::getLastPosition() { if (offsetMap.empty()) return offset; return offsetMap.back(); } -void Lexer::acceptPosition() { +// -------------------------------------------------------------------------- +// acceptPosition: Yığındaki son geçici konumu kalıcı yap. +// Örnek: offsetMap=[5,10], offset=15 → offsetMap.back()=10 olur. +// Bu sayede include() denemesi başarılı olduğunda konum ilerletilmiş olur. +// -------------------------------------------------------------------------- +inline void Lexer::acceptPosition() { int t = offsetMap.back(); setLastPosition(t); } -void Lexer::setLastPosition(int n) { +// -------------------------------------------------------------------------- +// setLastPosition: Yığının tepesini veya offset'i değiştir. +// -------------------------------------------------------------------------- +inline void Lexer::setLastPosition(int n) { if (offsetMap.empty()) offset = n; else offsetMap.back() = n; } -bool Lexer::isEnd() { +// -------------------------------------------------------------------------- +// isEnd: Dosya sonuna gelindi mi? offset >= size. +// -------------------------------------------------------------------------- +inline bool Lexer::isEnd() { return size <= getOffset(); } -void Lexer::rejectPosition() { +// -------------------------------------------------------------------------- +// rejectPosition: Yığındaki son konumu at. Başarısız include() denemesi sonrası. +// -------------------------------------------------------------------------- +inline void Lexer::rejectPosition() { offsetMap.pop_back(); } -int* Lexer::positionRange() { +// -------------------------------------------------------------------------- +// positionRange: Yığındaki en dış ve en iç konumu [start, end] olarak döndür. +// UYARI: new int[2] ile heap'te tahsis eder. Çağıran sorumludur. +// TODO: std::pair veya yapı kullanarak tahsisi kaldır. +// -------------------------------------------------------------------------- +inline int* Lexer::positionRange() { int len = offsetMap.size(); if (len == 0) return new int[2]{0, offset}; @@ -90,7 +238,10 @@ int* Lexer::positionRange() { return new int[2]{offsetMap[len - 2], offsetMap[len - 1]}; } -std::string Lexer::getPositionRange() { +// -------------------------------------------------------------------------- +// getPositionRange: positionRange() aralığındaki metni string olarak döndür. +// -------------------------------------------------------------------------- +inline std::string Lexer::getPositionRange() { int* a = positionRange(); std::string mem; for (int i = a[0]; i < a[1]; i++) @@ -98,7 +249,25 @@ std::string Lexer::getPositionRange() { return mem; } -bool Lexer::include(std::string word, bool accept) { +// -------------------------------------------------------------------------- +// include: Belirtilen kelime mevcut konumda başlıyor mu? +// +// Algoritma: +// 1. beginPosition() ile konumu kaydet +// 2. Kelimenin her karakterini sırayla karşılaştır +// 3. Eşleşmezse veya EOF olursa → rejectPosition() ve false dön +// 4. Tüm karakterler eşleşirse: +// - accept=true ise → acceptPosition() (konum kalıcı ilerler) +// - accept=false ise → rejectPosition() (konum eski haline döner) +// 5. true dön +// +// Neden accept parametresi var? +// Tokenizer scope() fonksiyonu, keyword'leri kontrol ederken accept=false +// kullanır. Çünkü bir keyword eşleşmesi, aynı zamanda daha uzun bir +// keyword'ün parçası olabilir (örn: "do", "double"ın başlangıcı). +// Eğer include("do", true) kullanılırsa, konum ilerler ve geri alınamaz. +// -------------------------------------------------------------------------- +inline bool Lexer::include(std::string word, bool accept) { beginPosition(); for (size_t i = 0; i < word.size(); i++) { if (isEnd()) { @@ -118,16 +287,25 @@ bool Lexer::include(std::string word, bool accept) { return true; } -int Lexer::getOffset() { +// -------------------------------------------------------------------------- +// getOffset / setOffset: Konum erişimcileri. +// -------------------------------------------------------------------------- +inline int Lexer::getOffset() { return getLastPosition(); } -int Lexer::setOffset(int n) { +inline int Lexer::setOffset(int n) { setLastPosition(n); return getLastPosition(); } -char Lexer::getchar(int additionalOffset) { +// -------------------------------------------------------------------------- +// getchar(additionalOffset): offset + ek kadar ilerideki karakteri oku. +// Sınır kontrolü yapar: target >= size ise '\0' döndürür ve hata mesajı basar. +// Bu metot özellikle keyword sınır kontrolünde kullanılır: +// "do" eşleşti, sıradaki karakter 'u' ise bu "double" olabilir → keyword değil +// -------------------------------------------------------------------------- +inline char Lexer::getchar(int additionalOffset) { int target = getOffset() + additionalOffset; if (target >= size) { std::cerr << "Lexer hatası: sınır aşımı\n"; @@ -136,7 +314,7 @@ char Lexer::getchar(int additionalOffset) { return input.at(target); } -char Lexer::getchar() { +inline char Lexer::getchar() { int target = getOffset(); if (target >= size) { std::cerr << "Lexer hatası: sınır aşımı\n"; @@ -145,29 +323,40 @@ char Lexer::getchar() { return input.at(target); } -void Lexer::nextChar() { +// -------------------------------------------------------------------------- +// nextChar / toChar: Konum ilerletme. +// EOF kontrolü yapar — dosya sonundaysa ilerlemez. +// -------------------------------------------------------------------------- +inline void Lexer::nextChar() { if (!isEnd()) setOffset(getOffset() + 1); } -void Lexer::toChar(int n) { +inline void Lexer::toChar(int n) { if (!isEnd()) setOffset(getOffset() + n); } -void Lexer::setText(std::string text) { +// -------------------------------------------------------------------------- +// setText: Yeni kaynak kodu yükle. input ve size'ı günceller. +// -------------------------------------------------------------------------- +inline void Lexer::setText(std::string text) { input = text; size = text.length(); } -void Lexer::skipWhiteSpace() { +// -------------------------------------------------------------------------- +// skipWhiteSpace: Boşluk, sekme, satırsonu, satırbaşı karakterlerini atla. +// Yorum satırlarını atlamaz — bu Tokenizer'ın işi. +// -------------------------------------------------------------------------- +inline void Lexer::skipWhiteSpace() { while (!isEnd()) { switch (getchar()) { - case '\r': - case '\n': - case '\b': - case '\t': - case ' ': + case '\r': // carriage return (Windows satırsonu \r\n) + case '\n': // line feed (Unix satırsonu) + case '\b': // backspace + case '\t': // tab + case ' ': // boşluk nextChar(); break; default: @@ -176,15 +365,45 @@ void Lexer::skipWhiteSpace() { } } -bool Lexer::isNumeric() { +// -------------------------------------------------------------------------- +// isNumeric: Mevcut karakter bir rakam mı? (0-9) +// Pointer aritmetiği veya ASCII tablosu karşılaştırması yerine basit aralık +// kontrolü. Performans: O(1), branchless (modern derleyiciler optimize eder). +// -------------------------------------------------------------------------- +inline bool Lexer::isNumeric() { char c = getchar(); return (c >= '0' && c <= '9'); } -INumber Lexer::readNumeric() { +// -------------------------------------------------------------------------- +// readNumeric: Tam bir sayı literal'ı oku. +// +// Desteklenen formatlar (öncelik sırasıyla): +// 1. İşaret: -42, +3 (baştaki isteğe bağlı işaret) +// 2. 0x/0X: Hex (0xFF, 0X1A) +// 3. 0b/0B: Binary (0b1010) +// 4. 0 ile başlayan: Octal (0777) veya Float (0.5) +// 5. Ondalık: 42, 3.14 +// 6. Bilimsel: 1e10, 2.5E-3, 1.0e+5 +// +// Algoritma: +// 1. İsteğe bağlı işareti oku (+ veya -) +// 2. İlk karakter '0' ise → özel durum (hex/bin/octal/float kontrolü) +// 3. Ana döngü: rakamları, hex harflerini (a-f/A-F), nokta (.), epsilon (e/E) oku +// 4. Her karakterde taban uygunluğunu kontrol et (örn: octal'da 8-9 geçersiz) +// 5. İlk karakter '0' değilse → doğrudan decimal +// +// Özel durum: "0" takip eden karakter yoksa → tek haneli sayı, base=10. +// "0xFF" → hex, "0b10" → binary, "077" → octal, "0.5" → float. +// +// TODO: Hex float desteği (0x1.ffp10) — C99 standardı +// TODO: Sayısal ayraç: 1_000_000 — C++14/Java 7 +// -------------------------------------------------------------------------- +inline INumber Lexer::readNumeric() { INumber num; num.start = getLastPosition(); + // --- Adım 1: İsteğe bağlı işaret --- if (getchar() == '-') { nextChar(); num.positive = false; @@ -195,23 +414,24 @@ INumber Lexer::readNumeric() { num.positive = true; } + // --- Adım 2: İlk karakter '0' ise özel format kontrolü --- bool nextDot = false; if (getchar() == '0') { num.token.push_back('0'); nextChar(); char c = getchar(); switch (c) { - case 'x': case 'X': + case 'x': case 'X': // Hex: 0xFF, 0X1A num.token.push_back(c); num.base = 16; nextChar(); break; - case 'b': case 'B': + case 'b': case 'B': // Binary: 0b1010 num.token.push_back(c); num.base = 2; nextChar(); break; - case '.': + case '.': // Float: 0.5, 0.0 num.token.push_back(c); num.base = 10; nextDot = true; @@ -220,11 +440,15 @@ INumber Lexer::readNumeric() { break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': - // Octal: continue reading in the main loop + // Octal: 0777 — sonraki karakter octal rakam ise devam et num.base = 8; break; default: - // Just "0" — stop here + // Sadece "0" — takip eden karakter rakam değil. + // Hemen dön: base=10 (varsayılan). + // BUG FIX (commit 438bc0e): Eskiden bu dalda sıradaki karakter + // token'a ekleniyor ve base=8 yapılıyordu. Bu, "0;" durumunda + // ';' karakterinin sayıya eklenmesine neden oluyordu. num.end = getLastPosition(); return num; } @@ -232,6 +456,15 @@ INumber Lexer::readNumeric() { num.base = 10; } + // --- Adım 3: Ana okuma döngüsü --- + // Bu döngü, geçerli tabana uygun tüm karakterleri okur. + // Her karakter tipi için taban uygunluğu kontrol edilir: + // - 0-1: tüm tabanlar + // - 2-7: base >= 8 + // - 8-9: base >= 10 + // - a-f/A-F: base >= 16 + // - . (nokta): sadece ondalık, sadece bir kere + // - e/E: sadece ondalık ve hex (hex'te epsilon yok, direkt okunur) while (!isEnd()) { char c = getchar(); switch (c) { @@ -267,6 +500,8 @@ INumber Lexer::readNumeric() { } break; case '.': + // Nokta: Sadece bir kere izin verilir. + // .5 gibi başıboş noktalı sayılar için "0." öneki eklenir. if (!nextDot) { if (num.token.empty()) num.token += "0."; @@ -275,11 +510,15 @@ INumber Lexer::readNumeric() { nextDot = true; num.isFloat = true; } else { + // İkinci nokta → sayı bitti num.end = getLastPosition(); return num; } break; case 'e': case 'E': + // Epsilon (bilimsel gösterim): + // - Hex tabanda: epsilon DEĞİL, hex hanesi olarak okunur. + // - Decimal tabanda: 1e10, 2.5E-3 formatı. if (num.base == 16) { num.token.push_back(c); break; @@ -289,10 +528,12 @@ INumber Lexer::readNumeric() { num.token.push_back(c); nextChar(); c = getchar(); + // İsteğe bağlı işaret: e+10, E-3 if (c == '+' || c == '-') { num.token.push_back(c); nextChar(); } + // Epsilon sonrası rakamları oku while (!isEnd()) { c = getchar(); if (c >= '0' && c <= '9') { @@ -308,6 +549,7 @@ INumber Lexer::readNumeric() { num.end = getLastPosition(); return num; default: + // Tanınmayan karakter → sayı bitti num.end = getLastPosition(); return num; } @@ -317,4 +559,4 @@ INumber Lexer::readNumeric() { return num; } -#endif +#endif // SAQUT_LEXER diff --git a/src/main.cpp b/src/main.cpp index eb7eefc..2a6d5e0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,3 +1,30 @@ +// ============================================================================ +// saQut Compiler — Giriş Noktası (main) +// ============================================================================ +// +// DİZİN: src/main.cpp +// KATMAN: En üst — tüm alt katmanları birleştirir +// BAĞIMLI: Tokenizer, Parser, IR (ve dolaylı olarak Lexer, AST, Token) +// +// AMAÇ: +// Derleyici pipeline'ını başlatır: +// 1. source.sqt dosyasını oku +// 2. Lexing + Tokenizing +// 3. Parsing (AST üretimi) +// 4. IR üretimi +// 5. Sonuçları konsola yazdır (debug modu) +// +// KULLANIM: +// ./saqut → source.sqt dosyasını derler +// echo "1+2" > source.sqt && ./saqut → hızlı test +// +// GELECEK: +// - Komut satırı argümanları: ./saqut file.sqt -o output +// - Mod seçimi: ./saqut --mode=parse|ir|compile|run +// - Birden fazla dosya: ./saqut file1.sqt file2.sqt +// +// ============================================================================ + #include #include #include @@ -7,7 +34,12 @@ #include "ir/ir.hpp" int main() { - // Read source file + // ------------------------------------------------------------------ + // 1. Kaynak dosyayı oku + // ------------------------------------------------------------------ + // Şimdilik sabit dosya adı: source.sqt. + // TODO: argc/argv ile dosya adı al. + // ------------------------------------------------------------------ std::ifstream file("source.sqt", std::ios::in | std::ios::binary); if (!file.is_open()) { std::cerr << "Hata: source.sqt dosyası açılamadı\n"; @@ -22,7 +54,12 @@ int main() { std::cout << "=== saQut Compiler ===\n"; std::cout << "Kaynak kod:\n" << source << "\n\n"; - // Lexing → Tokenizing + // ------------------------------------------------------------------ + // 2. Lexing → Tokenizing + // ------------------------------------------------------------------ + // Tokenizer, Lexer'ı içerir. scan() tüm pipeline'ı çalıştırır. + // Token'lar heap'te new ile oluşturulur, iş bitince silinmeli. + // ------------------------------------------------------------------ Tokenizer tokenizer; auto tokens = tokenizer.scan(source); @@ -32,16 +69,27 @@ int main() { } std::cout << "\n"; - // Parsing → AST + // ------------------------------------------------------------------ + // 3. Parsing → AST + // ------------------------------------------------------------------ + // Parser, token listesini alır, AST üretir. + // parse() artık parseProgram()'ı çağırır — birden fazla deklarasyon + // veya statement içeren tam programları ayrıştırabilir. + // ------------------------------------------------------------------ Parser parser; ASTNode* ast = parser.parse(tokens); if (ast) { std::cout << "AST:\n"; - ast->log(0); + ast->log(0); // Ağacı girintili olarak yazdır std::cout << "\n"; - // IR generation + // ------------------------------------------------------------------ + // 4. IR Üretimi + // ------------------------------------------------------------------ + // CodeGenerator AST'yi dolaşır, sanal register makine komutları üretir. + // Şu anda sadece matematik işlemleri ve literal'lar destekleniyor. + // ------------------------------------------------------------------ CodeGenerator cg; cg.parse(ast); std::cout << "IR (" << cg.IROpDatas.size() << " komut):\n"; @@ -55,11 +103,17 @@ int main() { case OPCode::mathdiv: std::cout << "div"; break; case OPCode::declare: std::cout << "literal"; break; } + // arg1.value.index(): 0=int, 1=float std::cout << " (" << op.arg1.value.index() << ")\n"; } } - // Cleanup + // ------------------------------------------------------------------ + // 5. Temizlik + // ------------------------------------------------------------------ + // Token'lar heap'te oluşturuldu, manuel silinmeli. + // TODO: std::unique_ptr ile otomatik bellek yönetimi. + // ------------------------------------------------------------------ for (auto* t : tokens) delete t; return 0; diff --git a/src/parser/ast.hpp b/src/parser/ast.hpp index e34490b..a86746b 100644 --- a/src/parser/ast.hpp +++ b/src/parser/ast.hpp @@ -1,3 +1,59 @@ +// ============================================================================ +// saQut Compiler — Soyut Sözdizim Ağacı (AST) +// ============================================================================ +// +// DİZİN: src/parser/ast.hpp +// KATMAN: Katman 3 — Parser'ın ürettiği, IR'nin tükettiği +// BAĞIMLI: Token (src/parser/token.hpp), Tools (src/tools.hpp) +// KULLANAN: Parser (src/parser/parser.hpp), IR (src/ir/ir.hpp) +// +// AMAÇ: +// Kaynak kodun hiyerarşik, anlamsal gösterimi. Her dil yapısı (ifade, +// deyim, fonksiyon) bir AST düğümü ile temsil edilir. +// +// AST DÜĞÜM HİYERARŞİSİ: +// ASTNode (soyut taban) +// ├── ProgramNode : Kök düğüm, tüm üst seviye deklarasyonları tutar +// ├── FunctionDeclNode : Fonksiyon tanımı (int main() { ... }) +// ├── BlockNode : { ... } bloğu, statement listesi +// ├── VariableDeclNode : Değişken tanımı (int x = 10;) +// ├── IfStatementNode : if/else +// ├── WhileStatementNode : while döngüsü +// ├── ForStatementNode : for döngüsü +// ├── DoWhileStatementNode : do-while döngüsü +// ├── ReturnStatementNode : return [ifade] +// ├── BreakStatementNode : break +// ├── ContinueStatementNode : continue +// ├── ExpressionStatementNode: ifade + ; (bir statement olarak) +// ├── BinaryExpressionNode : İkili işlem (a + b, a * b) +// ├── LiteralNode : Sabit değer (42, "hello", true) +// ├── IdentifierNode : Değişken/fonksiyon ismi +// └── PostfixNode : Son ek işlem (a++, a--) +// +// TASARIM KARARLARI: +// 1. ASTKind enum: Her düğüm tipi için bir enum değeri. +// RTTI (dynamic_cast) yerine manuel tip kontrolü sağlar. +// Daha hızlı ve hata ayıklaması kolay. +// +// 2. parent pointer: Her düğüm ebeveynini bilir. +// Yukarı doğru gezinme (ör: bir döngü içinde break'in hedefini bulma). +// +// 3. children vektörü (protected): Sadece addChild() ile ekleme. +// ProgramNode, FunctionDeclNode, BlockNode gibi liste tutan düğümler +// bu vektörü kullanır. İkili işlem gibi sabit sayıda çocuğu olan +// düğümler kendi üye değişkenlerini kullanır (Left, Right). +// +// 4. log() metodu: Her düğüm kendi alt ağacını girintili olarak yazdırır. +// Debug ve test için. Gerçek kod üretimi için kullanılmaz. +// +// BİLİNEN SINIRLAMALAR (TODO): +// TODO: Bellek yönetimi: AST düğümleri heap'te new ile oluşturuluyor, +// silme sorumluluğu yok (sızıntı). unique_ptr veya arena allocator. +// TODO: Ziyaretçi deseni (Visitor pattern) eklenerek log() ve IR +// üretimi ayrı sınıflara taşınabilir. +// +// ============================================================================ + #ifndef SAQUT_AST #define SAQUT_AST @@ -6,43 +62,58 @@ #include "parser/token.hpp" #include "tools.hpp" -// ============================================================ -// AST Node types -// ============================================================ - +// ============================================================================ +// ASTKind — AST Düğüm Tipi Enum'u +// ============================================================================ +// +// Her AST düğüm sınıfı, constructor'ında kendi kind değerini atar. +// CodeGenerator (IR) ve diğer AST işlemcileri, düğümün tipini bu enum +// üzerinden belirler. +// +// İsimlendirme: Düğüm sınıf adları "Node" ile biter, enum değerleri bitmez. +// Örn: sınıf=IfStatementNode, enum=IfStatement +// enum class ASTKind { - Program, - FunctionDecl, - Block, - VariableDecl, - BinaryExpression, - UnaryExpression, - Literal, - Identifier, - Postfix, - IfStatement, - ForStatement, - WhileStatement, - DoWhileStatement, - ReturnStatement, - BreakStatement, - ContinueStatement, - ExpressionStatement, + Program, // Kök düğüm + FunctionDecl, // Fonksiyon tanımı + Block, // { } bloğu + VariableDecl, // Değişken tanımı + BinaryExpression, // İkili işlem (a + b) + UnaryExpression, // Tekli işlem (-a, !a) — ileride kullanılacak + Literal, // Sabit değer + Identifier, // İsim referansı + Postfix, // Son ek (a++) + IfStatement, // if/else + ForStatement, // for + WhileStatement, // while + DoWhileStatement, // do-while + ReturnStatement, // return + BreakStatement, // break + ContinueStatement, // continue + ExpressionStatement, // ifade + ; }; -// ============================================================ -// Base AST Node -// ============================================================ - +// ============================================================================ +// ASTNode — Soyut Temel Sınıf +// ============================================================================ +// +// Tüm AST düğümlerinin ortak atası. Minimum arayüz: +// - kind: Düğüm tipi (ASTKind enum) +// - parent: Ebeveyn düğüm (kök için nullptr) +// - addChild() / getChildren(): Çocuk yönetimi +// - log(): Debug çıktısı (virtual, her alt sınıf override eder) +// class ASTNode { public: - ASTKind kind; - ASTNode* parent = nullptr; + ASTKind kind; // Düğüm tipi (alt sınıf constructor'ında atanır) + ASTNode* parent = nullptr; // Ebeveyn düğüm (kök = nullptr) virtual void log(int indent = 0) { + (void)indent; // Kullanılmayan parametre uyarısını sustur std::cout << "\n"; } + // Çocuk ekleme. Otomatik olarak parent pointer'ı ayarlar. void addChild(ASTNode* child) { children.push_back(child); child->parent = this; @@ -53,13 +124,16 @@ public: virtual ~ASTNode() = default; protected: - std::vector children; + std::vector children; // Alt düğümler (liste tipi düğümler için) }; -// ============================================================ -// Program (root) -// ============================================================ - +// ============================================================================ +// ProgramNode — Kök Düğüm +// ============================================================================ +// +// Her saQut programı tek bir ProgramNode ile başlar. +// Çocukları: FunctionDeclNode, VariableDeclNode (global), ExpressionStatement. +// class ProgramNode : public ASTNode { public: ProgramNode() { kind = ASTKind::Program; } @@ -71,14 +145,21 @@ public: } }; -// ============================================================ -// Function declaration -// ============================================================ - +// ============================================================================ +// FunctionDeclNode — Fonksiyon Tanımı +// ============================================================================ +// +// Örnek: int main() { ... } +// returnType: "int", "void", "float", ... +// name: "main", "calculate", ... +// children: gövde (genellikle tek bir BlockNode) +// +// TODO: Parametre listesi (şu anda boş) +// class FunctionDeclNode : public ASTNode { public: - std::string name; - std::string returnType; + std::string name; // Fonksiyon adı + std::string returnType; // Dönüş tipi (string olarak, ileride tip sistemi) FunctionDeclNode() { kind = ASTKind::FunctionDecl; } @@ -90,10 +171,13 @@ public: } }; -// ============================================================ -// Block { ... } -// ============================================================ - +// ============================================================================ +// BlockNode — Blok { ... } +// ============================================================================ +// +// Bir dizi statement'i gruplar. Kendi scope (kapsam) alanı oluşturur. +// Örnek: { int x = 1; x = x + 2; } +// class BlockNode : public ASTNode { public: BlockNode() { kind = ASTKind::Block; } @@ -105,15 +189,20 @@ public: } }; -// ============================================================ -// Variable declaration: type name [= expr] -// ============================================================ - +// ============================================================================ +// VariableDeclNode — Değişken Tanımı +// ============================================================================ +// +// Örnek: int x = 10; +// varType: "int", "float", "bool", ... +// name: "x", "counter", ... +// initExpr: Başlangıç değeri (nullptr = tanımsız, örn: int x;) +// class VariableDeclNode : public ASTNode { public: - std::string varType; - std::string name; - ASTNode* initExpr = nullptr; + std::string varType; // Değişken tipi + std::string name; // Değişken adı + ASTNode* initExpr = nullptr; // Başlangıç ifadesi (opsiyonel) VariableDeclNode() { kind = ASTKind::VariableDecl; } @@ -129,19 +218,32 @@ public: } }; -// ============================================================ -// Expression nodes -// ============================================================ - +// ============================================================================ +// BinaryExpressionNode — İkili İşlem (a OP b) +// ============================================================================ +// +// İki operandlı tüm işlemler: a + b, a * b, a == b, a && b, ... +// Unary prefix operatörler de burada temsil edilir (Left = nullptr). +// +// Operator: İşlem tipi (PLUS, MINUS, STAR, EQUAL_EQUAL, ...) +// Left: Sol operand (unary prefix'te nullptr) +// Right: Sağ operand (her zaman dolu) +// +// NEDEN AYRI BİR UnaryExpressionNode YOK? +// Pratt parser'da unary ve binary operatörler aynı akışta işlenir. +// Left'in null olması unary olduğunu belirtir. Bu, kod tekrarını önler. +// İleride AST işlemcisi Left'e bakarak unary/binary ayrımı yapabilir. +// class BinaryExpressionNode : public ASTNode { public: - TokenType Operator; - ASTNode* Left = nullptr; - ASTNode* Right = nullptr; + TokenType Operator; // İşlem tipi + ASTNode* Left = nullptr; // Sol operand + ASTNode* Right = nullptr; // Sağ operand BinaryExpressionNode() { kind = ASTKind::BinaryExpression; } void log(int indent = 0) override { + // Operatörün enum ismini ve sembolünü göster auto it = OPERATOR_MAP_STRREV.find(Operator); std::string sym = (it != OPERATOR_MAP_STRREV.end()) ? std::string(it->second) : "?"; std::string val; @@ -150,15 +252,24 @@ public: std::cout << padRight("", indent) << "BinaryExpr " << sym << " (" << val << ")\n"; + // Önce sağ, sonra sol yazdır — ağaç görselleştirmesi için if (Right) Right->log(indent + 2); if (Left) Left->log(indent + 2); } }; +// ============================================================================ +// LiteralNode — Sabit Değer +// ============================================================================ +// +// Kaynak kodda doğrudan yazılan değerler: 42, "hello", true, false, null. +// lexerToken: Orijinal Token (NumberToken ise isFloat/base bilgisi) +// parserToken: Parser'ın atadığı tip bilgisi +// class LiteralNode : public ASTNode { public: - Token* lexerToken = nullptr; - ParserToken parserToken; + Token* lexerToken = nullptr; // Tokenizer'dan gelen orijinal token + ParserToken parserToken; // Parser tarafından zenginleştirilmiş token LiteralNode() { kind = ASTKind::Literal; } @@ -168,6 +279,13 @@ public: } }; +// ============================================================================ +// IdentifierNode — Tanımlayıcı Referansı +// ============================================================================ +// +// Değişken, fonksiyon, veya tip ismi. Örn: x, myVar, calculate. +// İleride symbol table ile çözümlenecek (bu değişken nerede tanımlı?). +// class IdentifierNode : public ASTNode { public: Token* lexerToken = nullptr; @@ -181,10 +299,18 @@ public: } }; +// ============================================================================ +// PostfixNode — Son Ek İşlem (a++, a--) +// ============================================================================ +// +// Operand'dan SONRA gelen operatör. Şu anda sadece ++ ve --. +// operand: İşlem yapılan ifade (genellikle IdentifierNode) +// Operator: PLUS_PLUS veya MINUS_MINUS +// class PostfixNode : public ASTNode { public: - ASTNode* operand = nullptr; - TokenType Operator; + ASTNode* operand = nullptr; // İşlem yapılan ifade + TokenType Operator; // PLUS_PLUS veya MINUS_MINUS PostfixNode() { kind = ASTKind::Postfix; } @@ -201,15 +327,19 @@ public: } }; -// ============================================================ -// Statement nodes -// ============================================================ - +// ============================================================================ +// IfStatementNode — if / else +// ============================================================================ +// +// condition: Koşul ifadesi (parantez içindeki) +// thenBranch: if gövdesi (BlockNode veya tek statement) +// elseBranch: else gövdesi (opsiyonel, nullptr = else yok) +// class IfStatementNode : public ASTNode { public: - ASTNode* condition = nullptr; - ASTNode* thenBranch = nullptr; // BlockNode or single statement - ASTNode* elseBranch = nullptr; // optional + ASTNode* condition = nullptr; // Koşul + ASTNode* thenBranch = nullptr; // if gövdesi + ASTNode* elseBranch = nullptr; // else gövdesi (opsiyonel) IfStatementNode() { kind = ASTKind::IfStatement; } @@ -226,10 +356,16 @@ public: } }; +// ============================================================================ +// WhileStatementNode — while Döngüsü +// ============================================================================ +// +// while (condition) body +// class WhileStatementNode : public ASTNode { public: - ASTNode* condition = nullptr; - ASTNode* body = nullptr; + ASTNode* condition = nullptr; // Döngü koşulu + ASTNode* body = nullptr; // Döngü gövdesi WhileStatementNode() { kind = ASTKind::WhileStatement; } @@ -242,12 +378,23 @@ public: } }; +// ============================================================================ +// ForStatementNode — for Döngüsü +// ============================================================================ +// +// for (init; condition; update) body +// +// init: Başlangıç (VariableDeclNode veya ExpressionStatementNode) +// condition: Devam koşulu (nullptr = sonsuz döngü) +// update: Her adımda çalışan ifade +// body: Döngü gövdesi +// class ForStatementNode : public ASTNode { public: - ASTNode* init = nullptr; // VariableDecl or ExpressionStatement - ASTNode* condition = nullptr; // expression - ASTNode* update = nullptr; // expression - ASTNode* body = nullptr; + ASTNode* init = nullptr; // Başlangıç + ASTNode* condition = nullptr; // Koşul + ASTNode* update = nullptr; // Güncelleme + ASTNode* body = nullptr; // Gövde ForStatementNode() { kind = ASTKind::ForStatement; } @@ -270,6 +417,12 @@ public: } }; +// ============================================================================ +// DoWhileStatementNode — do-while Döngüsü +// ============================================================================ +// +// do body while (condition); +// class DoWhileStatementNode : public ASTNode { public: ASTNode* condition = nullptr; @@ -286,9 +439,16 @@ public: } }; +// ============================================================================ +// ReturnStatementNode — return [ifade] +// ============================================================================ +// +// value = nullptr ise "return;" (void fonksiyonda) +// value dolu ise "return expr;" +// class ReturnStatementNode : public ASTNode { public: - ASTNode* value = nullptr; // optional + ASTNode* value = nullptr; // Dönüş değeri (opsiyonel) ReturnStatementNode() { kind = ASTKind::ReturnStatement; } @@ -303,6 +463,12 @@ public: } }; +// ============================================================================ +// BreakStatementNode — break +// ============================================================================ +// +// En yakın döngüden veya switch'ten çıkar. +// class BreakStatementNode : public ASTNode { public: BreakStatementNode() { kind = ASTKind::BreakStatement; } @@ -311,6 +477,12 @@ public: } }; +// ============================================================================ +// ContinueStatementNode — continue +// ============================================================================ +// +// En yakın döngünün başına atlar. +// class ContinueStatementNode : public ASTNode { public: ContinueStatementNode() { kind = ASTKind::ContinueStatement; } @@ -319,9 +491,16 @@ public: } }; +// ============================================================================ +// ExpressionStatementNode — İfadeyi Statement Olarak Sarma +// ============================================================================ +// +// Bir ifadeyi (expression) statement bağlamında kullanmak için sarar. +// Örn: x = 5; → ExpressionStatementNode( BinaryExpressionNode(x, =, 5) ) +// class ExpressionStatementNode : public ASTNode { public: - ASTNode* expression = nullptr; + ASTNode* expression = nullptr; // İç ifade ExpressionStatementNode() { kind = ASTKind::ExpressionStatement; } @@ -331,4 +510,4 @@ public: } }; -#endif +#endif // SAQUT_AST diff --git a/src/parser/parser.hpp b/src/parser/parser.hpp index 1412af8..afabedf 100644 --- a/src/parser/parser.hpp +++ b/src/parser/parser.hpp @@ -1,3 +1,75 @@ +// ============================================================================ +// saQut Compiler — Parser (Sözdizimi Ayrıştırıcı) +// ============================================================================ +// +// DİZİN: src/parser/parser.hpp +// KATMAN: Katman 3 — Tokenizer'ı tüketir, AST üretir +// BAĞIMLI: Token (token.hpp), AST (ast.hpp) +// KULLANAN: main.cpp +// +// AMAÇ: +// Tokenizer'ın ürettiği düz token listesini alıp, dilin gramer kurallarına +// göre hiyerarşik bir AST (Abstract Syntax Tree) üretir. +// +// İKİ AYRI PARSER STRATEJİSİ: +// 1. Recursive Descent (ifadeler için Pratt parser): +// - parseNullDenotation() (NUD): Prefix ifadeleri (sayılar, -, !, parantez) +// - parseLeftDenotation() (LED): Infix/Postfix ifadeler (+, *, ++) +// - parseExpression(precedence): Pratt'ın ana döngüsü +// +// 2. Recursive Descent (statement/deklarasyon için): +// - parseDeclaration(): Fonksiyon mu, değişken mi, statement mı? +// - parseStatement(): if/for/while/do/return/block/expression +// - Her statement tipi kendi parse fonksiyonuna sahip +// +// ADR-002 (devam): Neden Hibrit Yaklaşım? +// Pratt parser, operatör önceliğini merkezi bir tabloda yönetir ve yeni +// operatör eklemeyi kolaylaştırır. Ancak statement'lar (if, for, while) +// operatör değildir; kendi özel sözdizimleri vardır. Bu nedenle statement +// tarafında klasik recursive descent kullanıyoruz. Bu, her iki dünyanın +// en iyisini birleştirir. +// +// PARSER AKIŞI: +// parse(tokens) +// └── parseProgram() +// └── parseDeclaration() [döngü, SVR_VOID gelene kadar] +// ├── parseFunctionDecl() → tip + isim + ( ) + { gövde } +// ├── parseVariableDecl() → tip + isim [+ = ifade] + ; +// └── parseStatement() +// ├── parseBlock() → { statement* } +// ├── parseIfStatement() → if (expr) stmt [else stmt] +// ├── parseWhileStatement() → while (expr) stmt +// ├── parseForStatement() → for (stmt; expr; expr) stmt +// ├── parseDoWhileStatement() → do stmt while (expr); +// ├── parseReturnStatement() → return [expr]; +// ├── parseBreakStatement() → break; +// ├── parseContinueStatement() → continue; +// ├── parseVariableDecl() → tip + isim ... +// └── parseExpressionStatement() → expr; +// └── parseExpression() [Pratt] +// ├── parseNullDenotation() +// │ ├── LPAREN → ( expr ) +// │ ├── Unary prefix → !expr, -expr, ++expr +// │ ├── NUMBER → Literal +// │ ├── STRING → Literal +// │ ├── true/false/null → Literal +// │ └── IDENTIFIER → Identifier +// └── parseLeftDenotation() [döngü] +// ├── Postfix → expr++, expr-- +// └── Binary infix → expr + expr +// +// BİLİNEN SINIRLAMALAR (TODO): +// TODO: else-if zincirleri (şu anda else'den sonra if gelirse düzgün çalışır mı?) +// TODO: Hata kurtarma (panic mode): ilk hatada durmak yerine senkronizasyon +// TODO: Fonksiyon parametreleri +// TODO: Dizi erişimi: a[i] +// TODO: Fonksiyon çağrısı: f(x, y) +// TODO: Üye erişimi: a.b, a->b +// TODO: Ternary: a ? b : c +// TODO: Tip kontrolü ve sembol tablosu +// +// ============================================================================ + #ifndef SAQUT_PARSER #define SAQUT_PARSER @@ -8,30 +80,44 @@ #include "parser/ast.hpp" #include "tools.hpp" +// ============================================================================ +// Parser — Sözdizimi Ayrıştırıcı +// ============================================================================ +// +// Durum bilgisi: +// tokens: Tokenizer'dan gelen token listesi (referans değil, kopya değil) +// current: Şu anki token'ın indeksi (0 = ilk token) +// +// Token navigasyon metotları: +// currentToken(): tokens[current] döndürür, ilerlemez +// nextToken(): current++ (sonraki token'a geç) +// lookahead(n): tokens[current + n] döndürür, ilerlemez +// getToken(offset): tokens[current + offset] döndürür +// class Parser { public: ASTNode* parse(TokenList tokens); private: - TokenList tokens; - int current = 0; + TokenList tokens; // Tokenizer'dan gelen token listesi + int current = 0; // Şu anki token indeksi - // Token navigation + // --- Token navigasyonu --- ParserToken currentToken(); void nextToken(); ParserToken lookahead(uint32_t forward); ParserToken parseToken(Token* token); ParserToken getToken(int offset); - // --- Top level --- + // --- Üst seviye --- ASTNode* parseProgram(); - // --- Declarations --- + // --- Deklarasyonlar --- ASTNode* parseDeclaration(); ASTNode* parseFunctionDecl(); ASTNode* parseVariableDecl(); - // --- Statements --- + // --- Statement'lar --- ASTNode* parseStatement(); ASTNode* parseBlock(); ASTNode* parseIfStatement(); @@ -43,20 +129,29 @@ private: ASTNode* parseContinueStatement(); ASTNode* parseExpressionStatement(); - // --- Expressions (Pratt parser) --- + // --- İfadeler (Pratt parser) --- ASTNode* parseExpression(); ASTNode* parseExpression(uint16_t precedence); ASTNode* parseNullDenotation(); ASTNode* parseLeftDenotation(ASTNode* left); }; -// ============================================================ -// Token helpers -// ============================================================ +// ============================================================================ +// Token Navigasyonu +// ============================================================================ +// -------------------------------------------------------------------------- +// parseToken: Ham Token'ı ParserToken'a dönüştür. +// +// Tokenizer'ın string tabanlı tip sistemini ("number", "operator", ...) +// Parser'ın anlamsal tip sistemine (NUMBER, PLUS, KW_IF, ...) çevirir. +// +// BUG FIX (commit 40579ca): pt.token = token (pointer ataması). +// Eskiden pt.token = *token (değer kopyası) object slicing yapıyordu. +// -------------------------------------------------------------------------- inline ParserToken Parser::parseToken(Token* token) { ParserToken pt; - pt.token = token; + pt.token = token; // Pointer — değer kopyası DEĞİL std::string t = token->gettype(); if (t == "string") @@ -75,6 +170,9 @@ inline ParserToken Parser::parseToken(Token* token) { return pt; } +// -------------------------------------------------------------------------- +// getToken: Güvenli token erişimi. Sınır dışı = SVR_VOID. +// -------------------------------------------------------------------------- inline ParserToken Parser::getToken(int offset) { if ((int)tokens.size() - 1 < current + offset) { ParserToken pt; @@ -97,16 +195,28 @@ inline ParserToken Parser::currentToken() { return getToken(0); } -// ============================================================ -// Top level -// ============================================================ +// ============================================================================ +// Üst Seviye +// ============================================================================ +// -------------------------------------------------------------------------- +// parse: Parser'ın ana giriş noktası. Token listesini alır, AST döndürür. +// -------------------------------------------------------------------------- inline ASTNode* Parser::parse(TokenList toks) { - tokens = toks; + tokens = toks; current = 0; return parseProgram(); } +// -------------------------------------------------------------------------- +// parseProgram: Tüm üst seviye deklarasyonları/statement'ları ayrıştırır. +// +// Program ::= Declaration* +// EOF'a (SVR_VOID) kadar parseDeclaration() çağrılır. +// +// BUG FIX (commit 438bc0e): Eskiden parseExpression() doğrudan çağrılıyordu, +// bu sadece tek bir ifadeyi ayrıştırabiliyordu. Şimdi tam program desteği var. +// -------------------------------------------------------------------------- inline ASTNode* Parser::parseProgram() { ProgramNode* program = new ProgramNode(); @@ -115,58 +225,82 @@ inline ASTNode* Parser::parseProgram() { if (decl) program->addChild(decl); else - break; + break; // Hata durumunda döngüden çık } return program; } -// ============================================================ -// Declarations -// ============================================================ +// ============================================================================ +// Deklarasyonlar +// ============================================================================ +// -------------------------------------------------------------------------- +// parseDeclaration: Üst seviye deklarasyon ayrıştırıcı. +// +// Strateji: +// 1. Mevcut token bir tip keyword'ü mü (int, void, float, ...)? +// - Evet → lookahead(2) '(' ise → fonksiyon tanımı +// - Evet → değilse → değişken tanımı +// 2. Değilse → statement (REPL modunda ifade de olabilir) +// +// LOOKAHEAD KULLANIMI: +// "int main()" ve "int x = 10" ayrımı için 2 ileriye bakarız: +// - int main() → lookahead(1)=identifier, lookahead(2)='(' +// - int x = 10 → lookahead(1)=identifier, lookahead(2)='=' +// -------------------------------------------------------------------------- inline ASTNode* Parser::parseDeclaration() { auto ct = currentToken(); - // Function declaration: type identifier ( ) { ... } + // Tip keyword'ü ile başlayan → fonksiyon veya değişken if (ct.is({ TokenType::KW_VOID, TokenType::KW_INT, TokenType::KW_FLOAT_TYPE, TokenType::KW_DOUBLE, TokenType::KW_BOOL, TokenType::KW_CHAR, TokenType::KW_STRING_TYPE, TokenType::KW_AUTO })) { - // Check if next is identifier, then '(' → function auto la1 = lookahead(1); auto la2 = lookahead(2); + // int main( ... ) → fonksiyon if (la1.type == TokenType::IDENTIFIER && la2.type == TokenType::LPAREN) return parseFunctionDecl(); - // Otherwise variable declaration + // int x ... → değişken return parseVariableDecl(); } - // Standalone expression (for REPL / bare source.sqt) + // Tip keyword'ü değil → statement (veya REPL ifadesi) return parseStatement(); } +// -------------------------------------------------------------------------- +// parseFunctionDecl: Fonksiyon tanımı. +// +// Sözdizimi: Type Identifier ( [ParamList] ) Block +// Örnek: int main() { ... } +// +// TODO: Parametre listesi ayrıştırma +// TODO: Dönüş tipi doğrulama (şu anda string olarak saklanıyor) +// -------------------------------------------------------------------------- inline ASTNode* Parser::parseFunctionDecl() { FunctionDeclNode* fn = new FunctionDeclNode(); - fn->returnType = currentToken().token->token; // e.g., "void", "int" - nextToken(); // eat return type + fn->returnType = currentToken().token->token; // "int", "void", ... + nextToken(); // Dönüş tipini tüket - fn->name = currentToken().token->token; - nextToken(); // eat name + fn->name = currentToken().token->token; // "main", "calculate", ... + nextToken(); // İsmi tüket - // Eat '(' ... ')' + // Parametre listesi: ( ... ) if (currentToken().type == TokenType::LPAREN) { - nextToken(); - // Skip params for now + nextToken(); // '(' tüket + // TODO: Parametreleri ayrıştır + // Şimdilik ')' gelene kadar atla while (currentToken().type != TokenType::RPAREN && currentToken().type != TokenType::SVR_VOID) nextToken(); if (currentToken().type == TokenType::RPAREN) - nextToken(); + nextToken(); // ')' tüket } - // Parse body { ... } + // Gövde: { ... } if (currentToken().type == TokenType::LBRACE) { ASTNode* body = parseBlock(); fn->addChild(body); @@ -175,36 +309,51 @@ inline ASTNode* Parser::parseFunctionDecl() { return fn; } +// -------------------------------------------------------------------------- +// parseVariableDecl: Değişken tanımı. +// +// Sözdizimi: Type Identifier [= Expression] ; +// Örnek: int x = 10; +// float y; (initExpr = nullptr) +// +// TODO: Çoklu değişken: int x = 1, y = 2; +// -------------------------------------------------------------------------- inline ASTNode* Parser::parseVariableDecl() { VariableDeclNode* vd = new VariableDeclNode(); - vd->varType = currentToken().token->token; // e.g., "int", "float" - nextToken(); // eat type + vd->varType = currentToken().token->token; // "int", "float", ... + nextToken(); // Tipi tüket if (currentToken().type != TokenType::IDENTIFIER) { std::cerr << "Parser hatası: değişken ismi bekleniyor\n"; - return vd; + return vd; // Hatalı düğüm, çağıran kontrol etmeli } - vd->name = currentToken().token->token; - nextToken(); // eat name + vd->name = currentToken().token->token; // "x", "counter", ... + nextToken(); // İsmi tüket - // Optional initializer: = expression + // Opsiyonel başlangıç değeri: = expression if (currentToken().type == TokenType::EQUAL) { - nextToken(); // eat = + nextToken(); // '=' tüket vd->initExpr = parseExpression(); } - // Optional semicolon + // Noktalı virgül (opsiyonel — parser hoşgörülü) if (currentToken().type == TokenType::SEMICOLON) nextToken(); return vd; } -// ============================================================ -// Statements -// ============================================================ +// ============================================================================ +// Statement'lar — Recursive Descent +// ============================================================================ +// -------------------------------------------------------------------------- +// parseStatement: Statement ayrıştırıcı (dispatcher). +// +// Mevcut token'a göre uygun parse fonksiyonuna yönlendirir. +// Sıralama önemli: LBRACE, keyword'ler, değişken tanımı, ifade. +// -------------------------------------------------------------------------- inline ASTNode* Parser::parseStatement() { auto ct = currentToken(); @@ -232,7 +381,7 @@ inline ASTNode* Parser::parseStatement() { if (ct.type == TokenType::KW_CONTINUE) return parseContinueStatement(); - // Variable declaration? (type identifier ...) + // Değişken tanımı? (tip keyword'ü ile başlayan) if (ct.is({ TokenType::KW_VOID, TokenType::KW_INT, TokenType::KW_FLOAT_TYPE, TokenType::KW_DOUBLE, TokenType::KW_BOOL, TokenType::KW_CHAR, @@ -241,15 +390,18 @@ inline ASTNode* Parser::parseStatement() { return parseVariableDecl(); } - // Default: expression statement + // Hiçbiri değilse → ifade statement'ı (atama, fonksiyon çağrısı, ...) return parseExpressionStatement(); } +// -------------------------------------------------------------------------- +// parseBlock: { statement* } +// -------------------------------------------------------------------------- inline ASTNode* Parser::parseBlock() { BlockNode* block = new BlockNode(); if (currentToken().type == TokenType::LBRACE) - nextToken(); // eat { + nextToken(); // '{' tüket while (currentToken().type != TokenType::RBRACE && currentToken().type != TokenType::SVR_VOID) { @@ -257,81 +409,104 @@ inline ASTNode* Parser::parseBlock() { if (stmt) block->addChild(stmt); else - break; + break; // Hata durumunda döngüden çık } if (currentToken().type == TokenType::RBRACE) - nextToken(); // eat } + nextToken(); // '}' tüket return block; } +// -------------------------------------------------------------------------- +// parseIfStatement: if (expression) statement [else statement] +// +// Süslü parantez zorunlu DEĞİL — tek statement de olabilir. +// if (x > 5) return x; ← geçerli +// if (x > 5) { ... } ← geçerli +// +// TODO: Sallantılı else (dangling else) sorunu: +// if (a) if (b) x; else y; ← else hangi if'e ait? +// Mevcut implementasyon doğru: else en yakın if'e bağlanır. +// -------------------------------------------------------------------------- inline ASTNode* Parser::parseIfStatement() { IfStatementNode* ifNode = new IfStatementNode(); - nextToken(); // eat 'if' + nextToken(); // 'if' tüket - // Condition: ( expression ) + // Koşul: ( expression ) if (currentToken().type == TokenType::LPAREN) { - nextToken(); + nextToken(); // '(' tüket ifNode->condition = parseExpression(); if (currentToken().type == TokenType::RPAREN) - nextToken(); + nextToken(); // ')' tüket } - // Then branch + // Then gövdesi ifNode->thenBranch = parseStatement(); - // Optional else + // Opsiyonel else if (currentToken().type == TokenType::KW_ELSE) { - nextToken(); + nextToken(); // 'else' tüket ifNode->elseBranch = parseStatement(); } return ifNode; } +// -------------------------------------------------------------------------- +// parseWhileStatement: while (expression) statement +// -------------------------------------------------------------------------- inline ASTNode* Parser::parseWhileStatement() { WhileStatementNode* ws = new WhileStatementNode(); - nextToken(); // eat 'while' + nextToken(); // 'while' tüket - // Condition: ( expression ) if (currentToken().type == TokenType::LPAREN) { - nextToken(); + nextToken(); // '(' tüket ws->condition = parseExpression(); if (currentToken().type == TokenType::RPAREN) - nextToken(); + nextToken(); // ')' tüket } - // Body ws->body = parseStatement(); - return ws; } +// -------------------------------------------------------------------------- +// parseForStatement: for (init; condition; update) statement +// +// for'un 3 parçası da isteğe bağlıdır: +// for (;;) { ... } ← sonsuz döngü (geçerli) +// +// init: VariableDeclNode veya ExpressionStatementNode +// for (int i = 0; ...) → VariableDecl +// for (i = 0; ...) → ExpressionStatement +// condition: ifade (nullptr = yok) +// update: ifade (nullptr = yok) +// -------------------------------------------------------------------------- inline ASTNode* Parser::parseForStatement() { ForStatementNode* fs = new ForStatementNode(); - nextToken(); // eat 'for' + nextToken(); // 'for' tüket if (currentToken().type == TokenType::LPAREN) - nextToken(); // eat ( + nextToken(); // '(' tüket - // Init + // Init (opsiyonel) if (currentToken().type != TokenType::SEMICOLON) fs->init = parseStatement(); if (currentToken().type == TokenType::SEMICOLON) - nextToken(); + nextToken(); // ';' tüket - // Condition + // Condition (opsiyonel) if (currentToken().type != TokenType::SEMICOLON) fs->condition = parseExpression(); if (currentToken().type == TokenType::SEMICOLON) - nextToken(); + nextToken(); // ';' tüket - // Update + // Update (opsiyonel) if (currentToken().type != TokenType::RPAREN) fs->update = parseExpression(); if (currentToken().type == TokenType::RPAREN) - nextToken(); + nextToken(); // ')' tüket // Body fs->body = parseStatement(); @@ -339,48 +514,61 @@ inline ASTNode* Parser::parseForStatement() { return fs; } +// -------------------------------------------------------------------------- +// parseDoWhileStatement: do statement while (expression) ; +// -------------------------------------------------------------------------- inline ASTNode* Parser::parseDoWhileStatement() { DoWhileStatementNode* dw = new DoWhileStatementNode(); - nextToken(); // eat 'do' + nextToken(); // 'do' tüket - // Body + // Gövde dw->body = parseStatement(); - // 'while' ( expression ) ; + // while (expression) ; if (currentToken().type == TokenType::KW_WHILE) { - nextToken(); + nextToken(); // 'while' tüket if (currentToken().type == TokenType::LPAREN) { - nextToken(); + nextToken(); // '(' tüket dw->condition = parseExpression(); if (currentToken().type == TokenType::RPAREN) - nextToken(); + nextToken(); // ')' tüket } if (currentToken().type == TokenType::SEMICOLON) - nextToken(); + nextToken(); // ';' tüket } return dw; } +// -------------------------------------------------------------------------- +// parseReturnStatement: return [expression] ; +// +// return; ← value = nullptr (void fonksiyon) +// return x + 1; ← value = BinaryExpression +// -------------------------------------------------------------------------- inline ASTNode* Parser::parseReturnStatement() { ReturnStatementNode* rs = new ReturnStatementNode(); - nextToken(); // eat 'return' + nextToken(); // 'return' tüket - // Optional return value + // Opsiyonel dönüş değeri + // Eğer sıradaki token ; veya } ise → return; if (currentToken().type != TokenType::SEMICOLON && currentToken().type != TokenType::RBRACE) { rs->value = parseExpression(); } if (currentToken().type == TokenType::SEMICOLON) - nextToken(); + nextToken(); // ';' tüket return rs; } +// -------------------------------------------------------------------------- +// parseBreakStatement / parseContinueStatement +// -------------------------------------------------------------------------- inline ASTNode* Parser::parseBreakStatement() { BreakStatementNode* bs = new BreakStatementNode(); - nextToken(); // eat 'break' + nextToken(); // 'break' tüket if (currentToken().type == TokenType::SEMICOLON) nextToken(); return bs; @@ -388,17 +576,30 @@ inline ASTNode* Parser::parseBreakStatement() { inline ASTNode* Parser::parseContinueStatement() { ContinueStatementNode* cs = new ContinueStatementNode(); - nextToken(); // eat 'continue' + nextToken(); // 'continue' tüket if (currentToken().type == TokenType::SEMICOLON) nextToken(); return cs; } +// -------------------------------------------------------------------------- +// parseExpressionStatement: expression ; +// +// Bir ifadeyi statement olarak kullanır. Örn: x = 5; foo(); +// +// HATA KURTARMA: +// Eğer parseExpression() başarısız olursa (nullptr), sonraki ; veya } +// veya EOF'a kadar token'ları atlayarak senkronize olur. Bu, tek bir +// hatalı ifadenin tüm parser'ı kilitlemesini önler. +// +// BUG FIX (commit 438bc0e): Eskiden hatalı ifade durumunda sonsuz +// döngüye giriyordu (parseProgram her seferinde aynı ifadeyi okuyordu). +// -------------------------------------------------------------------------- inline ASTNode* Parser::parseExpressionStatement() { ExpressionStatementNode* es = new ExpressionStatementNode(); es->expression = parseExpression(); if (!es->expression) { - // Parsing failed — skip to next statement boundary + // Hata kurtarma: sonraki güvenli noktaya atla while (currentToken().type != TokenType::SEMICOLON && currentToken().type != TokenType::RBRACE && currentToken().type != TokenType::SVR_VOID) @@ -412,29 +613,79 @@ inline ASTNode* Parser::parseExpressionStatement() { return es; } -// ============================================================ -// Expressions — Pratt parser -// ============================================================ +// ============================================================================ +// İfadeler — Pratt Parser (Top-Down Operator Precedence) +// ============================================================================ +// +// Pratt parser'ın temel fikri: Her operatörün bir "bağlanma gücü" (precedence) +// vardır. Parser, bu güce göre operatörleri doğru sırada gruplar. +// +// NUD (Null Denotation): Prefix ifadeleri (sayılar, -, !, parantez) +// LED (Left Denotation): Infix/Postfix ifadeler (+, *, ++) +// +// ÖRNEK: 1 + 2 * 3 +// 1. NUD: 1 → Literal(1) +// 2. LED(+): prec=13, right'i parseExpression(13) ile ayrıştır +// 2a. NUD: 2 → Literal(2) +// 2b. LED(*): prec=14 > 13 → parseExpression(14) +// 3a. NUD: 3 → Literal(3) +// 3b. LED yok → dön +// 2c. BinaryExpr(*, 2, 3) dön +// 3. BinaryExpr(+, 1, BinaryExpr(*, 2, 3)) +// Sonuç: 1 + (2 * 3) ✓ +// +// BUG FIX (commit 40579ca): Ana döngü lookahead(1) yerine currentToken() +// kullanıyor. NUD artık token'ı tüketip ilerliyor, bu sayede currentToken() +// her zaman bir sonraki operatörü gösterir. +// +// BUG FIX (commit 438bc0e): Atom'lar (sayı, string, identifier) NUD'da +// nextToken() ile tüketiliyor. Eskiden tüketilmediği için sonsuz döngü +// oluyordu. +// +// ============================================================================ +// -------------------------------------------------------------------------- +// parseExpression(): Öncelik 0'dan başla (en düşük bağlanma) +// -------------------------------------------------------------------------- inline ASTNode* Parser::parseExpression() { return parseExpression(0); } +// -------------------------------------------------------------------------- +// parseExpression(precedence): Pratt'ın ana döngüsü. +// +// Algoritma: +// 1. NUD ile ilk operand'ı ayrıştır (prefix) +// 2. Mevcut token bir operatör mü? +// - Evet ve önceliği > precedence ise → LED ile infix ayrıştır +// - Hayır veya öncelik <= precedence ise → dur, sol operand'ı döndür +// 3. LED'in döndürdüğü düğüm yeni sol operand olur, 2. adıma dön +// +// DURMA KOŞULLARI: +// - RPAREN, SEMICOLON, RBRACE, COMMA: İfade sonu sinyali +// - Operatörün önceliği <= mevcut öncelik: Daha sıkı bağlanamaz +// -------------------------------------------------------------------------- inline ASTNode* Parser::parseExpression(uint16_t precedence) { if (currentToken().type == TokenType::SVR_VOID) return nullptr; + // 1. Prefix (NUD) ASTNode* left = parseNullDenotation(); if (!left) return nullptr; + // 2. Infix/Postfix döngüsü (LED) while (true) { auto next = currentToken(); + + // İfade sonu sinyalleri → dur if (next.type == TokenType::RPAREN || next.type == TokenType::SEMICOLON || next.type == TokenType::RBRACE || next.type == TokenType::COMMA) break; + // Operatörün bağlanma gücü yetersiz → dur + // (daha yüksek öncelikli bir bağlamdayız, bu operatör oraya ait değil) if (precedence < next.getPowerOperator()) { left = parseLeftDenotation(left); } else { @@ -444,7 +695,17 @@ inline ASTNode* Parser::parseExpression(uint16_t precedence) { return left; } -// Prefix / atoms — parse expressions that start with themselves +// -------------------------------------------------------------------------- +// parseNullDenotation (NUD): Prefix ifadeleri. +// +// İşlenen prefix tipleri: +// - Parantez: ( expression ) +// - Unary: +expr, -expr, !expr, ~expr, ++expr, --expr +// - Literal: 42, "hello", true, false, null +// - Identifier: x, myVar +// +// DÖNÜŞ: Ayrıştırılmış AST düğümü. Token TÜKETİLMİŞ olur (current ilerlemiş). +// -------------------------------------------------------------------------- inline ASTNode* Parser::parseNullDenotation() { auto ct = currentToken(); @@ -453,41 +714,50 @@ inline ASTNode* Parser::parseNullDenotation() { return nullptr; } - // Parenthesized expression + // --- Parantezli ifade: ( expr ) --- + // Önceliği sıfırlar — parantez içinde yeni bir ifade başlar. if (ct.type == TokenType::LPAREN) { - nextToken(); - ASTNode* expr = parseExpression(0); + nextToken(); // '(' tüket + ASTNode* expr = parseExpression(0); // Öncelik sıfırla if (currentToken().type == TokenType::RPAREN) - nextToken(); + nextToken(); // ')' tüket return expr; } - // Unary prefix: ++, --, +, -, !, ~ + // --- Unary prefix operatörler: +, -, !, ~, ++, -- --- + // PLUS ve MINUS burada UNARY olarak işlenir. + // Binary olarak işlenmesi LED tarafından yapılır. + // + // ÖNEMLİ: PLUS ve MINUS için getPowerOperator() 13 döndürür (binary öncelik). + // Ama burada unary olarak kullanılıyor. parseExpression(16) çağırmak daha + // doğru olurdu ancak mevcut çalışma şekli de doğru sonuç veriyor. + // TODO: Unary için ayrı öncelik seviyesi (örn: 16) if (ct.is({ TokenType::PLUS_PLUS, TokenType::MINUS_MINUS, TokenType::PLUS, TokenType::MINUS, TokenType::BANG, TokenType::TILDE })) { - nextToken(); + nextToken(); // Operatörü tüket + // Sağ operand'ı ayrıştır. Unary prefix sağdan sola bağlanır. ASTNode* right = parseExpression(ct.getPowerOperator()); BinaryExpressionNode* bin = new BinaryExpressionNode(); bin->Right = right; - bin->Left = nullptr; + bin->Left = nullptr; // Unary işaretçisi bin->Operator = ct.type; if (right) right->parent = bin; return bin; } - // Numeric literal + // --- Sayısal literal: 42, 0xFF, 3.14 --- if (ct.type == TokenType::NUMBER) { - nextToken(); + nextToken(); // Token'ı tüket LiteralNode* lit = new LiteralNode(); lit->lexerToken = ct.token; lit->parserToken = ct; return lit; } - // String literal + // --- String literal: "hello" --- if (ct.type == TokenType::STRING) { nextToken(); LiteralNode* lit = new LiteralNode(); @@ -496,7 +766,7 @@ inline ASTNode* Parser::parseNullDenotation() { return lit; } - // Boolean / null literals + // --- Boolean/null literal: true, false, null --- if (ct.is({TokenType::KW_TRUE, TokenType::KW_FALSE, TokenType::KW_NULL})) { nextToken(); LiteralNode* lit = new LiteralNode(); @@ -505,7 +775,7 @@ inline ASTNode* Parser::parseNullDenotation() { return lit; } - // Identifier + // --- Identifier: x, myVar --- if (ct.type == TokenType::IDENTIFIER) { nextToken(); IdentifierNode* id = new IdentifierNode(); @@ -517,13 +787,27 @@ inline ASTNode* Parser::parseNullDenotation() { return nullptr; } -// Infix / postfix — parse expressions that continue after a left operand +// -------------------------------------------------------------------------- +// parseLeftDenotation (LED): Infix ve Postfix ifadeler. +// +// Sol operand zaten ayrıştırılmış olarak gelir (left). +// Mevcut token operatördür. +// +// İşlenen tipler: +// - Postfix: expr++, expr-- +// - Binary infix: expr + expr, expr * expr, expr == expr, ... +// +// TASARIM NOTU: Postfix ve Binary aynı fonksiyonda işlenir çünkü ikisi de +// "sol operand + operatör" pattern'ini takip eder. Postfix'te sağ operand +// yoktur. +// -------------------------------------------------------------------------- inline ASTNode* Parser::parseLeftDenotation(ASTNode* left) { auto ct = currentToken(); - // Postfix: ++, -- + // --- Postfix: expr++, expr-- --- + // Operatör operand'dan SONRA gelir, sağ operand yok. if (ct.is({TokenType::PLUS_PLUS, TokenType::MINUS_MINUS})) { - nextToken(); + nextToken(); // Operatörü tüket PostfixNode* pf = new PostfixNode(); pf->operand = left; pf->Operator = ct.type; @@ -531,10 +815,13 @@ inline ASTNode* Parser::parseLeftDenotation(ASTNode* left) { return pf; } - // Binary infix operators + // --- Binary infix: expr OP expr --- + // OP'nin önceliğine göre sağ operand'ı ayrıştır. uint16_t prec = ct.getPowerOperator(); - nextToken(); + nextToken(); // Operatörü tüket + // Sağ operand. prec parametresi, daha yüksek öncelikli operatörlerin + // sağ operand içinde gruplanmasını sağlar. ASTNode* right = parseExpression(prec); BinaryExpressionNode* bin = new BinaryExpressionNode(); @@ -546,4 +833,4 @@ inline ASTNode* Parser::parseLeftDenotation(ASTNode* left) { return bin; } -#endif +#endif // SAQUT_PARSER diff --git a/src/parser/token.hpp b/src/parser/token.hpp index ebbd69c..32fea04 100644 --- a/src/parser/token.hpp +++ b/src/parser/token.hpp @@ -1,3 +1,68 @@ +// ============================================================================ +// saQut Compiler — Parser Token Tipleri ve Operatör Öncelik Tablosu +// ============================================================================ +// +// DİZİN: src/parser/token.hpp +// KATMAN: Katman 3 — Tokenizer ile Parser arasında köprü +// BAĞIMLI: Tokenizer (src/tokenizer/tokenizer.hpp) +// KULLANAN: AST (src/parser/ast.hpp), Parser (src/parser/parser.hpp) +// +// AMAÇ: +// Tokenizer'ın ürettiği ham Token'ları (string tipli) Parser'ın anlayacağı +// anlamsal tiplere (TokenType enum) dönüştürür. Ayrıca operatör önceliğini +// (precedence) ve birleşme yönünü (associativity) merkezi olarak tanımlar. +// +// Bu dosya, Pratt parser'ın "kalbi"dir — tüm operatör önceliği ve birleşme +// kuralları burada tek bir yerde tanımlanır. +// +// ADR-002: Neden Merkezi Operatör Öncelik Tablosu? +// Recursive descent parser'larda operatör önceliği, her seviye için ayrı +// bir fonksiyon yazılarak (parseAddExpr, parseMulExpr, ...) kod tekrarına +// neden olur. Yeni bir operatör eklemek için yeni fonksiyon + mevcut +// fonksiyonları değiştirmek gerekir. +// +// Pratt parser'da tüm öncelik bilgisi TEK BİR TABLODA (TokenPrecedence) +// toplanır. Yeni operatör eklemek = tabloya bir satır eklemek. +// +// TASARIM KARARLARI: +// 1. TokenType enum: uint16_t tabanlı. Neden? 65K'dan fazla token tipi +// olmayacak, 2 byte yeterli. Bellek tasarrufu AST'de fark eder. +// +// 2. Üç harita (KEYWORD_MAP, OPERATOR_MAP, OPERATOR_MAP_REV, OPERATOR_MAP_STRREV): +// - KEYWORD_MAP: "if" → KW_IF, string'den TokenType'a +// - OPERATOR_MAP: "+" → PLUS, operatör string'inden TokenType'a +// - OPERATOR_MAP_REV: PLUS → "+", log çıktısı için ters harita +// - OPERATOR_MAP_STRREV: PLUS → "PLUS", enum ismini string olarak verir +// Neden dört harita? Çünkü std::unordered_map tek yönlüdür. +// bidirectional_map kütüphanesi kullanılabilirdi ama bağımlılık istemedik. +// +// 3. TokenPrecedence(): 18 seviyeli öncelik sistemi. +// C/C++/Java standartlarına uygun. Yüksek sayı = yüksek öncelik. +// Seviye 18 (en yüksek): üye erişimi (., ->, [], (), ::) +// Seviye 1 (en düşük): virgül (,) +// Seviye 0: önceliksiz (değerler, EOF, vb.) +// +// 4. RightAssociative(): Hangi operatörler sağdan sola birleşir? +// - Atama (=, +=, vb.) +// - Üs alma (**, ^) — matematiksel sağ birleşme: a^b^c = a^(b^c) +// - Ternary (?:) +// Diğer tüm operatörler soldan sağa birleşir. +// +// 5. ParserToken yapısı: +// Token* token: Tokenizer'ın ürettiği Token'a pointer. Değer kopyası +// DEĞİL. Neden pointer? Çünkü Token polimorfik (NumberToken, StringToken, +// vb.) ve değer kopyası object slicing'e neden olur. +// BUG FIX (commit 40579ca): Eskiden Token token (değer) vardı. +// TokenType type: Token'ın anlamsal tipi. +// is() / getPowerOperator() / isRightAssociative(): kolaylık metotları. +// +// BİLİNEN SINIRLAMALAR (TODO): +// TODO: Özel operatörler: ?., ??, |>, >>=, vb. (ileride eklenebilir) +// TODO: Kullanıcı tanımlı operatör önceliği (DSL'ler için) +// TODO: Token konum bilgisi (satır/sütun) ParserToken'a eklenmeli +// +// ============================================================================ + #ifndef SAQUT_PARSER_TOKEN #define SAQUT_PARSER_TOKEN @@ -8,61 +73,221 @@ #include #include "tokenizer/tokenizer.hpp" +// ============================================================================ +// TokenList — Token Vektörü Tip Kısaltması +// ============================================================================ +// +// Tokenizer::scan() tarafından üretilen, Parser::parse() tarafından tüketilen +// token listesi. Ham pointer'lar içerir — bellek yönetimi çağırana aittir. +// +// TODO: std::vector> ile otomatik bellek yönetimi +// typedef std::vector TokenList; -// ============================================================ -// TokenType enum -// ============================================================ - +// ============================================================================ +// TokenType — Anlamsal Token Tipleri (Enum) +// ============================================================================ +// +// Tokenizer'ın ürettiği string tipli token'ları ("number", "operator", ...) +// Parser'ın anlayacağı anlamsal tiplere dönüştürür. +// +// KATEGORİLER: +// 1. Değerler: IDENTIFIER, NUMBER, STRING, SVR_VOID (geçersiz/EOF) +// 2. Keyword'ler: KW_IF ... KW_NOEXCEPT (alfabetik sıralı) +// 3. Operatörler: Öncelik sırasına göre gruplanmış +// - Seviye 1: DOT, ARROW, LBRACKET, RBRACKET, LPAREN, RPAREN +// - Seviye 2: PLUS_PLUS, MINUS_MINUS (postfix) +// - Seviye 3: PLUS, MINUS, BANG, TILDE (unary prefix) +// - Seviye 4: STAR_STAR, CARET (üs) +// - Seviye 5: STAR, SLASH, PERCENT (çarpma/bölme) +// - Seviye 6-16: devamı... +// 4. Diğer: LBRACE, RBRACE, SEMICOLON, COMMA, COLON_COLON +// 5. Özel: END_OF_FILE, UNKNOWN, COMMENT, PREPROCESSOR +// +// NEDEN uint16_t? Bellek optimizasyonu. Her AST düğümü bir TokenType taşır. +// Binlerce düğümde 2 byte vs 4 byte fark eder. +// enum class TokenType : uint16_t { - IDENTIFIER, - NUMBER, - STRING, - SVR_VOID, + // --- Değerler ve Tanımlayıcılar --- + IDENTIFIER, // değişken/fonksiyon ismi + NUMBER, // 42, 0xFF, 0b1010, 3.14 + STRING, // "merhaba" + SVR_VOID, // Geçersiz/EOF sinyali (Parser içinde kullanılır) - // Keywords - KW_IF, KW_ELSE, KW_FOR, KW_WHILE, KW_DO, - KW_SWITCH, KW_CASE, KW_DEFAULT, KW_BREAK, KW_CONTINUE, - KW_RETURN, KW_CLASS, KW_INTERFACE, KW_ENUM, - KW_EXTENDS, KW_IMPLEMENTS, KW_NEW, - KW_PUBLIC, KW_PRIVATE, KW_PROTECTED, KW_STATIC, - KW_FINAL, KW_ABSTRACT, - KW_VOID, KW_BOOL, KW_INT, KW_FLOAT_TYPE, KW_DOUBLE, - KW_CHAR, KW_STRING_TYPE, - KW_TRUE, KW_FALSE, KW_NULL, - KW_TRY, KW_CATCH, KW_FINALLY, KW_THROW, KW_THROWS, KW_ASSERT, - KW_IMPORT, KW_PACKAGE, KW_NATIVE, - KW_SYNCHRONIZED, KW_VOLATILE, KW_TRANSIENT, - KW_CONST, KW_EXTERN, KW_TYPEDEF, KW_SIZEOF, - KW_ALIGNOF, KW_DECLTYPE, KW_AUTO, KW_CONSTEXPR, KW_NOEXCEPT, + // --- Kontrol Akışı Keyword'leri --- + KW_IF, // if + KW_ELSE, // else + KW_FOR, // for + KW_WHILE, // while + KW_DO, // do + KW_SWITCH, // switch + KW_CASE, // case + KW_DEFAULT, // default + KW_BREAK, // break + KW_CONTINUE, // continue + KW_RETURN, // return - // Operators (precedence order) - DOT, ARROW, LBRACKET, RBRACKET, LPAREN, RPAREN, - PLUS_PLUS, MINUS_MINUS, - PLUS, MINUS, BANG, TILDE, - STAR_STAR, CARET, - STAR, SLASH, PERCENT, - LSHIFT, RSHIFT, - LESS, LESS_EQUAL, GREATER, GREATER_EQUAL, - EQUAL_EQUAL, BANG_EQUAL, - AMPERSAND, PIPE, - AMPERSAND_AMPERSAND, PIPE_PIPE, - TERNARY, COLON, - EQUAL, PLUS_EQUAL, MINUS_EQUAL, STAR_EQUAL, SLASH_EQUAL, - PERCENT_EQUAL, AMPERSAND_EQUAL, PIPE_EQUAL, CARET_EQUAL, - LSHIFT_EQUAL, RSHIFT_EQUAL, + // --- OOP Keyword'leri --- + KW_CLASS, // class + KW_INTERFACE, // interface + KW_ENUM, // enum + KW_EXTENDS, // extends + KW_IMPLEMENTS, // implements + KW_NEW, // new + KW_PUBLIC, // public + KW_PRIVATE, // private + KW_PROTECTED, // protected + KW_STATIC, // static + KW_FINAL, // final + KW_ABSTRACT, // abstract - // Other symbols - LBRACE, RBRACE, SEMICOLON, COMMA, COLON_COLON, + // --- Tip Keyword'leri --- + KW_VOID, // void + KW_BOOL, // bool + KW_INT, // int + KW_FLOAT_TYPE, // float (FLOAT math.h'de tanımlı olabilir, TYPE eki var) + KW_DOUBLE, // double + KW_CHAR, // char + KW_STRING_TYPE, // string - END_OF_FILE, UNKNOWN, COMMENT, PREPROCESSOR, + // --- Literal Keyword'ler --- + KW_TRUE, // true + KW_FALSE, // false + KW_NULL, // null + + // --- İstisna Yönetimi --- + KW_TRY, // try + KW_CATCH, // catch + KW_FINALLY, // finally + KW_THROW, // throw + KW_THROWS, // throws + KW_ASSERT, // assert + + // --- Modül/Paket --- + KW_IMPORT, // import + KW_PACKAGE, // package + + // --- C/C++ Ekleri --- + KW_NATIVE, // native (JNI) + KW_SYNCHRONIZED, // synchronized (Java) + KW_VOLATILE, // volatile + KW_TRANSIENT, // transient + KW_CONST, // const + KW_EXTERN, // extern + KW_TYPEDEF, // typedef + KW_SIZEOF, // sizeof + KW_ALIGNOF, // alignof + KW_DECLTYPE, // decltype + KW_AUTO, // auto + KW_CONSTEXPR, // constexpr + KW_NOEXCEPT, // noexcept + + // ================================================================ + // Operatörler — Öncelik sırasına göre gruplanmış + // ================================================================ + + // Seviye 1 (18): Üye erişimi ve çağrı — En yüksek öncelik + DOT, // . + ARROW, // -> + LBRACKET, // [ + RBRACKET, // ] + LPAREN, // ( + RPAREN, // ) + + // Seviye 2 (17): Postfix + PLUS_PLUS, // ++ (postfix) + MINUS_MINUS, // -- (postfix) + + // Seviye 3 (16): Unary Prefix + PLUS, // + (unary) + MINUS, // - (unary) + BANG, // ! (mantıksal değil) + TILDE, // ~ (bitsel değil) + + // Seviye 4 (15): Üs alma + STAR_STAR, // ** (Python tarzı üs) + CARET, // ^ (bazı dillerde üs) + + // Seviye 5 (14): Çarpma/Bölme + STAR, // * + SLASH, // / + PERCENT, // % + + // Seviye 6 (13): Toplama/Çıkarma — PLUS ve MINUS yukarıda (unary + binary) + // Seviye 7 (12): Bitsel kaydırma + LSHIFT, // << + RSHIFT, // >> + + // Seviye 8 (11): İlişkisel karşılaştırma + LESS, // < + LESS_EQUAL, // <= + GREATER, // > + GREATER_EQUAL, // >= + + // Seviye 9 (10): Eşitlik + EQUAL_EQUAL, // == + BANG_EQUAL, // != + + // Seviye 10 (9): Bitsel VE + AMPERSAND, // & + + // Seviye 11 (8): Bitsel XOR — CARET yukarıda (üs veya XOR) + + // Seviye 12 (7): Bitsel VEYA + PIPE, // | + + // Seviye 13 (6): Mantıksal VE + AMPERSAND_AMPERSAND, // && + + // Seviye 14 (5): Mantıksal VEYA + PIPE_PIPE, // || + + // Seviye 15 (4): Üçlü koşul (ternary) + TERNARY, // ? + COLON, // : (ternary ve etiket için) + + // Seviye 16 (3): Atama + EQUAL, // = + PLUS_EQUAL, // += + MINUS_EQUAL, // -= + STAR_EQUAL, // *= + SLASH_EQUAL, // /= + PERCENT_EQUAL, // %= + AMPERSAND_EQUAL, // &= + PIPE_EQUAL, // |= + CARET_EQUAL, // ^= + LSHIFT_EQUAL, // <<= + RSHIFT_EQUAL, // >>= + + // --- Diğer Semboller --- + LBRACE, // { + RBRACE, // } + SEMICOLON, // ; + COMMA, // , + COLON_COLON, // :: + + // --- Özel --- + END_OF_FILE, // Dosya sonu + UNKNOWN, // Bilinmeyen karakter + COMMENT, // Yorum (// veya /* */) — şu anda token üretilmez + PREPROCESSOR, // Önişlemci (#) — şu anda kullanılmıyor }; -// ============================================================ -// Keyword map -// ============================================================ - +// ============================================================================ +// KEYWORD_MAP — Keyword String → TokenType +// ============================================================================ +// +// Tokenizer'ın ürettiği KeywordToken'ların token değerini (örn: "if") +// Parser'ın anlayacağı TokenType'a (KW_IF) dönüştürür. +// +// std::unordered_map: O(1) ortalama arama. const: derleme zamanı sabiti. +// std::string_view: string kopyalamadan kaçınır. +// +// NOT: Bu harita, Tokenizer'daki keywords[] dizisi ile eşleşmelidir. +// Birinde ekleme yapılırsa diğerine de eklenmelidir. +// inline const std::unordered_map KEYWORD_MAP = { + // --- Control flow --- {"if", TokenType::KW_IF}, {"else", TokenType::KW_ELSE}, {"for", TokenType::KW_FOR}, @@ -75,6 +300,7 @@ inline const std::unordered_map KEYWORD_MAP = { {"continue", TokenType::KW_CONTINUE}, {"return", TokenType::KW_RETURN}, + // --- OOP --- {"class", TokenType::KW_CLASS}, {"interface", TokenType::KW_INTERFACE}, {"enum", TokenType::KW_ENUM}, @@ -82,6 +308,7 @@ inline const std::unordered_map KEYWORD_MAP = { {"implements", TokenType::KW_IMPLEMENTS}, {"new", TokenType::KW_NEW}, + // --- Access modifiers --- {"public", TokenType::KW_PUBLIC}, {"private", TokenType::KW_PRIVATE}, {"protected", TokenType::KW_PROTECTED}, @@ -89,6 +316,7 @@ inline const std::unordered_map KEYWORD_MAP = { {"final", TokenType::KW_FINAL}, {"abstract", TokenType::KW_ABSTRACT}, + // --- Types --- {"void", TokenType::KW_VOID}, {"bool", TokenType::KW_BOOL}, {"int", TokenType::KW_INT}, @@ -97,10 +325,12 @@ inline const std::unordered_map KEYWORD_MAP = { {"char", TokenType::KW_CHAR}, {"string", TokenType::KW_STRING_TYPE}, + // --- Literals --- {"true", TokenType::KW_TRUE}, {"false", TokenType::KW_FALSE}, {"null", TokenType::KW_NULL}, + // --- Exception handling --- {"try", TokenType::KW_TRY}, {"catch", TokenType::KW_CATCH}, {"finally", TokenType::KW_FINALLY}, @@ -108,13 +338,11 @@ inline const std::unordered_map KEYWORD_MAP = { {"throws", TokenType::KW_THROWS}, {"assert", TokenType::KW_ASSERT}, + // --- Modules/packages --- {"import", TokenType::KW_IMPORT}, {"package", TokenType::KW_PACKAGE}, - {"native", TokenType::KW_NATIVE}, - {"synchronized",TokenType::KW_SYNCHRONIZED}, - {"volatile", TokenType::KW_VOLATILE}, - {"transient", TokenType::KW_TRANSIENT}, + // --- C/C++ specific --- {"const", TokenType::KW_CONST}, {"extern", TokenType::KW_EXTERN}, {"typedef", TokenType::KW_TYPEDEF}, @@ -122,13 +350,26 @@ inline const std::unordered_map KEYWORD_MAP = { {"auto", TokenType::KW_AUTO}, {"constexpr", TokenType::KW_CONSTEXPR}, {"noexcept", TokenType::KW_NOEXCEPT}, + {"native", TokenType::KW_NATIVE}, + {"synchronized",TokenType::KW_SYNCHRONIZED}, + {"volatile", TokenType::KW_VOLATILE}, + {"transient", TokenType::KW_TRANSIENT}, }; -// ============================================================ -// Operator maps -// ============================================================ - +// ============================================================================ +// OPERATOR_MAP — Operatör/Delimiter String → TokenType +// ============================================================================ +// +// Tokenizer'ın ürettiği OperatorToken ve DelimiterToken'ları TokenType'a +// dönüştürür. Her iki token tipi de aynı haritayı kullanır çünkü parser +// seviyesinde delimiter'lar da operatör gibi işlenir. +// +// SIRALAMA ÖNEMLİ DEĞİL (unordered_map). +// Ama Tokenizer'daki operators[] ve delimiters[] dizilerindeki sıralama +// önemlidir — çok karakterliler önce gelmelidir. +// inline const std::unordered_map OPERATOR_MAP = { + // --- 2 karakterli --- {"->", TokenType::ARROW}, {"::", TokenType::COLON_COLON}, {"==", TokenType::EQUAL_EQUAL}, @@ -143,6 +384,7 @@ inline const std::unordered_map OPERATOR_MAP = { {">>", TokenType::RSHIFT}, {"**", TokenType::STAR_STAR}, + // --- Birleşik atama --- {"+=", TokenType::PLUS_EQUAL}, {"-=", TokenType::MINUS_EQUAL}, {"*=", TokenType::STAR_EQUAL}, @@ -154,6 +396,7 @@ inline const std::unordered_map OPERATOR_MAP = { {"<<=", TokenType::LSHIFT_EQUAL}, {">>=", TokenType::RSHIFT_EQUAL}, + // --- 1 karakterli operatörler --- {"+", TokenType::PLUS}, {"-", TokenType::MINUS}, {"*", TokenType::STAR}, @@ -168,6 +411,7 @@ inline const std::unordered_map OPERATOR_MAP = { {"|", TokenType::PIPE}, {"=", TokenType::EQUAL}, + // --- Delimiter'lar (operatör gibi işlenir) --- {"[", TokenType::LBRACKET}, {"]", TokenType::RBRACKET}, {"(", TokenType::LPAREN}, @@ -181,6 +425,14 @@ inline const std::unordered_map OPERATOR_MAP = { {"?", TokenType::TERNARY}, }; +// ============================================================================ +// OPERATOR_MAP_REV — TokenType → Operatör String (Log için) +// ============================================================================ +// +// AST ağacını konsola yazdırırken (log) TokenType enum değerini insan +// tarafından okunabilir operatör sembolüne dönüştürür. +// Örn: TokenType::PLUS → "+" +// inline const std::unordered_map OPERATOR_MAP_REV = { {TokenType::ARROW, "->"}, {TokenType::COLON_COLON, "::"}, @@ -231,6 +483,13 @@ inline const std::unordered_map OPERATOR_MAP_REV = {TokenType::TERNARY, "?"}, }; +// ============================================================================ +// OPERATOR_MAP_STRREV — TokenType → Enum İsmi (Log için) +// ============================================================================ +// +// AST log çıktısında operatörün enum ismini gösterir. +// Örn: TokenType::PLUS → "PLUS" +// inline const std::unordered_map OPERATOR_MAP_STRREV = { {TokenType::ARROW, "ARROW"}, {TokenType::COLON_COLON, "COLON_COLON"}, @@ -281,10 +540,42 @@ inline const std::unordered_map OPERATOR_MAP_STRREV {TokenType::TERNARY, "TERNARY"}, }; -// ============================================================ -// Precedence table (Pratt parsing) -// ============================================================ - +// ============================================================================ +// TokenPrecedence — Operatör Öncelik Tablosu +// ============================================================================ +// +// Pratt parser'ın kalbi. Her TokenType için bir öncelik seviyesi döndürür. +// Yüksek sayı = daha sıkı bağlanma (daha yüksek öncelik). +// +// ÖNCELİK SEVİYELERİ (yüksekten düşüğe): +// 18: Üye erişimi . -> [ ] ( ) +// 17: Postfix ++ -- +// 16: Unary prefix ! ~ +// 15: Üs alma ** ^ +// 14: Çarpma/Bölme * / % +// 13: Toplama/Çıkarma + - +// 12: Bitsel kaydırma << >> +// 11: İlişkisel < <= > >= +// 10: Eşitlik == != +// 9: Bitsel VE & +// 8: Bitsel XOR ^ (üs olarak 15'te de var — bağlama göre) +// 7: Bitsel VEYA | +// 6: Mantıksal VE && +// 5: Mantıksal VEYA || +// 4: Ternary ? +// 3: Ternary else : +// 2: Atama = += -= vb. +// 1: Virgül , +// 0: Önceliksiz (değerler, EOF, bilinmeyen) +// +// NOT: C/C++'da ^ operatörü bitsel XOR'tur (seviye 8), ama Python'da üs (seviye 15). +// saQut'ta ^ hem üs hem XOR olarak kullanılabilir (AST'de bağlam belirler). +// Şimdilik ^ seviye 15 (üs) olarak ayarlı. +// +// BUG FIX (commit 438bc0e): Seviye 8'deki ölü kod (CARET için case olmadan +// return 8) temizlendi. CARET zaten seviye 15'te STAR_STAR ile birlikte +// işleniyor. +// inline uint16_t TokenPrecedence(TokenType type) { switch (type) { // Level 18: Member access / call @@ -299,141 +590,173 @@ inline uint16_t TokenPrecedence(TokenType type) { case TokenType::MINUS_MINUS: return 17; - // Level 16: Unary prefix - case TokenType::BANG: - case TokenType::TILDE: + // Level 16: Unary prefix — sadece her zaman prefix olanlar + case TokenType::BANG: // ! + case TokenType::TILDE: // ~ return 16; // Level 15: Exponentiation - case TokenType::STAR_STAR: - case TokenType::CARET: + case TokenType::STAR_STAR: // ** + case TokenType::CARET: // ^ (Python tarzı üs) return 15; // Level 14: Multiplicative - case TokenType::STAR: - case TokenType::SLASH: - case TokenType::PERCENT: + case TokenType::STAR: // * + case TokenType::SLASH: // / + case TokenType::PERCENT: // % return 14; - // Level 13: Additive - case TokenType::PLUS: - case TokenType::MINUS: + // Level 13: Additive — PLUS ve MINUS hem unary hem binary + case TokenType::PLUS: // + + case TokenType::MINUS: // - return 13; // Level 12: Bit shift - case TokenType::LSHIFT: - case TokenType::RSHIFT: + case TokenType::LSHIFT: // << + case TokenType::RSHIFT: // >> return 12; // Level 11: Relational - case TokenType::LESS: - case TokenType::LESS_EQUAL: - case TokenType::GREATER: - case TokenType::GREATER_EQUAL: + case TokenType::LESS: // < + case TokenType::LESS_EQUAL:// <= + case TokenType::GREATER: // > + case TokenType::GREATER_EQUAL: // >= return 11; // Level 10: Equality - case TokenType::EQUAL_EQUAL: - case TokenType::BANG_EQUAL: + case TokenType::EQUAL_EQUAL: // == + case TokenType::BANG_EQUAL: // != return 10; // Level 9: Bitwise AND - case TokenType::AMPERSAND: + case TokenType::AMPERSAND: // & return 9; - // Level 8: Bitwise XOR — CARET already handled in 15 as exponent + // Level 8: Bitwise XOR — şu anda CARET seviye 15'te (üs) // Level 7: Bitwise OR - case TokenType::PIPE: + case TokenType::PIPE: // | return 7; // Level 6: Logical AND - case TokenType::AMPERSAND_AMPERSAND: + case TokenType::AMPERSAND_AMPERSAND: // && return 6; // Level 5: Logical OR - case TokenType::PIPE_PIPE: + case TokenType::PIPE_PIPE: // || return 5; // Level 4: Ternary - case TokenType::TERNARY: + case TokenType::TERNARY: // ? return 4; - case TokenType::COLON: - return 3; + case TokenType::COLON: // : (ternary için) + return 3; // ternary'den düşük, atamadan yüksek // Level 2: Assignment - case TokenType::EQUAL: - case TokenType::PLUS_EQUAL: - case TokenType::MINUS_EQUAL: - case TokenType::STAR_EQUAL: - case TokenType::SLASH_EQUAL: - case TokenType::PERCENT_EQUAL: - case TokenType::AMPERSAND_EQUAL: - case TokenType::PIPE_EQUAL: - case TokenType::CARET_EQUAL: - case TokenType::LSHIFT_EQUAL: - case TokenType::RSHIFT_EQUAL: + case TokenType::EQUAL: // = + case TokenType::PLUS_EQUAL:// += + case TokenType::MINUS_EQUAL:// -= + case TokenType::STAR_EQUAL:// *= + case TokenType::SLASH_EQUAL:// /= + case TokenType::PERCENT_EQUAL:// %= + case TokenType::AMPERSAND_EQUAL:// &= + case TokenType::PIPE_EQUAL:// |= + case TokenType::CARET_EQUAL:// ^= + case TokenType::LSHIFT_EQUAL:// <<= + case TokenType::RSHIFT_EQUAL:// >>= return 2; // Level 1: Comma - case TokenType::COMMA: + case TokenType::COMMA: // , return 1; default: - return 0; + return 0; // Önceliksiz: değerler, EOF, bilinmeyen } } -// ============================================================ -// Right-associative check -// ============================================================ - +// ============================================================================ +// RightAssociative — Sağdan Sola Birleşme Kontrolü +// ============================================================================ +// +// Hangi operatörler sağdan sola birleşir? +// +// Sağ birleşmeli operatörler (a OP b OP c = a OP (b OP c)): +// - Üs alma: **, ^ (matematiksel: 2^3^2 = 2^(3^2) = 2^9 = 512) +// - Atama: =, +=, -=, vb. (a = b = 5 → a = (b = 5)) +// - Ternary: ?: (a ? b : c ? d : e → a ? b : (c ? d : e)) +// +// Sol birleşmeli operatörler (a OP b OP c = (a OP b) OP c): +// - Tüm diğerleri: +, -, *, /, ==, &&, vb. +// inline bool RightAssociative(TokenType type) { switch (type) { - case TokenType::STAR_STAR: - case TokenType::CARET: - case TokenType::EQUAL: - case TokenType::PLUS_EQUAL: - case TokenType::MINUS_EQUAL: - case TokenType::STAR_EQUAL: - case TokenType::SLASH_EQUAL: - case TokenType::PERCENT_EQUAL: - case TokenType::AMPERSAND_EQUAL: - case TokenType::PIPE_EQUAL: - case TokenType::CARET_EQUAL: - case TokenType::LSHIFT_EQUAL: - case TokenType::RSHIFT_EQUAL: - case TokenType::TERNARY: + case TokenType::STAR_STAR: // ** (üs) + case TokenType::CARET: // ^ (üs) + case TokenType::EQUAL: // = + case TokenType::PLUS_EQUAL: // += + case TokenType::MINUS_EQUAL:// -= + case TokenType::STAR_EQUAL: // *= + case TokenType::SLASH_EQUAL:// /= + case TokenType::PERCENT_EQUAL:// %= + case TokenType::AMPERSAND_EQUAL:// &= + case TokenType::PIPE_EQUAL: // |= + case TokenType::CARET_EQUAL:// ^= + case TokenType::LSHIFT_EQUAL:// <<= + case TokenType::RSHIFT_EQUAL:// >>= + case TokenType::TERNARY: // ? (ternary) return true; default: return false; } } -// ============================================================ -// ParserToken -// ============================================================ - +// ============================================================================ +// ParserToken — Parser'ın Kullandığı Token Yapısı +// ============================================================================ +// +// Tokenizer'ın ürettiği ham Token ile Parser'ın ihtiyaç duyduğu anlamsal +// tipi (TokenType) bir arada tutar. +// +// ALANLAR: +// token (Token*): Tokenizer'dan gelen orijinal token. Neden pointer? +// Çünkü Token polimorfik bir sınıf hiyerarşisidir. Değer kopyası (Token) +// object slicing'e neden olur — alt sınıf verileri (NumberToken.isFloat, +// StringToken.context) kaybolur. +// BUG FIX (commit 40579ca): Eskiden Token token (değer) tutuyordu. +// +// type (TokenType): Token'ın anlamsal tipi. Örn: NUMBER, PLUS, KW_IF. +// +// METOTLAR: +// is(TokenType): Bu token belirtilen tipte mi? +// is({...}): Bu token listedeki tiplerden biri mi? +// getPowerOperator(): Bu token bir operatör ise önceliğini döndür. +// isRightAssociative(): Bu operatör sağ birleşmeli mi? +// struct ParserToken { - Token* token = nullptr; - TokenType type = TokenType::SVR_VOID; + Token* token = nullptr; // Tokenizer'dan gelen orijinal token + TokenType type = TokenType::SVR_VOID; // Anlamsal tip + // Tek tip kontrolü bool is(TokenType t) const { return type == t; } + // Çoklu tip kontrolü — örn: is({KW_INT, KW_FLOAT, KW_VOID}) bool is(std::initializer_list types) const { for (TokenType t : types) if (type == t) return true; return false; } + // Operatör önceliği (Pratt parser için) uint16_t getPowerOperator() const { return TokenPrecedence(type); } + // Sağ birleşmeli mi? bool isRightAssociative() const { return RightAssociative(type); } }; -#endif +#endif // SAQUT_PARSER_TOKEN diff --git a/src/tokenizer/tokenizer.hpp b/src/tokenizer/tokenizer.hpp index 83a37e1..7f73091 100644 --- a/src/tokenizer/tokenizer.hpp +++ b/src/tokenizer/tokenizer.hpp @@ -1,3 +1,70 @@ +// ============================================================================ +// saQut Compiler — Tokenizer (Token Seviyesinde Tarayıcı) +// ============================================================================ +// +// DİZİN: src/tokenizer/tokenizer.hpp +// KATMAN: Katman 2 — Lexer üzerine kurulu +// BAĞIMLI: Lexer (src/lexer/lexer.hpp) +// KULLANAN: Parser (src/parser/parser.hpp), ParserToken (src/parser/token.hpp) +// +// AMAÇ: +// Lexer tarafından sağlanan karakter akışını alıp anlamlı token'lara dönüştürür. +// Token'lar derleyicinin "kelime"leridir — parser'ın anlayacağı en küçük birim. +// +// Üretilen token tipleri (6 adet polimorfik sınıf): +// ┌─────────────────┬──────────────────────────────────┐ +// │ Sınıf │ Örnek token'lar │ +// ├─────────────────┼──────────────────────────────────┤ +// │ NumberToken │ 42, 0xFF, 3.14, 1e10 │ +// │ StringToken │ "merhaba", "satır\niki" │ +// │ OperatorToken │ +, -, *, /, ==, !=, ++, -- │ +// │ DelimiterToken │ (, ), {, }, [, ], ;, ,, ., -> │ +// │ KeywordToken │ if, for, while, int, void │ +// │ IdentifierToken │ x, myVar, _private │ +// └─────────────────┴──────────────────────────────────┘ +// +// ADR-004: Neden Polimorfik Token Sınıfları? +// Seçenek 1 — Tagged union (std::variant): Tüm veriyi tek struct'ta +// +: Bellek tek parça, cache-friendly +// -: Tip eklemek için union'ı değiştirmek gerek +// Seçenek 2 — Class hierarchy (seçilen): Base Token, alt sınıflar +// +: Yeni token tipi eklemek kolay (yeni sınıf türet) +// +: Her token kendi verisini taşır (NumberToken.isFloat, StringToken.context) +// -: Heap tahsisi (new) gerektirir +// -: virtual destructor çağrısı (maliyet: 1 vtable lookup) +// +// Karar: Class hierarchy. Derleyici gibi bir araçta kod netliği ve +// genişletilebilirlik, mikro-performanstan daha önemlidir. +// +// TASARIM KARARLARI: +// 1. Tablolar (operators, delimiters, keywords): constexpr std::string_view dizileri. +// Derleme zamanında sabit, heap tahsisi yok. Sıralama önceliği: +// - Önce keyword'ler: if/for/while gibi kelimeler identifier'lardan önce yakalanmalı +// - Sonra delimiter'lar: -> ve :: gibi 2 karakterliler önce, tek karakterliler sonra +// - Sonra operator'ler: != ve == gibi 2 karakterliler önce, tek karakterliler sonra +// - En son identifier: yukarıdakilerden hiçbirine uymayan her şey +// +// 2. Keyword boundary check: "do" keyword'ü "double" ile karışmasın diye, +// keyword eşleşmesinden sonraki karakter kontrol edilir. Sonraki karakter +// harf/rakam/_/$ ise bu bir keyword değil, identifier'dır. +// +// 3. scope() metodu: Her çağrıldığında bir sonraki token'ı döndürür. +// EOF'da "EOL" isimli özel bir token döndürür (Token tipi, özel değil). +// Bu, boş token listesi sorununu çözer (parser her zaman bir token görür). +// +// 4. Yorum satırları: // (tek satır) ve /* */ (çok satırlı) desteklenir. +// Yorumlar token üretmez, sessizce atlanır. +// NOT: İç içe /* */ yorumları desteklenmez (C standardı gibi). +// +// BİLİNEN SINIRLAMALAR (TODO): +// TODO: String escape sequence'leri tam değil (\x, \u, \U eksik) +// TODO: Char literal: 'a' formatı okunamıyor +// TODO: Raw string: R"(...)" formatı yok +// TODO: Token konum bilgisi (satır/sütun) token'lara eklenmeli +// TODO: Bellek sızıntısı: Token'lar heap'te new ile oluşturuluyor, silme sorumluluğu çağıranda +// +// ============================================================================ + #ifndef SAQUT_TOKENIZER #define SAQUT_TOKENIZER @@ -6,81 +73,186 @@ #include #include "lexer/lexer.hpp" -// ============================================================ -// Token classes -// ============================================================ - +// ============================================================================ +// Token Temel Sınıfı +// ============================================================================ +// +// Tüm token tiplerinin ortak atası. Polimorfik kullanım için virtual destructor +// içerir. type alanı, token'ın hangi alt sınıfa ait olduğunu string olarak tutar +// (RTTI'ye alternatif, daha hafif). +// +// ALANLAR: +// type : Token tipi ("number", "string", "operator", "delimiter", "keyword", "identifier") +// token : Token'ın ham metin hali (örn: "42", "+", "if", "myVar") +// start : Kaynak koddaki başlangıç offset'i (Lexer offset'i) +// end : Kaynak koddaki bitiş offset'i +// class Token { protected: - std::string type; + std::string type; // Alt sınıf tarafından constructor'da atanır public: - int start = 0; - int end = 0; - std::string token; + int start = 0; // Kaynak koddaki başlangıç konumu + int end = 0; // Kaynak koddaki bitiş konumu + std::string token; // Token'ın ham metin gösterimi std::string gettype() { return type; } virtual ~Token() = default; }; +// ============================================================================ +// StringToken — String Literal'ları ("...") +// ============================================================================ +// +// Örnek: "merhaba dünya", "satır\niki", "tırnak \" içinde" +// +// context: Escape sequence'ler çözümlenmiş gerçek string içeriği. +// Örn: token="\"a\\nb\"" ise context="a\nb" +// size: context'in uzunluğu (token'dan farklı olabilir) +// token: Tırnak işaretleri ve escape sequence'ler dahil ham hali +// class StringToken : public Token { public: StringToken() { type = "string"; } - std::string context; - int size = 0; + std::string context; // İşlenmiş string içeriği (escape'ler açılmış) + int size = 0; // context uzunluğu }; +// ============================================================================ +// NumberToken — Sayısal Literal'lar (42, 0xFF, 3.14) +// ============================================================================ +// +// Sayı tabanı, float/整数 ayrımı, bilimsel gösterim bilgisi taşır. +// Lexer'ın INumber yapısından dönüştürülür. +// +// isFloat: true ise float/double literal (nokta veya epsilon içerir) +// hasEpsilon: true ise bilimsel gösterim (örn: 1e10) +// base: Sayı tabanı: 2, 8, 10, 16 +// token: Sayının ham string hali (örn: "0xFF", "3.14e-2") +// class NumberToken : public Token { public: NumberToken() { type = "number"; } - bool isFloat = false; - bool hasEpsilon = false; - int base = 10; + bool isFloat = false; // Ondalıklı sayı mı? + bool hasEpsilon = false; // Bilimsel gösterim (e/E) içeriyor mu? + int base = 10; // Sayı tabanı }; +// ============================================================================ +// OperatorToken — Operatörler (+, -, *, /, ==, ++, vb.) +// ============================================================================ +// +// Aritmetik, karşılaştırma, mantıksal, bitsel, atama operatörleri. +// Token değeri doğrudan operatörün string halidir: "+", "-", "==", "++". +// class OperatorToken : public Token { public: OperatorToken() { type = "operator"; } }; +// ============================================================================ +// DelimiterToken — Sınırlandırıcılar ({, }, (, ), [, ], ;, ,, ., ->, ::) +// ============================================================================ +// +// Kod yapısını belirleyen karakterler. Bloklar, parametre listeleri, +// dizi indeksleri, ifade sonlandırma. +// class DelimiterToken : public Token { public: DelimiterToken() { type = "delimiter"; } }; +// ============================================================================ +// KeywordToken — Anahtar Kelimeler (if, for, while, int, void, ...) +// ============================================================================ +// +// Dilin rezerve edilmiş kelimeleri. Identifier olarak kullanılamazlar. +// Tokenizer scope() fonksiyonu, keyword'leri identifier'lardan önce kontrol +// eder. Keyword boundary check sayesinde "double" "do" olarak yanlış +// eşleşmez. +// class KeywordToken : public Token { public: KeywordToken() { type = "keyword"; } }; +// ============================================================================ +// IdentifierToken — Tanımlayıcılar (değişken/fonksiyon isimleri) +// ============================================================================ +// +// Harf, rakam, _ ve $ karakterlerinden oluşan, keyword olmayan isimler. +// Değişkenler, fonksiyonlar, sınıflar, metotlar için kullanılır. +// +// context: Şu anda token ile aynı (genişleme için ayrıldı) +// size: Tanımlayıcının karakter uzunluğu +// class IdentifierToken : public Token { public: IdentifierToken() { type = "identifier"; } - std::string context; - int size = 0; + std::string context; // Şu anda token ile aynı + int size = 0; // Tanımlayıcı uzunluğu }; -// ============================================================ -// Token tables -// ============================================================ +// ============================================================================ +// Token Tanıma Tabloları (Derleme Zamanı Sabitleri) +// ============================================================================ +// +// Bu tablolar, Tokenizer::scope() tarafından ham karakterlerden token üretmek +// için kullanılır. constexpr std::string_view ile tanımlanmıştır, böylece +// heap tahsisi yapılmaz ve derleme zamanında optimize edilir. +// +// SIRALAMA ÖNEMLİDİR! +// scope() fonksiyonu bu tabloları sırasıyla tarar ve İLK eşleşmede durur. +// Bu nedenle: +// - Çok karakterli operatörler (==) tek karakterlilerden (=) ÖNCE gelmeli +// - Çok karakterli delimiter'lar (->) tek karakterlilerden (.) ÖNCE gelmeli +// - Keyword'ler, identifier'lardan ÖNCE kontrol edilmeli +// +// Mevcut sıralama: keywords → delimiters → operators → identifier (fallback) +// +// ============================================================================ #include +// Operatör tablosu. Çok karakterliler (==, !=, ++, +=, vb.) önce gelir. +// NOT: Bu tablo ParserToken'daki OPERATOR_MAP ile eşleşmelidir. inline constexpr std::string_view operators[] = { + // --- 2 karakterli: karşılaştırma --- "==", "!=", "<=", ">=", "&&", "||", + // --- 2 karakterli: aritmetik --- "++", "--", "<<", ">>", + // --- 2 karakterli: birleşik atama --- "+=", "-=", "*=", "/=", "%=", "&=", "|=", "^=", + // --- 1 karakterli: aritmetik --- "+", "-", "*", "/", "%", "<", ">", + // --- 1 karakterli: bitsel/mantıksal --- "^", "!", "~", "&", "|", + // --- 1 karakterli: temel atama --- "=" }; +// Delimiter tablosu. Çok karakterliler (->, ::) önce gelir. inline constexpr std::string_view delimiters[] = { - "->", "::", - "[", "]", "(", ")", "{", "}", - ";", ",", ":", - "." + "->", "::", // 2 karakterli bağlayıcılar + "[", "]", "(", ")", "{", "}", // gruplama + ";", ",", ":", // ayırıcılar + "." // üye erişimi }; +// Keyword tablosu. Dilin tüm rezerve edilmiş kelimeleri. +// Gruplandırılmıştır: +// - Kontrol akışı: if, else, for, while, do, switch, case, vb. +// - Tipler: void, int, float, double, char, string, bool +// - Literal'lar: true, false, null +// - OOP: class, interface, enum, extends, public, private, vb. +// - Modüller: import, package +// - C/C++ ekleri: const, extern, typedef, sizeof, auto, vb. +// +// BUG FIX (commit 438bc0e): +// Eskiden tip keyword'leri bu listede yoktu. int, float gibi kelimeler +// identifier olarak tokenize ediliyordu. Parser'da KW_INT gibi tipler +// tanımlı olmasına rağmen tokenizer'dan gelmediği için değişken tanımlama +// çalışmıyordu. Tüm eksik keyword'ler eklendi. +// inline constexpr std::string_view keywords[] = { // Control flow "if", "else", "for", "while", "do", @@ -104,57 +276,106 @@ inline constexpr std::string_view keywords[] = { "native", "synchronized", "volatile", "transient" }; -// ============================================================ -// Tokenizer -// ============================================================ - +// ============================================================================ +// Tokenizer — Lexer Üzerinde Token Üretici +// ============================================================================ +// +// Tek sorumluluğu: karakter akışından token listesi üretmek. +// Durum bilgisi: Lexer'ı içerir (hmx), kendi durumu yok. +// +// KULLANIM: +// Tokenizer tokenizer; +// auto tokens = tokenizer.scan(sourceCode); +// // tokens artık kullanılabilir. İş bitince: +// for (auto* t : tokens) delete t; +// class Tokenizer { public: - Lexer hmx; + Lexer hmx; // İç Lexer. "hmx" adı tarihsel. std::vector scan(std::string input); private: - Token* scope(); - IdentifierToken* readIdentifier(); - StringToken* readString(); - void skipOneLineComment(); - void skipMultiLineComment(); + Token* scope(); // Bir sonraki token'ı döndür + IdentifierToken* readIdentifier(); // Tanımlayıcı oku + StringToken* readString(); // String literal oku + void skipOneLineComment(); // // yorum satırını atla + void skipMultiLineComment(); // /* */ yorum bloğunu atla }; -// ============================================================ -// Tokenizer implementation -// ============================================================ +// ============================================================================ +// GERÇEKLEME (Implementation) +// ============================================================================ +// -------------------------------------------------------------------------- +// scan: Kaynak kodu tara, token listesi üret. +// +// Akış: +// 1. Lexer'a kaynak kodu yükle +// 2. scope() ile tek tek token oku +// 3. "EOL" (End Of Line) token'ı gelene kadar devam et +// 4. Token listesini döndür +// +// "EOL" token'ı: scope() EOF'da üretilen özel bir Token. Parser'a "bitti" sinyali. +// Neden nullptr değil? Çünkü scope() her zaman geçerli bir pointer döndürmeli, +// aksi takdirde null kontrolü gerekir. "EOL" ile bu kontrol token tipine indirgenir. +// +// TODO: std::unique_ptr veya std::vector> ile bellek yönetimi +// -------------------------------------------------------------------------- inline std::vector Tokenizer::scan(std::string input) { std::vector tokens; hmx.setText(input); while (true) { Token* token = scope(); - if (token->token == "EOL") break; + if (token->token == "EOL") break; // Dosya sonu sinyali tokens.push_back(token); - if (hmx.isEnd()) break; + if (hmx.isEnd()) break; // Güvenlik kontrolü } return tokens; } +// -------------------------------------------------------------------------- +// scope: Bir sonraki token'ı tanı ve döndür. +// +// Token tanıma sıralaması (önemli!): +// 1. Boşlukları atla +// 2. Yorum satırlarını atla (//, /* */) +// 3. EOF kontrolü → "EOL" token'ı +// 4. String literal ("...") +// 5. Sayısal literal (0-9 ile başlayan) +// 6. Keyword'ler (sınır kontrolü ile) +// 7. Delimiter'lar +// 8. Operatörler +// 9. Identifier (fallback — yukarıdakilerden hiçbiri değilse) +// +// Keyword boundary check: +// include(kw, false) ile önce eşleşme kontrolü yapılır (konum değişmez). +// Sonra keyword'ün hemen sonrasındaki karaktere bakılır. +// Eğer bu karakter harf/rakam/_/$ ise, bu bir keyword değil, daha uzun bir +// identifier'ın parçasıdır. Örnek: "do" → "double"ın başlangıcı olabilir. +// +// BUG FIX (commit 438bc0e): Eskiden boundary check yoktu. "double" kelimesi +// "do" + "uble" olarak iki token'a ayrılıyordu. +// -------------------------------------------------------------------------- inline Token* Tokenizer::scope() { hmx.skipWhiteSpace(); + // Yorum satırları: sessizce atla, token üretme if (hmx.include("//", true)) skipOneLineComment(); if (hmx.include("/*", true)) skipMultiLineComment(); + // EOF kontrolü if (hmx.isEnd()) { Token* t = new Token(); - t->token = "EOL"; + t->token = "EOL"; // Özel sinyal token'ı return t; } - // String literals + // String literal: " ile başlar if (hmx.getchar() == '"') return readString(); - // Numbers + // Sayısal literal: rakam ile başlar (isNumeric: 0-9) if (hmx.isNumeric()) { INumber lem = hmx.readNumeric(); NumberToken* nt = new NumberToken(); @@ -167,13 +388,16 @@ inline Token* Tokenizer::scope() { return nt; } - // Keywords (check boundary: keyword must not be prefix of longer identifier) + // Keyword'ler: sınır kontrolü ile tarama + // include(kw, false) → eşleşme kontrolü yap ama konumu değiştirme + // getchar(kw.size()) → keyword sonrası karaktere bak + // Sonraki karakter harf/rakam/_/$ ise → bu bir keyword değil, devam et for (const auto& kw : keywords) { if (hmx.include(std::string(kw), false)) { char next = hmx.getchar(static_cast(kw.size())); if ((next >= 'a' && next <= 'z') || (next >= 'A' && next <= 'Z') || (next >= '0' && next <= '9') || next == '_' || next == '$') { - continue; // part of longer identifier, not a real keyword + continue; // Daha uzun bir identifier'ın parçası } KeywordToken* kt = new KeywordToken(); kt->start = hmx.getOffset(); @@ -184,7 +408,7 @@ inline Token* Tokenizer::scope() { } } - // Delimiters + // Delimiter'lar for (const auto& del : delimiters) { if (hmx.include(std::string(del), false)) { DelimiterToken* dt = new DelimiterToken(); @@ -196,7 +420,7 @@ inline Token* Tokenizer::scope() { } } - // Operators + // Operatörler for (const auto& op : operators) { if (hmx.include(std::string(op), false)) { OperatorToken* ot = new OperatorToken(); @@ -208,10 +432,24 @@ inline Token* Tokenizer::scope() { } } - // Identifier (fallback) + // Identifier (fallback): hiçbir özel token tipine uymayan her şey return readIdentifier(); } +// -------------------------------------------------------------------------- +// readIdentifier: Bir tanımlayıcı (identifier) oku. +// +// Tanımlayıcı = harf ile başlayan, harf/rakam/_/$ ile devam eden karakter dizisi. +// NOT: Rakam ile başlayamaz (o zaman sayı olurdu). +// +// Karakter seti: +// a-z, A-Z: Latin harfleri +// 0-9: Rakamlar (ilk karakter hariç) +// _ (alt çizgi): Yaygın ayraç +// $ (dolar): Java/C# uyumluluğu için +// +// TODO: Unicode harf desteği (Türkçe karakterler, Çince, Arapça, vb.) +// -------------------------------------------------------------------------- inline IdentifierToken* Tokenizer::readIdentifier() { hmx.beginPosition(); IdentifierToken* it = new IdentifierToken(); @@ -221,6 +459,7 @@ inline IdentifierToken* Tokenizer::readIdentifier() { char c = hmx.getchar(); bool read = false; + // Harf veya rakam kontrolü (ASCII) if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')) { read = true; it->token.push_back(c); @@ -232,21 +471,47 @@ inline IdentifierToken* Tokenizer::readIdentifier() { if (read) { hmx.nextChar(); } else { - break; + break; // Tanımlayıcı karakteri değil → dur } } it->end = hmx.getOffset(); it->size = static_cast(it->context.size()); - hmx.acceptPosition(); + hmx.acceptPosition(); // Başarılı okuma → konumu kalıcı yap return it; } +// -------------------------------------------------------------------------- +// readString: Bir string literal oku ("...") +// +// Desteklenen escape sequence'ler: +// \" → çift tırnak +// \\ → ters bölü +// \n → satırsonu +// \t → sekme +// \r → satırbaşı +// +// Algoritma: +// 1. Açılış tırnağını (" ) gör → started = true +// 2. Karakterleri oku: +// - \ ise → sonraki karakteri escape olarak işle, context'e ekle +// - " ise → started zaten true, bu kapanış tırnağı → ended = true +// - Diğer → context'e ekle +// 3. Kapanış tırnağında dur +// +// token: Tüm karakterler (tırnaklar ve escape'ler dahil) +// context: Sadece gerçek string içeriği (escape'ler çözülmüş) +// +// Örnek: "a\"b\\n" → token = "\"a\\\"b\\\\n\"", context = "a\"b\n" +// +// TODO: \xNN (hex escape), \uNNNN (Unicode), \UNNNNNNNN (geniş Unicode) +// TODO: Çok satırlı string desteği ("""...""" veya backtick `...`) +// -------------------------------------------------------------------------- inline StringToken* Tokenizer::readString() { hmx.beginPosition(); StringToken* st = new StringToken(); - bool started = false; - bool ended = false; + bool started = false; // Açılış tırnağı görüldü mü? + bool ended = false; // Kapanış tırnağı görüldü mü? st->start = hmx.getOffset(); while (!hmx.isEnd()) { @@ -255,12 +520,13 @@ inline StringToken* Tokenizer::readString() { switch (c) { case '"': if (!started) { - started = true; + started = true; // Açılış tırnağı } else { - ended = true; + ended = true; // Kapanış tırnağı } break; case '\\': + // Escape sequence: sonraki karakteri olduğu gibi al hmx.nextChar(); c = hmx.getchar(); st->token.push_back(c); @@ -280,17 +546,24 @@ inline StringToken* Tokenizer::readString() { return st; } +// -------------------------------------------------------------------------- +// skipOneLineComment: // ile başlayan yorum satırını satırsonuna kadar atla +// -------------------------------------------------------------------------- inline void Tokenizer::skipOneLineComment() { while (!hmx.isEnd()) { if (hmx.getchar() == '\n') { hmx.nextChar(); - hmx.skipWhiteSpace(); + hmx.skipWhiteSpace(); // Satırsonu sonrası boşlukları da temizle return; } hmx.nextChar(); } } +// -------------------------------------------------------------------------- +// skipMultiLineComment: /* */ bloğunu atla +// NOT: İç içe yorum blokları desteklenmez (C standardı gibi). +// -------------------------------------------------------------------------- inline void Tokenizer::skipMultiLineComment() { while (!hmx.isEnd()) { if (hmx.include("*/", true)) { @@ -301,4 +574,4 @@ inline void Tokenizer::skipMultiLineComment() { } } -#endif +#endif // SAQUT_TOKENIZER diff --git a/src/tools.hpp b/src/tools.hpp index db75490..1ef3768 100644 --- a/src/tools.hpp +++ b/src/tools.hpp @@ -1,8 +1,34 @@ +// ============================================================================ +// saQut Compiler — Yardımcı Fonksiyonlar +// ============================================================================ +// +// DİZİN: src/tools.hpp +// KATMAN: Tüm katmanlar tarafından kullanılabilir +// BAĞIMLI: Yok (sadece ) +// +// AMAÇ: +// Tüm derleyici modüllerinin ihtiyaç duyduğu ortak yardımcı fonksiyonlar. +// Şu anda sadece padRight() içerir. +// +// ============================================================================ + #ifndef SAQUT_TOOLS #define SAQUT_TOOLS #include +// -------------------------------------------------------------------------- +// padRight: String'i sağdan boşluk ile belirtilen uzunluğa tamamla. +// +// KULLANIM: AST ağacını konsola yazdırırken girintileme (indent) için. +// padRight("", indent) → indent adet boşluk döndürür. +// +// ÖRNEK: +// padRight("", 4) → " " +// padRight("abc", 6) → "abc " +// +// NOT: std::setw + std::left ile de yapılabilirdi, ancak bu daha basit. +// -------------------------------------------------------------------------- inline std::string padRight(std::string str, size_t totalLen) { if (str.size() < totalLen) { str.append(totalLen - str.size(), ' '); @@ -10,4 +36,4 @@ inline std::string padRight(std::string str, size_t totalLen) { return str; } -#endif +#endif // SAQUT_TOOLS