ayrıştırıcılar ne demek?
Ayrıştırıcılar (Parser'lar)
Ayrıştırıcılar, bir programlama dilinde veya veri formatında yazılmış olan kodu veya veriyi anlamak ve yapılandırmak için kullanılan yazılımlardır. Temel olarak, girdiyi (input) alır, sözdizim kurallarına (syntax rules) göre analiz eder ve anlamlı bir yapıya dönüştürür. Bu yapı genellikle bir Soyut Sözdizimi Ağacı (Abstract Syntax Tree - AST) veya başka bir ara temsildir.
Ayrıştırıcıların Temel İşlevleri:
- Sözcüksel Analiz (Lexical Analysis/Scanning): Giriş metnini, anlamlı birimlere (token'lara) ayırır. Örneğin, bir programlama dilinde değişken adları, operatörler, sayılar gibi temel yapı taşları token'lardır.
- Sözdizimsel Analiz (Syntactic Analysis/Parsing): Token dizisini alır ve dilin dilbilgisi kurallarına (grammar rules) göre kontrol eder. Bu aşamada, token'ların doğru sırada ve yapıda olup olmadığı denetlenir. Hatalı bir yapı tespit edilirse, sözdizimi hatası (syntax error) raporlanır.
- Anlamsal Analiz (Semantic Analysis): Ayrıştırma ağacını (parse tree) veya AST'yi kullanarak kodun anlamını kontrol eder. Örneğin, değişkenlerin tanımlanıp tanımlanmadığı, veri tiplerinin uyumlu olup olmadığı gibi kontroller yapılır.
Ayrıştırıcı Türleri:
- Yukarıdan Aşağıya Ayrıştırıcılar (Top-Down Parsers): Dilbilgisini kök sembolünden başlayarak, girdi dizisine göre tahminler yaparak oluşturmaya çalışır. Recursive descent parser'lar ve LL parser'lar bu kategoriye girer.
- Aşağıdan Yukarıya Ayrıştırıcılar (Bottom-Up Parsers): Girdi dizisinden başlayarak, dilbilgisini yaprak düğümlerinden köke doğru oluşturmaya çalışır. LR parser'lar ve shift-reduce parser'lar bu kategoriye girer.
Ayrıştırma Teknikleri:
- Özyinelemeli İniş (Recursive Descent Parsing): Her bir dilbilgisi kuralı için bir fonksiyon oluşturulur. Fonksiyonlar, girdi dizisini tüketerek ve diğer fonksiyonları çağırarak ayrıştırma işlemini gerçekleştirir.
- LL Ayrıştırma: Girdiyi soldan sağa tarar ve en soldaki türetmeyi kullanarak ayrıştırma yapar.
- LR Ayrıştırma: Girdiyi soldan sağa tarar ve en sağdaki türetmeyi tersine çevirerek ayrıştırma yapar. Daha karmaşık dilbilgisini destekleyebilir.
Ayrıştırıcı Oluşturma Araçları:
- Yacc (Yet Another Compiler-Compiler): Bir LALR ayrıştırıcı üreteci.
- Bison: Yacc'ın GNU versiyonu.
- ANTLR (ANother Tool for Language Recognition): Güçlü bir ayrıştırıcı üreteci.
Ayrıştırıcıların Kullanım Alanları:
- Derleyiciler ve Yorumlayıcılar: Programlama dillerini işlemek.
- Veri İşleme: XML, JSON gibi yapılandırılmış verileri okumak ve işlemek.
- Protokol Analizi: Ağ protokollerini analiz etmek.
- Sorgu Dilleri: Veritabanı sorgularını işlemek (örneğin, SQL).
- Konfigürasyon Dosyaları: Konfigürasyon dosyalarını okumak ve yorumlamak.
Önemli Terimler: