refactor: modularize parser and AST components #68

Merged
saqut merged 1 commits from feature/parser-modularization into master 2026-05-27 09:42:43 +03:00
Owner

PR Açıklaması: Parser ve AST Bileşenlerinin Modülerleştirilmesi

Açıklama

Bu PR, src/parser/ dizini altındaki devasa ast.hpp ve parser.hpp dosyalarını mantıksal parçalara ayırarak kodun okunabilirliğini ve bakımını kolaylaştırmayı amaçlar. Kodun işlevselliği korunmuş, sadece dosya yapısı modüler hale getirilmiştir.

Önemli Değişiklikler

1. AST (Soyut Sözdizim Ağacı) Modülerleştirme

ast.hpp dosyası artık bir aggregator (toplayıcı) görevi görüyor ve aşağıdaki yeni dosyalardan bileşenleri dahil ediyor:

  • ast_node.hpp: Temel ASTNode sınıfı ve ASTKind enum'u.
  • ast_expr.hpp: LiteralNode, BinaryExpressionNode, CallExpressionNode gibi ifade düğümleri.
  • ast_stmt.hpp: BlockNode, IfStatementNode, WhileStatementNode gibi deyim (statement) düğümleri.
  • ast_decl.hpp: FunctionDeclNode, VariableDeclNode, StructDeclNode gibi deklarasyon düğümleri.
  • ast_json.hpp: JSON serileştirme için yardımcı fonksiyonlar (childrenToJson, jsonEscape vb.).

2. Parser Modülerleştirme

Parser mantığı da benzer şekilde parçalara ayrıldı:

  • parser_base.hpp: Parser sınıfı tanımı ve üye değişkenleri.
  • parser_core.hpp: Pratt Parser ana döngüsü, NUD ve LED mantığı.
  • parser_decl.hpp: Fonksiyon, değişken ve struct deklarasyonlarının ayrıştırılması.
  • parser_stmt.hpp: Deyimlerin (if, for, while, return vb.) ayrıştırılması.

Teknik Avantajlar

  • Okunabilirlik: Binlerce satırlık dosyalar yerine 100-300 satırlık, spesifik görevleri olan dosyalar oluşturuldu.
  • Bakım Kolaylığı: Belirli bir dil özelliği (örn. yeni bir deyim tipi) eklendiğinde hangi dosyanın değiştirileceği artık çok daha net.
  • Derleme Hızı: (Gelecekte) İncremental build süreçlerinde sadece değişen parçaların derlenmesine olanak sağlar.

Notlar

  • Mevcut tüm testler ve Final.sqt gibi örnek dosyaların ayrıştırılması sorunsuz çalışmaya devam etmektedir.
  • Dosya başlıklarındaki DİZİN ve KATMAN bilgileri güncellenmiştir.
# PR Açıklaması: Parser ve AST Bileşenlerinin Modülerleştirilmesi ## Açıklama Bu PR, `src/parser/` dizini altındaki devasa `ast.hpp` ve `parser.hpp` dosyalarını mantıksal parçalara ayırarak kodun okunabilirliğini ve bakımını kolaylaştırmayı amaçlar. Kodun işlevselliği korunmuş, sadece dosya yapısı modüler hale getirilmiştir. ## Önemli Değişiklikler ### 1. AST (Soyut Sözdizim Ağacı) Modülerleştirme `ast.hpp` dosyası artık bir **aggregator** (toplayıcı) görevi görüyor ve aşağıdaki yeni dosyalardan bileşenleri dahil ediyor: - `ast_node.hpp`: Temel `ASTNode` sınıfı ve `ASTKind` enum'u. - `ast_expr.hpp`: `LiteralNode`, `BinaryExpressionNode`, `CallExpressionNode` gibi ifade düğümleri. - `ast_stmt.hpp`: `BlockNode`, `IfStatementNode`, `WhileStatementNode` gibi deyim (statement) düğümleri. - `ast_decl.hpp`: `FunctionDeclNode`, `VariableDeclNode`, `StructDeclNode` gibi deklarasyon düğümleri. - `ast_json.hpp`: JSON serileştirme için yardımcı fonksiyonlar (`childrenToJson`, `jsonEscape` vb.). ### 2. Parser Modülerleştirme Parser mantığı da benzer şekilde parçalara ayrıldı: - `parser_base.hpp`: `Parser` sınıfı tanımı ve üye değişkenleri. - `parser_core.hpp`: Pratt Parser ana döngüsü, NUD ve LED mantığı. - `parser_decl.hpp`: Fonksiyon, değişken ve struct deklarasyonlarının ayrıştırılması. - `parser_stmt.hpp`: Deyimlerin (if, for, while, return vb.) ayrıştırılması. ## Teknik Avantajlar - **Okunabilirlik:** Binlerce satırlık dosyalar yerine 100-300 satırlık, spesifik görevleri olan dosyalar oluşturuldu. - **Bakım Kolaylığı:** Belirli bir dil özelliği (örn. yeni bir deyim tipi) eklendiğinde hangi dosyanın değiştirileceği artık çok daha net. - **Derleme Hızı:** (Gelecekte) İncremental build süreçlerinde sadece değişen parçaların derlenmesine olanak sağlar. ## Notlar - Mevcut tüm testler ve `Final.sqt` gibi örnek dosyaların ayrıştırılması sorunsuz çalışmaya devam etmektedir. - Dosya başlıklarındaki DİZİN ve KATMAN bilgileri güncellenmiştir.
saqut added 1 commit 2026-05-27 09:42:34 +03:00
saqut merged commit aa6400c098 into master 2026-05-27 09:42:43 +03:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: saqut/saqut-compiler#68
No description provided.