Commit Graph

9 Commits

Author SHA1 Message Date
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 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 c60e7fa3f6 Gemini 2026-05-27 10:29:30 +03:00