Python ile Python Lexer Yazalım

Sıddık Açıl
Dec 17, 2017 · 2 min read

Compiler ve Interpreter programlarının ilk aşaması Lexing olarak isimlendirilir. Bu aşamada yazılmış olan program bir anlam ifade eden küçük parçalara ayrılır ve daha sonra gerçekleşecek olan Parsing işlemine uygun hale gelir.

Bu yazıda Python dilini kullanarak Python programları için bir Lexer yazacağız. Bir diğer yazıda da Parsing işlemi gerçekleştirip Python programına ait Abstract Syntax ağacını elde etmeye çalışacağız.

Lexerlar Nerede Kullanılır?

  • Bütün parserlarda
  • Derleyicilerde ve yorumlayıcılarda
  • Statik kod analizi programlarında
  • IDE’lerde tamamlama önerisi yapılırken
  • Kod renklendirme
  • Doğal Dil İşleme

Python ile Lexer

Nasıl çalışacak?

Elimizde mümkün olan ifadelerle eşleşecek Regex tanımlarından oluşan bir liste olacak. Sonra girdi olarak aldığımız text için bu listeden bir eşleşme bulmaya çalışacağız. Sonra eşleşmenin uzunluğu kadar ilerleyip yazının geri kalanı için aynı işlemi sürdüreceğiz.

Gerçekleme

Çıktı Örneği

Yazının sonunda sizlerle paylaşacağım kod için şöyle 537 token buldu. İlk 20 tokeni aşağıda görebilirsiniz:

Neler Eksik ve Neler Yapılabilir?

  • Python dilinin bütün tokenlarını kapsamıyor(Örneğin Einstein notasyonunda yazılmış sayılar).
  • Bozuk yazılmış kod örnekleri üzerinde hiç denemedim.
  • Beklenmedik bir token ile karşılaşıldığında bir şey yapmıyor(Hata mesajı ve ya Unexpected Token sınıflandırması vb.).
  • Import ve ya def gibi keywordleri de identifier olarak alıyor. Python’ın kendi tanımladığı keyword listesini kullanarak Identifier match gerçekleştiğinde bu programcı tanımlı mı yoksa dil tanımlı mı diye kontrol etmek gerekiyor.
  • Diğer dillerde lexing için bir kaç düzeltme yapılmak suretiyle kullanılabilir.

Test Dosyam

Test için kullandığım kod:

Bir başka yazıda görüşmek üzere.

Sıddık Açıl

Written by

ITU CS Graduate. Ericsson Türkiye

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade