2010-03-13 15 views
22

Haskell çözümleyici birleştiricilerin (Parsec'te) içeriğe duyarlı dilbilgileri ayrıştırabildiğini okudum. Bu, Scala ayrıştırıcı kombinatorörleri için de geçerli midir? Eğer öyleyse, bu "içine" (aka ">>") işlevi ne içindir?Scala ayrıştırıcısı kombinatorleri Haskell'in Parsec'iyle nasıl karşılaştırılır?

Scala'nın çözümleyici kombinatorörlerin, yani Haskell'in uygulamasının bazı güçlü/zayıf yönleri nelerdir? Aynı gramer sınıfını kabul ediyorlar mı? Hata mesajları oluşturmak ya da bir diğeriyle diğer çeşitli yararlı şeyler yapmak daha mı kolay?

Packrat ayrıştırma (Scala 2.8'de tanıtıldı) bu resme nasıl sığar?

Bir dilin uygulamasından farklı işleçlerin/işlevlerin/DSL şekerinin diğerlerinin üzerine nasıl eşlendiğini gösteren bir web sayfası veya başka bir kaynak var mı?

cevap

14

Çok fazla sorunuz var! Scala kod oldukça yeni olduğu gibi kimse buraya karşılaştırmalar yapmıştır parsekten

Scala uygulanmasına (birçok Haskell çözümleyici combinator kütüphanelerin tek olan) parsekten karşılaştırılması

, fakat kontrol belgeleri:

Bu yaklaşımla ilgileniyorsanız, Haskell'in birçok başka çözümleyici kitaplık kütüphanesine sahip olduğunu unutmayın.

  • polyparse
  • nelerdir Haskell vs bazı güçlü/ayrıştırıcı, bağdaştırıcılarla arasında Scala'nın uygulanması zayıflıklar?

    Haskell kodu on yıldan fazla bir süredir, iyi anlaşılmış ve birçok örnek, çok sayıda belge ve kullanıcı vakası vardır. Scala'nın eşyaları nispeten yeni.

    packrat ayrıştırma

    packrat ayrıştırma tamamen farklıdır. Orijinal packrat paper Haskell'de geliştirildi, ancak o zamandan beri daha yaygın hale geldi.

    Bir dilin uygulamasından farklı işleçlerin/işlevlerin/DSL şekerinin diğerlerinin üzerine nasıl eşlendiğini gösteren bir web sayfası veya başka bir kaynak var mı?

    Hayır, ama bu harika olurdu. Bununla birlikte, hemen hemen tüm (?) Çözümleyici birleştirici kitaplıkları, öncü parsec uygulamasına dayanır, bu nedenle orijinal parsec ile çok paylaşırlar.

    7

    Aşağıdaki teknik rapor da var:

    Parser combinators in Scala

    Ayrıştırıcı combinators Haskell gibi işlevsel programlama dillerinde iyi bilinir. Bu makalede, işlevsel nesne yönelimli bir dil olan Scala'da nasıl bir kütüphane olarak uygulandıklarını açıklıyoruz. Scala'nın esnek sözdizimi sayesinde, özel ayrıştırıcı jeneratörler tarafından desteklenen EBNF notasyonuna yaklaşabiliyoruz. Başlatılmamış için, ilk önce çözümleyici birleştirici kavramını sıfırdan en az bir kütüphane geliştirerek açıklarız. Ardından, sözdiziminin bir parçası olarak değişken ciltlemeyi belirtme desteği de dahil olmak üzere mevcut Scala kütüphanesinin ayrıntılı bir açıklamasına geçeceğiz. Kütüphanemizin faydasını göstermek için birkaç gerçekçi örnek sunuyoruz.

    report.pdf (324K)

    +0

    @Adriaan Moors: Scala 2.8 combinator ayrıştırıcı kütüphane eklemeler adresleri bir yayın var mı? –

    +0

    Sanmıyorum, ama Tiark'a soracağım - 2.7'den beri ayrıştırıcılarda çalışmadım. –

    İlgili konular