Asama 0.2 — Add line/column tracking to Lexer #35

Closed
opened 2026-05-26 19:51:33 +03:00 by saqut · 1 comment
Owner

Goal: Lexer updates current line and column on every nextChar() call.

Files to modify:

  • src/lexer/lexer.hpp

Requirements:

  • Add int currentLine, int currentColumn private fields to Lexer.
  • On nextChar(): if character is newline, increment line and reset column; otherwise increment column.
  • Add SourceLocation getLocation() method returning current position.
  • Initialize line=1, column=1 in setText().
  • Modify INumber struct to include SourceLocation startLoc and endLoc.

Success criteria:

  • After lexing any source, getLocation() returns correct line and column.
  • INumber carries source location info.
**Goal:** Lexer updates current line and column on every nextChar() call. **Files to modify:** - src/lexer/lexer.hpp **Requirements:** - Add int currentLine, int currentColumn private fields to Lexer. - On nextChar(): if character is newline, increment line and reset column; otherwise increment column. - Add SourceLocation getLocation() method returning current position. - Initialize line=1, column=1 in setText(). - Modify INumber struct to include SourceLocation startLoc and endLoc. **Success criteria:** - After lexing any source, getLocation() returns correct line and column. - INumber carries source location info.
Author
Owner

PR Açıklaması: [Aşama 0] Kaynak Konum Takibi ve AST Geliştirmeleri

Açıklama

Bu PR, derleyicinin hata yakalama ve kod analizi yeteneklerini artırmak için kritik olan "Source Location Tracking" (Kaynak Konum Takibi) sistemini tanıtır. Ayrıca Parser tarafında dilin esnekliğini artıran bazı yapısal iyileştirmeler içerir.

Önemli Değişiklikler

1. Metadata ve Konum Takibi (Aşama 0)

  • src/core/location.hpp ve src/core/sourcefile.hpp eklenerek dosya yolu, satır ve sütun bilgisini yöneten merkezi bir yapı kuruldu.
  • SourceFile sınıfı, binary search (O(log n)) kullanarak offset bilgisini satır/sütun koordinatlarına dönüştürme yeteneği kazandı.
  • Lexer, Token ve ASTNode sınıfları SourceLocation bilgisini taşıyacak şekilde güncellendi.

2. Parser İyileştirmeleri

  • Çoklu Değişken Tanımı: Artık int a = 1, b, c = 3; gibi aynı tipte birden fazla değişken tek satırda tanımlanabiliyor. Bu değişkenler ana düğümün declarators listesinde tutulur.
  • Zengin Literal Düğümleri: LiteralNode artık sadece string değer değil; taban (base 10, 16, 8, 2) ve ondalıklı olup olmadığı bilgisini de taşıyor.
  • JSON Çıktısı: toJson() metodları güncellendi; artık her AST düğümü kaynak koddaki yerini (location) JSON çıktısında gösteriyor.

3. Proje Yönetimi

  • issues.md dosyası ile projenin gelecekteki aşamaları (REPL, hata yönetimi, tip kontrolü vb.) detaylandırıldı ve bir roadmap oluşturuldu.

Teknik Detaylar

  • Lexer artık her sayı okuduğunda (readNumeric) başlangıç ve bitiş konumlarını hassas bir şekilde kaydediyor.
  • Tokenizer::scan metodu SourceFile'ı otomatik olarak başlatacak şekilde güncellendi.
  • AST düğümleri oluşturulurken ilk token'ın konumu otomatik olarak düğüme atanıyor.

Dosya Bazlı Özet

  • src/core/: Yeni konum yönetimi dosyaları.
  • src/lexer/: Konum bilgisinin ilk üretildiği katman.
  • src/tokenizer/: Token'ların konum bilgisinden donatılması.
  • src/parser/: AST düğümlerine konum eklenmesi ve çoklu declarator desteği.
  • issues.md: Yeni dokümantasyon.
# PR Açıklaması: [Aşama 0] Kaynak Konum Takibi ve AST Geliştirmeleri ## Açıklama Bu PR, derleyicinin hata yakalama ve kod analizi yeteneklerini artırmak için kritik olan "Source Location Tracking" (Kaynak Konum Takibi) sistemini tanıtır. Ayrıca Parser tarafında dilin esnekliğini artıran bazı yapısal iyileştirmeler içerir. ## Önemli Değişiklikler ### 1. Metadata ve Konum Takibi (Aşama 0) - `src/core/location.hpp` ve `src/core/sourcefile.hpp` eklenerek dosya yolu, satır ve sütun bilgisini yöneten merkezi bir yapı kuruldu. - `SourceFile` sınıfı, binary search (O(log n)) kullanarak offset bilgisini satır/sütun koordinatlarına dönüştürme yeteneği kazandı. - `Lexer`, `Token` ve `ASTNode` sınıfları `SourceLocation` bilgisini taşıyacak şekilde güncellendi. ### 2. Parser İyileştirmeleri - **Çoklu Değişken Tanımı:** Artık `int a = 1, b, c = 3;` gibi aynı tipte birden fazla değişken tek satırda tanımlanabiliyor. Bu değişkenler ana düğümün `declarators` listesinde tutulur. - **Zengin Literal Düğümleri:** `LiteralNode` artık sadece string değer değil; taban (base 10, 16, 8, 2) ve ondalıklı olup olmadığı bilgisini de taşıyor. - **JSON Çıktısı:** `toJson()` metodları güncellendi; artık her AST düğümü kaynak koddaki yerini (`location`) JSON çıktısında gösteriyor. ### 3. Proje Yönetimi - `issues.md` dosyası ile projenin gelecekteki aşamaları (REPL, hata yönetimi, tip kontrolü vb.) detaylandırıldı ve bir roadmap oluşturuldu. ## Teknik Detaylar - Lexer artık her sayı okuduğunda (`readNumeric`) başlangıç ve bitiş konumlarını hassas bir şekilde kaydediyor. - `Tokenizer::scan` metodu `SourceFile`'ı otomatik olarak başlatacak şekilde güncellendi. - AST düğümleri oluşturulurken ilk token'ın konumu otomatik olarak düğüme atanıyor. ## Dosya Bazlı Özet - `src/core/`: Yeni konum yönetimi dosyaları. - `src/lexer/`: Konum bilgisinin ilk üretildiği katman. - `src/tokenizer/`: Token'ların konum bilgisinden donatılması. - `src/parser/`: AST düğümlerine konum eklenmesi ve çoklu declarator desteği. - `issues.md`: Yeni dokümantasyon.
saqut closed this issue 2026-05-27 09:40:33 +03:00
Sign in to join this conversation.
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#35
No description provided.