Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

Repository files navigation

CH1_2_LEXER

Kitap: Windows Internals, Siber Güvenlik ve Modern C++ ile Ustalık
Bölüm: 1.2 — Sözcüksel Analiz (Lexical Analysis / Tokenization)
Yazar: Berkehan Arda ÖZDEMİR


Proje Hakkında

Bu proje, bir C++ derleyicisinin ilk aşaması olan lexer (tokenizer)'ın minimal bir implementasyonudur. Verilen kaynak kodu metnini boşluklara göre parçalara böler ve her parçayı bir token tipine sınıflandırır.

Amaç, gerçek bir derleyicinin "lexical analysis" aşamasında neler olduğunu pratik olarak anlamaktır.


Token Tipleri

Token Tipi Örnek
KEYWORD int, return, class, namespace
IDENTIFIER sayi, myFunc, Player
INTEGER_LITERAL 42, 100, 7
FLOAT_LITERAL 3.14f, 0.5f
DOUBLE_LITERAL 3.14, 0.001
OCTAL_LITERAL 017, 0755
HEX_LITERAL 0xFF, 0x1A3B
STRING_LITERAL "hello"
OPERATOR +, -, =, <, >
PUNCTUATOR {, }, (, ), ;, ,
END_OF_FILE (otomatik eklenir)
UNKNOWN Tanımlanamayan token

Kullanım

Gereksinimler

  • Windows 10/11 (x64)
  • Visual Studio 2022 (v145 toolset)
  • C++20

Derleme

Visual Studio ile Lexer.slnx solution dosyasını açıp Debug x64 veya Release x64 konfigürasyonunda derleyin.

MSVC CLI ile:

cl /EHsc /W3 /std:c++20 main.cpp /o CH1_2_LEXER.exe

Çalıştırma

main() içindeki tokenSentence() çağrısını düzenleyerek farklı girdiler test edebilirsiniz:

myLexer.tokenSentence("int sayi = 5 ;");
// Çıktı: KEYWORD IDENTIFIER OPERATOR INTEGER_LITERAL PUNCTUATOR END_OF_FILE

Mimari

main.cpp
├── enum class TokenType        — Token sınıflandırma enum'u
├── ifContains<T>()             — Generic arama yardımcısı
├── tokenToString()             — TokenType → string dönüşümü
├── operators[]                 — Operatör karakter listesi
├── punctuators[]               — Noktalama karakter listesi
├── keywords[]                  — C++20 anahtar kelime listesi (tam liste)
└── class Phrase
    ├── tokenize(string)        — Tek token'ı sınıflandırır
    └── tokenSentence(string)   — Cümleyi boşluğa göre böler, tokenize eder

Bilinen Kısıtlar

Bu bir atölye projesidir; üretim kalitesinde bir lexer değildir.

  • Token ayrıştırması yalnızca boşluk karakterine göre yapılır. int x=5; gibi bitişik yazılan ifadeler doğru tokenize edilmez; int x = 5 ; şeklinde yazılmalıdır.
  • Çok karakterli operatörler (==, !=, <=, ++, ->) desteklenmez; her karakter bağımsız değerlendirilir.
  • "hello world" gibi içinde boşluk olan string literal'lar iki ayrı token olarak işlenir.
  • Yorum satırları (//, /* */) işlenmez.

Öğrenme Çıktıları

Bu atölyeyi tamamlayarak şunlar anlaşılmıştır:

  • Bir derleyicinin lexer aşamasının ne işe yaradığı ve derleme pipeline'ındaki yeri
  • C++ token kategorileri ve aralarındaki sınırlar
  • enum class ile tip güvenli sınıflandırma
  • Template fonksiyonlarla generic yardımcı yazımı
  • Sayı literal türleri: decimal, octal, hex, float, double ayrımı

"Derleyici, kodunu anlayan ilk okuyucudur."

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages