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
|
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 |