CodeBlanks Logo Icon CodeBlanks

Lexer

Lexer (sözcük analizci) yazmayı öğrenirsin.

Lexer nedir?

Lexer (tarayıcı), kaynak kodu karakter dizisinden token akışına çevirir. Derleyicinin ilk aşamasıdır; boşlukları ve yorumları atar, anlamlı birimleri sayılar.

Her token bir tür ve değer taşır: NUMBER, IDENT, OP, EOF. Örneğin 42 + x üç token verir: sayı 42, işleç +, tanımlayıcı x. Lexer durum makinesi veya regex tabanlı yazılır. Hata durumunda (ör. geçersiz karakter) kullanıcıya satır ve sütun bilgisi verir. Çıktısı parser'a beslenir.

Token türleri

Token türleri kaynak dilin sözdizimine göre belirlenir. C benzeri bir dilde yaygın türler: sayılar (NUMBER), tanımlayıcılar (IDENT), işleçler (OP) ve dosya sonu (EOF).

Bazı lexerler anahtar sözcükleri (if, while) ayrı bir türle etiketler. Lexer her tokena satır ve sütun bilgisi ekler; hata iletileri bunu kullanır. Token türleri genellikle bir enum ile tanımlanır. Lexer'ın amacı yalnızca sözcuksel yapıyı tanımaktır; sözdizimsel yapı parser'ın işidir. Bu ayrım derleyiciyi modüler tutar.

Uygulama Tokenları yazdır

enum token_type { NUMBER, IDENT, OP, EOF_TOK } tanımla. void print_token(int type, const char *text) fonksiyonu tanımla; gövdesi printf("T%d:%s\n", type, text); olsun. main içinde dört token için çağır: (NUMBER, "42"), (IDENT, "x"), (OP, "+"), (EOF_TOK, "").

Başlangıç kodu

main.c
#include <stdio.h>

// token_type enum'unu tanımla
// print_token fonksiyonunu tanımla ve dört token için çağır

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>

enum token_type { NUMBER, IDENT, OP, EOF_TOK };

void print_token(int type, const char *text) {
    printf("T%d:%s\n", type, text);
}

int main(void) {
    print_token(NUMBER, "42");
    print_token(IDENT, "x");
    print_token(OP, "+");
    print_token(EOF_TOK, "");
    return 0;
}

Beklenen çıktı

T0:42
T1:x
T2:+
T3:

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Lexer ne üretir?

  • Token Doğru cevap
  • AST düğümü
  • Sembol
  • Assembly

Açıklama: Lexer kaynak metni token akışına böler.

2 token_type enum'unu tamamla

Soru
enum token_type { NUMBER, IDENT, OP, ____ };
Cevap
enum token_type { NUMBER, IDENT, OP, EOF };

Açıklama: EOF token akışının sonunu belirtir.

3 Token türlerini eşle

Kavram Anlamı
NUMBER Sayı sabiti
IDENT Tanımlayıcı
OP İşleç
EOF Akış sonu

Uzman bölümündeki tüm dersler