Lexer
- C kursu
- Uzman
- Ders 13/47
- 5 dk
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
#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
#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
enum token_type { NUMBER, IDENT, OP, ____ };
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 |