Ayrıştırıcı (yazılım)

Ayrıştırıcı (İngilizce parser), girdi verilerini (çoğunlukla metin) alır ve girdinin yapısal bir temsilini vererek, süreçte doğru sözdizimini kontrol eden bir veri yapısı (çoğunlukla ayrıştırma ağacı, soyut sözdizimi ağacı veya diğer türlü bir hiyerarşik yapı) oluşturan bir yazılım bileşenidir. Ayrıştırma öncesinde veya sonrasında başka adımlar izlenebilir veya bunlar tek bir adımda birleştirilebilir. Ayrıştırıcı, genelde girilen karakter dizisinden belirteçler oluşturan ayrı bir sözcük tabanlı analiz motorunu takip eder. Ayrıştırıcılar elle programlanabilir veya bir ayrıştırıcı üreteci tarafından otomatik olarak veya yarı otomatik olarak oluşturulabilir. Ayrıştırma, biçimlendirilmiş çıktı üretimlerini tek bir şablonda tamamlama görevi görür. Bunlar, farklı etki alanlarına uygulanabilir, ancak bir derleyicinin girdi ve çıktı aşamaları gibi genellikle bir arada sunulur.
Bir ayrıştırıcıya yapılan girdi genellikle bazı programlama dilindeki metin olmakla birlikte doğal bir dildeki metin ya da daha az kapsamlı metin verileri de olabilir; bu durumda, ayrıştırma ağacı oluşturulmadan, metnin yalnızca belirli bölümleri çıkarılır. Ayrıştırıcılar, scanf gibi çok basit işlevleri, bir C++ derleyicisinin arayüzü veya bir web tarayıcısının HTML ayrıştırıcısı gibi karmaşık programları içerir. Basit bir ayrıştırma sınıfının büyük bir kısmı, düzenli ifadeler ve bir düzenli ifade motoru kullanılarak yapılır; bu da örüntü eşleme ve metin çıkarma işlemine izin verir. Diğer durumlarda düzenli ifadeler ayrıştırmadan önce, lexing adımı (daha sonra ayrıştırıcı tarafından çıktısı kullanılmak üzere) kullanılır.
Ayrıştırıcıların kullanımı girdiye göre değişmektedir.Veri dillerinde, bir ayrıştırıcı, programın HTML veya XML metninde okuma işlemi gibi dosya okuma özelliği olarak bulunur; ancak burada kullanılan diller işaretleme dilleridir. Programlama dillerinde bir ayrıştırıcı, dahili bir programlamanın bazı biçimlerini oluşturmak için bilgisayar programlama dilinin kaynak kodunu ayrıştıran derleyicinin veya yorumlayıcının bir bileşenidir.Çözümleme işlemi derleyici önyüzünde önemli bir adımdır. Programlama dilleri deterministik bir bağlamdan bağımsız dil bilgisi ile belirtilmeye eğilimlidir çünkü bunlar için hızlı ve etkili ayrıştırıcılar yazılabilir. Derleyiciler için, ayrıştırmanın kendisi bir geçiş işlemiyle veya birden çok geçiş işlemiyle yapılabilir (tek geçişli derleyici ve çok geçişli derleyici).
Tek geçişli bir derleyicinin dezavantajları, ileriye doğru geçiş sırasında düzeltme işlemleri için hazırlanan bir denetim mekanizması eklenmesiyle önlenebilir ve girdi olarak verilen kod parçacıklarının mevcut program olanaklarına sahip olduğu durumda düzeltmeler geriye uygulanır.Böyle bir düzeltme mekanizmasının yararlı olacağı bir örnek, GOTO ifadesi verilebilir.Program parçacığı tamamlanıncaya kadar bilinmeyen ve ileriye yönelik bir GOTO ifadesi olduğunu varsayalım. Bu durumda, düzeltmenin uygulanmasıyla, GOTO'nun hedefi tanınıncaya dek ertelenecek ve böylelikle kod parçacığı döngüden çıkarılacaktır.Buna paralel olarak, geriye yönelik bir GOTO'nun düzeltilmesi gerekmemektedir ve bunun için yapılacak bir denetim gereksiz bir kısıtlama gibi görünmektedir.
Bağlamdan bağımsız sözdizimleri, bir dilin tüm gereksinimlerini ne ölçüde ifade edebilecekleri ölçütüyle sınırlıdır.Biçimsel olmayan dillerin hafızası sınırlı olmaktadır.Dil bilgisi, keyfi olarak seçilen bir yapının uzun bir girdinin içerisindeki varlığını hatırlayamaz; Bu duruma örnek olarak, bir değişkenin atıfta bulunulmadan önce tanımlanmasını gerektiren diller verilebilir.Bununla birlikte, bu kısıtlamayı ifade edebilen daha güçlü gramer yapıları ise verimli bir şekilde ayrıştırılamaz. Bu nedenle, istenen dil yapılarının bir üst kümesini baz alan (yani, bazı geçersiz yapıları da dahil eden) bağlamdan bağımsız bir dil bilgisi sayesinde, rahat bir ayrıştırıcı oluşturmak yaygın bir kullanımdır.Bu sayede hem kolay ayrıştırılabilir bir dil oluşturulabilir ve istenmeyen yapılar anlamsal analiz ya da bağlamsal analiz adımında filtrelenebilir.
Örneğin, Python'da aşağıdaki ifade sözdizimsel olarak geçerli bir koddur:
x = 1
print(x)
Bununla birlikte, aşağıdaki kod, bağlamdan bağımsız dil bilgisi açısından sözdizimsel olarak geçer ve önceki ile aynı yapıya sahip bir sözdizimi ağacı üretir; ancak bağlam-duyarlı dil bilgisi açısından sözdizimsel olarak geçersizdir; kullanılmadan önce bu değişkenlerin tanımlanmış olmasını gerektirir:
x = 1
print(y)
Kod parçacıkları ayrıştırma aşamasında analiz edilmek yerine, denetim mekanizması söz dizimi ağacındaki değerleri kontrol ederek ve dolayısıyla kod parçacıklarını anlamsal analizin bir parçası olarak yakalamaktadır: Bağlama duyarlı söz dizimi pratikte genellikle anlambilimsel olarak daha kolay analiz edilmektedir.
| g t Bilgisayar biliminin alt dalları |
| --- | --- | --- |
| Matematiksel temeller | Matematiksel mantık ·  Kümeler kuramı ·  Sayı teorisi ·  Çizge teorisi ·  Tip teorisi ·  Kategori teorisi ·  Sayısal çözümleme ·  Bilgi teorisi ·  Kombinatorik ·  Boole cebiri |  |
| Hesaplama teorisi | Otomat teorisi ·  Hesaplanabilirlik teorisi ·  Hesaplamalı karmaşıklık teorisi ·  Kuantum hesaplama teorisi |  |
| Algoritmalar ve veri yapıları | Algoritma çözümlemesi ·  Algoritma tasarımı ·  Hesaplamalı geometri |  |
| Programlama dilleri ve derleyiciler | Ayrıştırıcılar ·  Yorumlayıcılar ·  Yordamsal programlama ·  Nesne yönelimli programlama ·  Fonksiyonel programlama ·  Mantık programlama ·  Programlama paradigmaları |  |
| Eşzamanlı, paralel ve dağıtık sistemler | Çoklu işleme ·  Dağıtımlı hesaplama ·  Eşzamanlılık denetimi |  |
| Yazılım mühendisliği | Gereksinim çözümleme ·  Yazılım tasarımı ·  Bilgisayar programlama ·  Biçimsel yöntemler ·  Yazılım testi ·  Yazılım geliştirme süreci |  |
| Sistem mimarisi | Bilgisayar mimarisi ·  Bilgisayar organizasyonu ·  İşletim sistemi |  |
| Telekomünikasyon ve ağ oluşturma | Bilgisayar müziği ·  Yönlendirme ·  Örgü topolojisi ·  Kriptografi |  |
| Veritabanları | Veritabanı yönetim sistemleri ·  İlişkisel veritabanı ·  SQL ·  İşlem yürütme ·  Veritabanı indeksleme ·  Veri madenciliği ·  Metadata (Üst veri) ·  Ana veri (Master data) |  |
| Yapay zekâ | Otomatikleştirilmiş muhakeme ·  Bilgisayarlı dilbilim ·  Bilgisayarlı görü ·  Evrimsel hesaplama ·  Uzman sistemler ·  Makine öğrenimi ·  Doğal dil işleme ·  Robotik |  |
| Bilgisayar grafikleri | Görselleştirme ·  Bilgisayar animasyonu ·  Görüntü işleme |  |
| İnsan-bilgisayar etkileşimi | Bilgisayar erişilebilirliği ·  Kullanıcı arayüzleri ·  Giyilebilir hesaplama ·  Yaygın bilişim ·  Sanal gerçeklik |  |
| Bilimsel hesaplama | Yapay yaşam ·  Biyoenformatik ·  Bilişsel bilim ·  Bilgisayarlı kimya ·  Hesaplamalı nörobilim ·  Hesaplamalı fizik ·  Sayısal algoritmalar ·  Sembolik matematik |  |
Bilgisayar bilimi, ACM Hesaplama ve Sınıflandırma Sistemi'ne göre farklı konu ve alanlara ayrılabilir.