Tarayıcısız ayrıştırma - Scannerless parsing

İçinde bilgisayar Bilimi, tarayıcısız ayrıştırma (olarak da adlandırılır sözcüksüz ayrıştırma) tek bir adımda belirteçlere ayırma (bir karakter akışını kelimelere ayırma) ve ayrıştırma (kelimeleri cümlelere ayırma) gerçekleştirir. boru hattı bir Lexer ardından bir ayrıştırıcı, yürütülüyor aynı anda. Bir dil grameri her ikisini de ifade etmek için tek bir biçimcilik kullanıyorsa tarayıcısızdır sözcüksel (kelime seviyesi) ve kelime öbeği seviyesi yapısı.

İşlemeyi sözlüğe ve ardından ayrıştırıcıya bölmek daha modülerdir; tarayıcısız ayrıştırma, öncelikle net bir sözcük ayrıştırıcı ayrımı gerekmediğinde veya istenmediğinde kullanılır. Bunun ne zaman uygun olduğuna dair örnekler şunları içerir: TeX, çoğu wiki gramerler makefiles, uygulamaya özgü basit komut dosyası dilleri, ve Raku.

Avantajlar

  • Sadece bir metaldil gereklidir
  • Düzenli olmayan sözcük yapısı kolayca ele alınır
  • "Jeton sınıflandırması" gerekli değil bu da "gibi tasarım kolaylıkları ihtiyacını ortadan kaldırır"lexer hack "ve dil Ayrılmış kelimeler ("while" gibi C )
  • Gramerler olabilir kompozisyon (insan müdahalesi olmadan birleştirilebilir) [1]

Dezavantajları

  • Sözcüksel tarama ve sözdizimsel ayrıştırma birleştirildiği için, ortaya çıkan ayrıştırıcı, daha karmaşık ve böylece anlamak ve hata ayıklamak daha zor. Ayrıştırıcıyı oluşturmak için bir dilbilgisi kullanılıyorsa, aynı şey ilişkili dilbilgisi için de geçerli olacaktır.
  • Ortaya çıkan ayrıştırıcı, önemli ölçüde daha az verimli her ikisi ile ilgili bir lexer-ayrıştırıcı ardışık düzeninden daha zaman ve hafıza.[1]

Uygulamalar

  • SGLR modüler Sözdizimi Tanımı Biçimciliği için bir ayrıştırıcıdır SDF ve bir parçasıdır ASF + SDF Meta Çevre ve Stratego / XT program dönüştürme sistemi.
  • JSGLR, SGLR'nin saf bir Java uygulamasıdır. SDF.
  • TXL karakter düzeyinde ayrıştırmayı destekler.
  • Dparser tarayıcısız için ANSI C kodu üretir GLR ayrıştırıcıları.
  • Ruh hem tarayıcısız hem de tarayıcı tabanlı ayrıştırmaya izin verir.
  • SBP için tarayıcısız bir ayrıştırıcıdır boole dilbilgisi (bağlamdan bağımsız gramerlerin bir üst kümesi), Java ile yazılmış.
  • Laja dilbilgisi kurallarını Java ile yazılmış nesnelere eşleme desteğine sahip iki aşamalı bir tarayıcısız ayrıştırıcı üretecidir.
  • Raku Dilbilgisi genel amaçlı programlama dilinin özelliği Raku.
  • PyParsing saf Python ile yazılmış tarayıcısız bir çözümleyicidir.
  • META II Yerleşik jeton ayrıştırıcı işlevlerine sahiptir.
  • AĞAÇ-META META II gibi, yerleşik lexer işlevlerine sahip tarayıcısızdır.
  • CWIC Derleyici Yazma ve Uygulama için Derleyici. Dilinin bir parçası olarak belirteç kurallarına sahiptir. CWIC'deki kurallar, başarı veya başarısızlık döndüren mantıksal işlevler halinde derlendi.

Notlar

  • ^ Bunun nedeni, karakter düzeyinde ayrıştırmanın, ayrıştırıcı tarafından tanınan dilin tek bir bağlamdan bağımsız dil dizge dizilerinin bağlamdan bağımsız dilinin aksine karakterler üzerinde tanımlanmıştır. normal diller. Bazı sözcüksüz ayrıştırıcılar, kompozisyon altında kapalı olan bağlamdan bağımsız dillerin tüm sınıfını ele alır.

daha fazla okuma

  • Visser, E. (Ağustos 1997). Tarayıcısız Genelleştirilmiş-LR Ayrıştırma. Hollanda: Amsterdam Üniversitesi. CiteSeerX  10.1.1.37.7828.
  1. ^ Economopoulos, Giorgios; Klint, Paul; Vinju, Jurgen (2009). "Daha Hızlı Tarayıcısız GLR Ayrıştırma" (PDF). Derleyici İnşaatı. 5501: 126–141. doi:10.1007/978-3-642-00722-4_10.