Commit Graph

60 Commits

Author SHA1 Message Date
saqut d534410874 docs: README yeniden yazıldı — GitHub vitrin formatı, mimari referans docs/architecture.md'ye taşındı 2026-06-18 21:53:08 +03:00
saqut 3267b56903 feat(opt): sabit katlama'ya unary operatörler ekle (!, ~, -, +)
Parser unary'yi BinaryExpressionNode(Left=nullptr) olarak temsil eder.
isScalarLit/getScalarVal/canFoldUnary/computeUnary eklendi.

Katlanan ifadeler: !0→1, !1→0, !42→0, ~0→-1, ~1→-2, -5→-5, +7→7,
!true→0, !false→1. Zincirli: !(!0)→0 (fixpoint ile).
Boolean literal (true/false) da !operatörü için desteklenir.
2026-06-18 21:21:28 +03:00
saqut 8eb57a6f75 feat(opt): sabit katlama'ya mantıksal operatörler ekle (&&, ||)
canFoldOp ve computeOp'a AMPERSAND_AMPERSAND ve PIPE_PIPE eklendi.
false && false, true || false gibi sabit mantıksal ifadeler artık
derleme zamanında 0/1 literaline katlanır.
2026-06-18 21:16:35 +03:00
saqut d6301ccb5f feat(opt): Faz 4 — Optimizasyon (sabit katlama + ölü kod eleme + --optimized)
- src/core/config.hpp: CompilerConfig (pass toggle'lar + maxFixpointRounds)
- src/opt/optimization_pass.hpp: soyut OptimizationPass tabanı
- src/opt/ast_clone.hpp: deepClone — tüm node tiplerini kapsayan derin klonlama
- src/opt/constant_folding.hpp: BinaryExpr(Literal,OP,Literal) → Literal;
  W002 sıfıra bölme uyarısı; + - * / % == != < > <= >= desteklenir
- src/opt/dead_code_elim.hpp: return/break/continue sonrası erişilemez
  deyimler Block'tan silinir
- src/opt/optimization_manager.hpp: AST klonlar, fixpoint döngüsüyle pass'leri
  çalıştırır (ADR-007/009)
- literal.hpp/.cpp: hasDirectValue/directIntValue — sentetik (token-sız) literal
- args.hpp: --optimized bayrağı
- cli/commands/ast.hpp: --optimized verilince klon üstünde optimize edilmiş AST
  gösterilir; orijinal dokunulmaz
- examples/opt_folding.sqt, examples/opt_dce.sqt: örnek fixture'lar
2026-06-18 21:11:05 +03:00
saqut 6681b1be78 chore: MISSION-FAZ3.md tamamlandı, sil 2026-06-18 20:52:48 +03:00
saqut 7eacf141b7 chore: .gitignore — CMake versiyona özgü dosyaları hariç tut 2026-06-18 19:52:33 +03:00
saqut c2482a8cd9 feat(vm): string veri tipi + run pipeline'ına TypeChecker eklendi
- Value: ValueKind::String + stringValue alanı eklendi
- instruction: LOAD_STRING opcode'u eklendi
- ir_generator: STRING literal → LOAD_STRING; desteklenmeyen tipler
  (FLOAT, null) IR üretim aşamasında hata fırlatır
- interpreter: runtime tip kontrolleri kaldırıldı (TypeChecker zaten
  derleme zamanında tipleri doğruluyor); sıfıra bölme kontrolü kaldı
  (gerçek çalışma zamanı koşulu); print() string/int ayırt eder
- run.hpp: TypeChecker + StructuralValidator pipeline'a eklendi

Test:
  build/saqut run file:examples/merhaba.sqt → Merhaba / saQut calisiyor
  build/saqut run file:examples/fibonacci.sqt → 55 / 55
2026-06-18 19:46:48 +03:00
saqut 7b8b2398cd chore(ir): dump formatını sade yap — NAME=... PARAMS=... SLOTS=... 2026-06-18 19:29:32 +03:00
saqut 4c67f29362 feat(cli): saqut ir komutu — IR talimat dump'u
- IRFunction::dump() yenilendi: ASCII kutu, sn slot notasyonu,
  ikili op'larda sembol (+/-/*/<= vb.), hizalı sütunlar
- src/cli/commands/ir.hpp: tokenize→parse→collect→ir→dump pipeline
- main.cpp + args.hpp: "ir" komutu kayıtlı
2026-06-18 19:21:12 +03:00
saqut 3c76eab932 feat(ir-vm): fibonacci.sqt çalışıyor — IR üretici + bytecode VM
IR instruction seti (14 opcode): LOAD_CONST, LOAD_SLOT, ADD/SUB/MUL/DIV/MOD,
LESS/LEQ/GT/GEQ/EQ/NEQ, JMP, JIF_FALSE, CALL, RETURN, CALLHOST

IRGenerator (AST → IR):
  - Slot tabanlı register: parametreler slot 0..n, lokaller/geçiciler sonrası
  - freshSlot() monoton sayaç — slot asla geri verilmez
  - Backpatch: ileri-jump için emitJumpIfFalse(-1) → patchJump(idx)
  - Geri-jump: loopStart = currentInstrIndex() → emitJumpUnconditional(loopStart)
  - Builtin tespiti: resolvedSymbol->isBuiltin → CALLHOST

Interpreter (bytecode VM):
  - Her iterasyonda callStack.back() taze alınır (referans güvenliği)
  - CALL: yeni frame + argüman kopyası + continue
  - RETURN: değer caller slotuna, frame pop + continue
  - ip CALL/RETURN'den önce ilerler — caller doğru noktadan devam eder
  - DIV: sıfıra bölme → runtime_error

Doğrulama:
  build/saqut run file:examples/fibonacci.sqt → 55 / 55 ✓
  tests/run.sh → TUM TESTLER GECTI ✓
2026-06-18 19:17:30 +03:00
saqut e72a62ae2e chore: CLAUDE.md güncelle + gen_large.py + large.sqt ekle
- CLAUDE.md: Faz 2/3 tamamlandı, yeni komutlar (check), nlohmann/json,
  semantic/ klasörü, performans optimizasyonu notları güncellendi
- scripts/gen_large.py: 2.3MB geçerli .sqt dosyası üreten benchmark script'i
- examples/large.sqt: 5000 fonksiyon, 90K satır, performans test fixture'ı
2026-06-18 18:40:30 +03:00
saqut 087d1b20a6 perf(tokenizer): switch dispatch + unordered_map keyword lookup
Önceki: for döngüsü içinde her token için include() 63 kez çağrılıyordu
        → 66.9M include() çağrısı, zamanın %81'i

Sonraki:
  - Operatör/delimiter: switch(c0) + getchar(1) ile O(1) dispatch
  - Keyword: readIdentifier() → unordered_map::find() O(1) lookup
  - include() yalnızca // /* */ için (2-3 çağrı/yorum satırı)

Sonuç (2.3MB, 90K satır, debug build):
  tokens: 11.5s → 2.4s  (−79%)
  check:  12.7s → 3.7s  (−71%)

gprof ÖNCE: %81 include() (66.9M çağrı)
gprof SONRA: include() %0.00 — artık ölçülemez

Profil dosyaları: docs/perf-before.txt, docs/perf-after.txt
2026-06-18 18:35:10 +03:00
saqut d82fe6b703 perf: include() parametresini std::string → std::string_view yap
Tokenizer her token için ~84 kez include() çağırıyor.
Önceki imza std::string (değer kopyası) aldığından her çağrıda
heap allocation yapılıyordu. string_view + explicit std::string()
cast'larının kaldırılmasıyla 2.3 MB dosyada tokens süresi
17.6s → 11.9s (−32%).

Kök neden: src/tokenizer/tokenizer.cpp satır 44/61/73'teki
std::string(kw/del/op) explicit cast'ları string_view tablolardan
gereksiz kopya üretiyordu.
2026-06-18 18:03:54 +03:00
saqut 60870aef8e feat(faz3): semantik analiz — tip denetimi + yapısal doğrulama (#72)
- src/semantic/type_checker: her ExpressionNode'a resolvedType atar
  * literal bağlama-göre tiplenir (float x = 1 → uyarısız)
  * değişken→değişken genişletme → W004
  * daraltma / farklı tip → E003
  * fonksiyon çağrısı argüman sayısı/tipi → E008
  * return tipi uyumsuzluğu → E003 (checkAssign üzerinden)
- src/semantic/structural_validator: kontrol akışı kuralları
  * break/continue döngü dışı → E004
  * return fonksiyon dışı → E005
- W004 diagnostic kataloğa eklendi
- saqut check komutu: tokenize→parse→collect→typecheck→validate
- examples/semantic/: widening, narrowing, bad_return, break_outside, bad_args
- MISSION-FAZ3.md eklendi

Doğrulama:
  fibonacci.sqt → 0 hata 0 uyarı ✓
  widening.sqt  → W004 ✓
  narrowing.sqt → E003 ✓
  break_outside.sqt → E004 ✓
  bad_args.sqt  → E008 ✓
  tests/run.sh  → TUM TESTLER GECTI ✓
2026-06-18 17:20:06 +03:00
saqut 895c4c807d feat(symbols): --compact bayrağı + referenceCount alanı
- CliArgs'e compact bool eklendi; --compact ile boşluksuz JSON çıktısı
- symbols çıktısında her sembol için referenceCount (references.size()) alanı eklendi
- fibonacci.sqt onarıldı: araç hatası sonucu silinen '{' geri konuldu
2026-06-18 16:44:03 +03:00
saqut 1af9ea8a2b refactor: nlohmann/json entegrasyonu — string birleştirme yerine nesne API
- src/vendor/nlohmann/json.hpp eklendi (single-header, MIT)
- SourceLocation  → toJsonObj() + toJson() (nlohmann)
- Type            → toJsonObj() + toJson() (nlohmann, özyinelemeli)
- Diagnostic      → toJsonObj() + toJson() (nlohmann)
- DiagnosticEngine→ toJsonObj() + toJson() (nlohmann)
- symbols.hpp     → tamamen nlohmann ile yeniden yazıldı

Tüm toJson() imzaları std::string döndürmeye devam eder;
AST JsonObject builder'ı dokunulmadı (ayrı katman).
2026-06-18 16:21:58 +03:00
saqut 79d8618f03 feat(symbols): JSON çıktı + syntax hata toleransı
- symbols komutu artık JSON üretiyor: file, symbols[], diagnostics
  Her sembol: name, kind, type, typeDetail, definition (file+satır+sütun),
  references[], isBuiltin — LSP tüketimine hazır format
- parser: parseProgram() ilerleme olmayana token atla (guard ekle)
  Bozuk top-level syntax (ör: `}`, eksik parametre listesi) artık
  ayrıştırmayı durdurmak yerine sonraki geçerli bildirimi bulmaya devam eder
2026-06-18 16:11:34 +03:00
saqut 73249c640a feat(faz2): sembol tablosu — isim çözümleme + scope + referans toplama (#71)
- parser: parseFunctionDecl() parametreleri artık AST'ye alıyor
  (FunctionDeclNode::params alanı eklendi; declarations.hpp/cpp güncellendi)
- parser: parseDeclaration() kullanıcı-tanımlı tip (struct alanı) desteği
- ast_json: addArray() m_hasArrayItem sıfırlama hatası düzeltildi
  (birden fazla dizi alanı içeren düğümlerde bozuk JSON üretimi giderildi)
- src/symbol/: Symbol, Scope, SymbolTable, SymbolCollector eklendi
  * İki geçiş: pass1 global hoist, pass2 gövde + declare-before-use
  * E001 tanımsız isim, E002 çift tanım, E010 döngüsel struct
  * print builtin tohumlama (TODO: #89 katalog)
- cli/symbols: yeni SymbolTable/Collector kullanıyor; tip + refs çıktısı
- examples/symbols/: dup.sqt, undef.sqt, cyclic.sqt test fixture'ları

Doğrulama:
  build/saqut symbols file:examples/fibonacci.sqt → 0 hata, 10 sembol
  examples/symbols/dup.sqt → E002
  examples/symbols/undef.sqt → E001
  examples/symbols/cyclic.sqt → E010
  tests/run.sh → TUM TESTLER GECTI
  AST JSON → geçerli
2026-06-18 15:43:26 +03:00
saqut 290dcab5ac feat(faz1): AST'i Expression/Statement olarak ayır + analiz alanları (#70)
- ast_node.hpp: ExpressionNode (resolvedType + isConstant/foldedValue TODO)
  ve StatementNode (isReachable) ara taban sınıfları; core/type.hpp dahil.
- İfade düğümleri (Literal, Identifier, Binary, Postfix, Call, Member,
  Index) → ExpressionNode; toJson'a resolvedType (çözülmemişse null).
- Deyim düğümleri (Block/If/While/For/DoWhile/Return/Break/Continue/
  ExpressionStatement + VariableDecl) → StatementNode; toJson'a isReachable.
- IdentifierNode'a Symbol* resolvedSymbol (TODO faz-2, ileri bildirim).
- Faz 0 düzeltmesi: diagnostic.hpp kendi jsonEscape'ini kaldırdı, tools.hpp'
  dekini kullanıyor (ODR çakışması önlendi).

Doğrulama: -Wall -Wextra temiz; saqut ast fibonacci.sqt geçerli JSON
(48 resolvedType:null, 20 isReachable:true); parser-stress regresyon temiz;
Faz 0 birim testleri geçiyor.
2026-06-16 00:47:50 +03:00
saqut b0219411c1 chore: __pycache__ gitignore 2026-06-16 00:32:29 +03:00
saqut 26e5bc9219 feat(faz0): tip sistemi + tanılama motoru (Type + DiagnosticEngine)
Faz 0 (#69) — frontend'in iki temel veri yapısı:

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

Header-only (ADR-003). -Wall -Wextra temiz. Henüz pipeline'a bağlı
değil; Faz 2/3 (sembol tablosu, tip denetleyici) bunları tüketecek.
2026-06-16 00:31:44 +03:00
saqut 4e6ab9968c chore: scripts/gitea.py'yi gitignore'la (parola sızıntısını önle)
Yerel API istemcisi kimlik bilgisini ~/.git-credentials'tan okur; asla
commit edilmemeli.
2026-06-16 00:22:47 +03:00
saqut 2a3ee0ad47 docs: readme'ye "Tasarım felsefesi" bölümü ekle (cam + kafes + record-replay)
saQut'un farklılaştırıcı tezini belgele: derleyiciyi platform olarak ele alan
iki taahhüt (cam = her aşama gör/sorgula/müdahale; kafes = deterministik +
yetenek-güvenli VM) ve bunların ödülü olan kayıt-tekrar (record-replay)
vizyonu. Determinizm + tek kapı FFI disiplininin v0'dan korunması gerektiği
not edildi.
2026-06-16 00:06:54 +03:00
saqut 3d970331e2 docs: lisansa katkı, patent, marka ve fesih maddeleri ekle
- Katkı (§7): PR herkese açık, birleştirme kararı yalnızca Abdussamed
  ULUTAŞ'a ait; katkı sahipleri ticari lisanslama dâhil hakları telif
  sahibine verir (ticari lisans modelinin önünü açar)
- Patent (§8): açık patent lisansı + patent davasında otomatik fesih
- Marka/İsim (§9): "saQut" adı/markası üzerinde hak verilmez
- Fesih (§11): ihlalde otomatik fesih + 30 gün düzeltme; edinilmiş Çıktı
  hakları fesihten etkilenmez
- Bölümler yeniden numaralandırıldı (3 dilde)
2026-06-14 23:58:52 +03:00
saqut cae1895c24 docs: lisansı yeniden yaz (kaynağı açık, ticari kullanımı kısıtlı)
Önceki metin GPL tarzı copyleft bir "özgür yazılım" lisansıydı ve niyetle
çelişiyordu (ticari kullanıma açıkça izin veriyordu). Çekirdek ilke netleşti:
gelir saQut'un ürettiği çıktıdan elde edilir, saQut'un kendisinden değil.

- Üç dilde (TR/EN/DE) yeniden yazıldı, kurumsal dile çekildi
- Tanımlar, Ticari Kısıtlamalar ve sunucu/sürüm notu eklendi
- Çıktı istisnası korundu ve güçlendirildi
- İzin/iletişim maddesi (ticari lisans) eklendi
- Almanca yazım hataları düzeltildi
2026-06-14 23:48:22 +03:00
saqut 5b041d0d4f LICENSE.md Ekle
Signed-off-by: saqut <saqut@noreply.localhost>
2026-06-14 23:17:21 +03:00
saqut fc2ccaf27d chore: Gitea issue yönetim betikleri ekle
Faz 0-4 ve gelecek vizyonu issue'larını oluşturmak için kullanılan
yardımcı betikler (gitea.py API istemcisi + issue içerikleri).
2026-06-14 22:44:30 +03:00
saqut fac81f7bb0 docs: belgeleri yeniden hizala (IR+VM modeli, kilitli kararlar)
- Calistirma modeli: "JIT" terimi birakildi -> IR + bytecode VM birincil;
  makine-kodu JIT kapsam disi (ADR-015). C-transpile ikinci backend.
- readme.md bastan yazildi: toolbox cercevesi, yapilan vs planlanan ayrimi.
- ADR amend: 007 (klon yuk tasir), 009 (fixpoint degismezi + analiz
  yeniden hesabi), 010 (literal baglama-gore tipleme), 011 (global baslatici
  uc-parcali kural + dongusel struct E010), 014 (bellek gerekcesi).
- Yeni ADR: 015 (IR+VM), 016 (FFI seam), 017 (batteries=sinir),
  018 (interface ertelendi), 019 (frontend<->runtime ayrimi).
- roadmap: bu hafta sembol tablosu->fibonacci; once dikey dilim; E010.
- examples: Final.sqt -> parser-stress/ (gecersiz fixture); yeni gecerli
  fibonacci.sqt eklendi.
2026-06-14 19:53:12 +03:00
saqut 5e0c3eeb7e docs: frontend tasarim kararlari, transkript ve yol haritasi
Symbol table + semantic analiz + optimizasyon framework tasarim
oturumunun ciktilari:
- adr-frontend-analiz.md: ADR-006..014 (cok-asamali frontend, analiz/
  optimizasyon ayrimi, optimizasyon konumu, fixpoint, tip sistemi,
  scope/forward-reference, ExpressionNode/StatementNode, analiz verisi
  yeri, dil kapsami) — her karar gerekcesiyle.
- transkript-frontend-tasarim.md: oturum akiscinin sadik transkripti.
- roadmap-frontend.md: dosya-dosya uygulama plani (Faz 0..4).
2026-06-14 17:56:42 +03:00
saqut 49545a5667 fix: kaynak dosya yolu propagasyonu ve AST JSON girinti hataları
- Tokenizer::scan artik filePath parametresi alip Lexer'a iletiyor;
  SourceLocation.file artik bos degil (Asama 0 tamamlandi).
- JsonObject::add icin const char* overload eklendi (kind: true bug'i).
- JsonObject acilis suslu parantezi girintisiz yaziliyor, addArray ilk
  eleman oncesi bos satir birakmiyor; LiteralNode/IdentifierNode toJson
  ayni sekilde duzeltildi.
- analysisToJson girinti seviyeleri "analysis" objesine gore duzeltildi.
2026-06-14 15:57:54 +03:00
saqut 2ab895e4d8 chore: JsonObject builder, LiteralType enum, token.hpp doc cleanup 2026-05-27 10:53:18 +03:00
saqut c60e7fa3f6 Gemini 2026-05-27 10:29:30 +03:00
saqut d4ba00b93b refactor: modularize parser and AST components 2026-05-27 09:42:14 +03:00
saqut afb1e1afb0 feat: implement source location tracking and enhance parser AST nodes 2026-05-27 09:39:47 +03:00
saqut 30a5fab697 parser: function calls, struct, member/index access - Final.sqt parses successfully (289 tokens, 200+ AST nodes) 2026-05-26 17:27:06 +03:00
saqut 8da0ad4e14 cli: modular command system, AST JSON serialization, file split prep 2026-05-26 17:05:20 +03:00
saqut 76960417bd docs: todo.md (8 asamali yol haritasi) ve fikirler.md (backend ADR) 2026-05-26 00:41:04 +03:00
abdussamedulutas 163969ded6 docs: kapsamli ADR dokumantasyonu, tum kaynak dosyalara detayli kommentler 2026-05-26 00:24:27 +03:00
abdussamedulutas 5d9454987e feat: statement parser (if/for/while/do-while/return), keyword tokenizer düzeltmeleri
- Tokenizer: tüm keyword'ler eklendi (int, void, float, vb)
- Keyword boundary check: kısa keyword uzun identifier'la karışmıyor
- Lexer: '0' sonrası karakter kontrolü düzeltildi (0; token sorunu)
- Parser: if/else, for, while, do-while, return, break, continue desteği
- FunctionDecl, VariableDecl, Block, ExpressionStatement tam destek
- null expression koruması (sonsuz döngü engellendi)
2026-05-26 00:05:52 +03:00
abdussamedulutas dee4c76cdf fix: Pratt parser NUD/LED akışı, Token* slicing, null guard
- ParserToken artık Token* tutuyor (object slicing önlendi)
- parseNullDenotation atom'ları tüketip ilerliyor
- parseExpression while döngüsü currentToken() ile çalışıyor
- IR: null Left/Right ve null ASTNode girişi korumalı
- source.sqt: 1/(74-63+!1)-74*2/-0.7e+10 başarıyla parse ediliyor
2026-05-26 00:03:19 +03:00
abdussamedulutas dec5323a86 Rev 2026-05-26 00:00:21 +03:00
abdussamedulutas 4078da1b00 LLVM Backend ekleniyor 2026-01-12 09:46:38 +03:00
abdussamedulutas 1785455fcd GNU Lightning üzerinde çalışıldı 2026-01-11 21:34:23 +03:00
abdussamedulutas d3edaf91ce refactor: AST ve Token yapısında pointer semantiğine geçiş
- Bellekte 'object slicing' (nesne dilimlenmesi) sorununu önlemek için Token ve ASTNode yapıları pointer (yıldız) kullanımına geçirildi.
- Bellek sızıntılarını önlemek için temel sınıflara (Token, ASTNode) 'virtual destructor' eklendi.
- AST düğümlerine 'parent pointer' bağlantısı eklenerek ağaç üzerinde yukarı yönlü navigasyon sağlandı.
- IR (Ara Temsil) ve CodeGenerator katmanları projeye dahil edildi.
- Tokenizer'da EOL (satır sonu) kontrolü ve dinamik bellek tahsisi (new) optimizasyonları yapıldı.
2026-01-10 20:19:49 +03:00
abdussamedulutas 149542b37e Postfix ve Prefix operatörleri binaryexpression ve unary için işlenebilir hale getirildi 2026-01-01 14:32:14 +03:00
abdussamedulutas e906007f02 Pratt parser tamamlandı 2025-12-29 20:42:04 +03:00
abdussamedulutas d178bdebd0 Pratt Parsing Algoritması eklendi 2025-12-28 21:58:15 +03:00
abdussamedulutas b9a2173fd4 Parser yazmak için ön veri setleri oluşturuldu 2025-12-28 15:43:29 +03:00
abdussamedulutas 06c14017c2 vscode kod renklendirme geliştirildi 2025-12-28 15:43:08 +03:00
abdussamedulutas 75ce6759be VSCode deugging için çalışma ortamı oluşturuldu 2025-12-28 15:42:31 +03:00