C
Derleyici bileşeni
Lexer ve parser ile küçük bir dil yazarsın.
Derleyici bileşeni
Üçüncü derste derleyici bileşenini eklersin. parse_command fonksiyonu, bir komut dizesini alır ve tanırsa bir kod döndürür. Bu, bir derleyicinin sözcük çözümleyici (lexer) ve çözümleyici (parser) adımlarının basitleştirilmiş birleşimidir.
Gerçek bir derleyici, kaynak kodu önce belirteçlere (token) ayırır, sonra bir sözdizimi ağacı (AST) üretir. Burada strcmp ile komut dizesini karşılaştırır ve bir tamsayı döndürürürüz: "help" için 1, "exit" için 2, bilinmeyen için 0. Bu, komut tabanlı arayüzlerin temelidir. Önceki dersin çözümü başlangıç koduna dahildir.
strcmp ile komut tanıma
strcmp(a, b) fonksiyonu, iki dizeyi karşılaştırır: eşitse 0 döndürür. Komut tanıma için: if (strcmp(cmd, "help") == 0) return 1;. Bu desen, komut tabanlı arayüzlerin temelidir.
Birden fazla komut için zincirleme if yazılır: her komut ayrı bir strcmp ile kontrol edilir. Eşleşme yoksa varsayılan dönüş (0) verilir. Bu, bir derleyicinin anahtar sözcük tanıma adımına benzer. string.h başlığı strcmp'i sağlar. parse_command sonucu main'de kullanılır; örneğin bir switch ile farklı komutları işler.
Uygulama parse_command fonksiyonunu ekle
Var olan tanımların altına int parse_command(const char *cmd) yaz. strcmp(cmd, "help") == 0 ise return 1;, strcmp(cmd, "exit") == 0 ise return 2;, değilse return 0;. main içinde printf("Komut: %d\n", parse_command("help")) çağır.
Örnek çözümü göster
#include <stdio.h>
#include <string.h>
void kernel_init(void);
int parse_command(const char *cmd);
int security_check(const char *buf, int len);
void kernel_init(void) {
printf("Çekirdek başladı\n");
}
int syscall(int num) {
return num * 2;
}
int parse_command(const char *cmd) {
if (strcmp(cmd, "help") == 0) return 1;
if (strcmp(cmd, "exit") == 0) return 2;
return 0;
}
int main(void) {
printf("Proje başladı\n");
kernel_init();
printf("Komut: %d\n", parse_command("help"));
return 0;
}
Kendini test et
-
Çözümleyici kavramını eşle
- strcmp
- Dize karşılaştır
- parse_command
- Komut tanı
- "help"
- 1 döndür
- "exit"
- 2 döndür
-
strcmp çağrısını tamamla
if (strcmp(cmd, ____) == 0) return 1;
Cevabı göster
if (strcmp(cmd, "help") == 0) return 1;
-
parse_command("help") ne döndürür?
Cevabı göster
1 — parse_command "help" için 1 döndürür.
Sıradaki ders: Güvenlik katmanı