|
Derleyici Tasarımı
|
x, b, func gibi.==, (, ; gibi.Lexer'ımız iki katmandan oluşacak:
Lexer katmanında identifier ve punctuation'ların ne anlama geldiğini tam bilmiyoruz, sadece metin parçaları olarak grupluyoruz.
Bu lexemeleri, lexer ile üreteceğiz:
lexer_init() gayet basit bir fonksiyon. Kaynak metni lexer içinde pointera alıp currenti metnin başına hizalıyor:
Esas DFA yapısı lexer_next() içinde kendini gösteriyor:
lexer_next() fonksiyonunda kodun okunabilirliğini artırmak için birkaç basit fonksiyon tanımladım: Lexer için Yardımcı Fonsiyonlar
Lexeme toplayan fonksiyonları tek tek inceleyelim. Identifier ve punctuation toplama fonksiyonları birebir aynı şekilde çalışıyor. Aralarındaki tek fark, biri ispunct kullanırken diğeri isalnum kullanıyor.
Buradaki esas karışıklık sayı tokenlerini toplamada. Hem ondalık hem de tam sayı tokenleri tek bir fonksiyonla toplanıyor:
Lexeri hallettiğimize göre, artık Tokenizer yazmaya başlayabiliriz.