Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Lexer Yazmak: Karakterlerden Token'lara, C# ile Bookstore Filtre Dili
Lexer, karakter dizisini token'lara bölen ve her token'ın satırını ve sütununu bilen bir state machine'dir. Bookstore filtre dili için ReadOnlySpan<char> üzerinde tek geçişte çalışan bir C# lexer'ı yazıyoruz: maximal munch, Türkçe culture'da bozulmayan keyword eşleşmesi, InvariantCulture ile sayı okuma, surrogate pair'e dayanıklı hata kurtarma ve anlaşılır hata mesajları. Regex ile lexer'ın nerede kırıldığını ve Roslyn'in boşlukları neden trivia olarak sakladığını gerçek çıktılarla gösteriyoruz.
Semantic Analysis ve Code Generation: Type Checking, Symbol Table ve AST'den Expression Tree'ye
Semantic analysis, parse edilmiş ağaçtaki isimleri symbol table'a bağlayıp tipleri kontrol eder; price = "abc" gibi bir hata böylece filtre hiçbir kitaba uygulanmadan yakalanır. Bookstore filtre dili için binder, implicit conversion ve constant folding yazıyor, doğrulanmış ağacı Expression<Func<Book,bool>>'a derleyip hem bellekte çalıştırıyor hem EF Core'un parametreli SQL'e çevirdiğini ToQueryString ile gösteriyoruz; uzunluk sınırının neden gerektiğini ve Roslyn'deki karşılığını da görüyoruz.