Bir çözümleyici oluşturmak için Bison kullanıyorum. Anlaşmak için LALR yerine GLR kullanmak için gerçekten Bison'a ihtiyacım olan bir vardiya/azaltma şansım var. Ama ben %glr-parser
yönergesini geçtim ve kaynak dosya hala bir LALR ayrıştırıcısı olduğunu belirtiyor. Hatta bir GLR C++ ayrıştırıcısı olduğunu ve %skeleton "glr.cc"
kullanarak çıktıyı değiştirmediğini öneren bir "glr.cc" iskeleti buldum. Bison, tüm hedef dilleri için tüm algoritmaları göndermiyor mu?C++ Bison ile GLR ayrıştırıcıları
cevap
Sadece bir GLR çözümleyici almak için %glr-parser
gerekir. GLR ayrıştırıcılarının STILL'lerin çatışmaya (kayma/azaltma veya azaltma/azaltma) sahip olabileceğini, sadece oluşturulan çözümleyicinin her iki alternatifi de deneyip sonucu birleştireceğini unutmayın.
Çakışmalarla ilgili iletileri kapatmak istiyorsanız, %expect
ve %expect-rr
'u kullanabilirsiniz. Sadece, tüm çatışmaların ne olduğunu anlayamadığınız bir GLR çözümleyicisini körü körüne kullanmaktan çekinmeyin. Sonuçta ortaya çıkan ayrıştırıcı, dikkatli değilseniz bazı girişleri ayrıştırabilir veya çalışma zamanında size belirsizlik hataları verebilir.
Bu gerçekten soruya cevap değil - Ben '% glr-parser' – Puppy
@DeadMG denedim dedi: o zaman bir GLR çözümleyici var. Sadece bu GLR ayrıştırıcıları LALR ayrıştırıcıları ile çatışmaları aynı şekilde değiştirir/azaltır ve azaltır/azaltır, sadece onlarla farklı bir şekilde ilgilenirler. –
Ben bir tane yoktu demedim çünkü hala çatışmalar rapor etti, ben hala bir tane vardı çünkü kaynak dosyanın yorumları hala öyle söyledi. – Puppy
"%skeleton "glr.cc"
çıktıyı değiştirmediğini" ne demek istediğimi bilmiyorum, çünkü bunu yapıyor! Çıkışı gerçekten değiştirdiğinden emin misin? Eğer yaptıysanız, lütfen daha fazla bilgi verin.
$ echo "%% exp: '0'" > /tmp/f.y
$ bison -S lalr1.cc /tmp/f.y -o f1.cc
$ bison -S glr.cc /tmp/f.y -o f2.cc
$ ls -l f1.cc f2.cc
-rw-r--r-- 1 akim wheel 28373 30 oct 09:29 f1.cc
-rw-r--r-- 1 akim wheel 82767 30 oct 09:29 f2.cc
- 1. JSON ayrıştırıcıları için karşılaştırmalar?
- 2. Bison değer taşıma/verimlilik
- 3. Flex/Bison benzeri işlevsellik
- 4. Flex ve Bison
- 5. Flex ve Bison
- 6. CKağıt ve Flex/Bison
- 7. Uyarı Bison compilation
- 8. Bison ve lex dilbilgisinin yavaş derlenmesi
- 9. Ayrıştırıcı ne tür bir bison nedir?
- 10. Java, C++, C#, vs. < and > ile bu sözdizimsel belirsizliği nasıl aşar?
- 11. Bison - bir itme ve salt ayrıştırıcı için ek parametre
- 12. YACC veya Bison Eylem Değişkenleri konum max değeri
- 13. Tanımlanmış bir dilin her bir önekini kabul eden Bison dilbilgisi
- 14. Lex/flex/yacc/bison dosyaları için iyi bir Emacs modu veya yöntemi var mı?
- 15. bizon: Çatışma ile başa çıkmak, hangi yolu kullanmalıyım?
- 16. C++ ile statik başlatılması Objective-C ile karıştırılmış
- 17. C# ile geçiş String.IsNullOrEmpty
- 18. FACmp ile kodlama (C++)
- 19. C# delikleri ile sorun #
- 20. C++ ile Bitmap Çizim +
- 21. C# ile Prolog Entegrasyonu #
- 22. C#: HttpClient POST ile
- 23. C# ile yüzdeleri kullanma
- 24. mysql ile bağlanarak C++
- 25. C++ işaretçi ile işaretçi
- 26. C++ sizeof ile bool
- 27. C# ile WebDriver
- 28. Eclipse ile C++ Kullanımı
- 29. Cyclwin ile Compile C++
- 30. SFML C++ ile çalışmadı
bison ücretsiz bir yazılımdır, bu yüzden soruları kodunuzu inceleyebilir ve geliştirebilirsiniz. Bu arada, ANTLR gibi başka bir ayrıştırıcı jeneratörü kullanmayı düşündünüz mü? –
@Basile: Dilbilgisi LL değil. Kaynak kodunu iyileştirmek için, demek istediğim, altı milyar destek aracıyla kamyon almak istiyorsam. – Puppy
ANTLR, bazı LL olmayan dilbilgisi türleriyle uğraşmak için çeşitli kesmelere sahiptir. –