Soru Limon gücü mü değil mi?


Dilbilgisi ayrıştırıcı için, ben "oynamak" için kullanılır Bizon Artıları / eksileri olan

Geçen hafta, fark ettim SqLite motorun başka bir dilbilgisi ayrıştırıcısıyla yapıldığı site: Limon

İnce belgeleri okuduktan sonra harika geliyor.
Bu ayrıştırıcı hakkında bazı geri bildiriminiz var mı?

Google ve Wikipedia'da ilgili bilgileri gerçekten göremiyor (sadece birkaç örnek, aynı ders) Çok popüler görünmüyor. (hayır yok  Yığın Taşması etiketinde [ed: şuan var: P])


18
2017-12-24 13:03


Menşei




Cevaplar:


İlginç bulmak! Aslında kullanmamıştım, bu yüzden yorum belgeleri okumaktan ibaret.

Yeniden tasarlama böylece sözcüksel çözümlemenin ayrıştırmadan ayrı olarak yapılması, derhal yeterlidir. Özellikle, çoklu veya iç içe kaynak dosyaları işleme gibi işlemleri basitleştirme potansiyeline sahiptir. Lex tabanlı yywrap() Mekanizma idealden daha azdır. Tüm global değişkenlerden kaçınması ve dikkatli bir bellek tahsisi ve ayrılma kontrolünün kendi lehine olması gerektiğine inanmaktadır (bu, en azından çalışmayı benimsediğim ortamlarda, bellek tahsisinin her zaman bir sorun olduğu yerlerde), ayrıştırıcı ve borç ayırıcı seçimine büyük ölçüde yardımcı olur. .

Kuralların nasıl organize edildiğini ve terminallerin nasıl tanımlandığının yeniden düşünülmesi iyi bir fikirdir.

Sonuçta, Bison'un iyi düşünülmüş tasarımı gibi görünüyor.

Başvurulan web sayfalarına göre kamu malıdır.


6
2017-12-26 08:06



Sana katılıyorum, Bison'un iyi bir yeniden başlatılması gibi geliyor. Uygulamamda kullanacağım. Kurs yığını hakkında geri bildirim vereceğim;) - Stef
@Stef Bize söz verdiğiniz geri bildirime ne dersiniz? :-) - kravemir


Firmware projemizde Limon kullandığımız nedenler:

  • Oluşturulan kodun küçük boyutu ve bellek ayak izi. Bulduğum en küçük ayrıştırıcıyı üretir (esnek, bizon, ANTLR ve Limon tarafından üretilen benzer karmaşıklıktaki parserleri karşılaştırdım);
  • Gömülü sistemlerin mükemmel desteği: Limon standart kütüphaneye bağlı değildir, harici bellek yönetimi işlevlerini belirtebilirsiniz, hata ayıklama günlüğü kaldırılabilir.
  • Genel alan adı lisansı. GPLv2 kapsamında lisanslı olan ve viral lisans nedeniyle ihtiyaçlarımıza uygun olmayan ayrı bir Limon çatalı bulunmaktadır. Bu yüzden en yeni sqlite kaynaklarını alıyoruz ve Limon'u bunlardan derliyoruz (sadece iki dosyadan oluşuyor);
  • Pull-ayrıştırma. Flex / Bison ayrıştırma kodundan daha anlaşılması ve korunması için kodu daha kolay hale getirir. Iplik-güvenlik ek bir bonus olarak hayranım.
  • Jetonlarla basit entegrasyon. Bizim proje doğası değişken belirteçleri ile ikili akışının tokenleştirilmesini gerektirir. Uygulanan bir tokenizer kullanımı oldukça kolaydı ve sadece 3 fonksiyon ve bir feedback içerik değişkeni ile parser API ile entegre edildi. Limonun re2c ve Ragel ile bütünleşmesinin yollarını araştırdık ve bunların uygulanmasını oldukça kolay bulduk.
  • Öğrenmek için çok basit bir sözdizimi.
  • Limon, tokenizer ve sözcüksel analizcinin (ayrıştırıcı) gelişimini açıkça ayırır. Geliştirme akışım, ayrıştırıcı dilbilgisinin tasarlanmasıyla başlar. Bu ilk aşamada birkaç Ayrıştırıcı (...) çağrısı ile örtülü belirteç dizisi içeren karmaşık kuralları kontrol edebiliyorum. Tokenizer daha sonra uygulanır.

Şüphesiz Limon gümüş mermi değildir, sınırlı uygulama alanı vardır. Dezavantajları arasında:

  • Limon, basitleştirilmiş sözdizimi nedeniyle Bison'a kıyasla daha fazla kural yazmayı gerektirir: tekrarlama ve isteğe bağlı, kural başına bir eylem, vb.
  • LALR (1) ayrıştırıcı sınırlamalarının komple kümesi.
  • Sadece C dili.

Seçiminizi yapmadan önce artıları ve eksileri tartın. Benim yaptım ;-)


19
2018-02-19 11:06



C dilinde yazılmak, “bazen” gerçek bir avantaj olarak algılanabilir! - menjaraz
@menjaraz, Bence Adam, Lemons'un hedef dillerini düşündü. - Prof. Falken
Zarafetle patlıyor. Derleyici argümanları olmadan sadece körü körüne derleyebildiğiniz bir C dosyası olarak dağıtılır ve ayrıştırıcı jeneratörü exe oluşturulur. - doug65536
Bu bağlamda "sadece C dili" ne anlama geliyor? (ping @ doug65536 da) C dili olmayan eylemlere sahip olamazsınız? - einpoklum
@einpoklum Yani, limon aracının kendisi iki dosya, biri limon aracının kendisi için C dosyası, diğeri ise oluşturulan ayrıştırıcı için bir şablon. Sen derdin lemon.c Herhangi bir platform için ayrıştırıcı jeneratörünü kolayca kolayca üretmek. Evet, eylemler C biçimindedir. Ayrıştırılabilecek herhangi bir dili LALR ayrıştırıcı. - doug65536