Bir grammar.y dosyası kullanarak C ayrıştırıcısını oluşturmak için bizon ve flex kullandım. Yaklaşık 10 saniye içinde düzgün ve çok hızlı bir şekilde derler. Doğru sonuçlar elde etmesine rağmen, C++ çıktısını almak için bizon ve esnek argümanları değiştirdim ancak dilbilgisinin CPP sonucunu derlemek ve çıktılamak yaklaşık 1 dakika sürüyor. Bu problemi çözmek için herhangi bir fikri olan var mı? Dilbilgisi dosyası yaklaşık 6000 satırdır.Bison ve lex dilbilgisinin yavaş derlenmesi
cevap
C++ derlemesinin, C++ kodunun karmaşıklığına bağlı olarak pekmez gibi yavaş çalıştığı oldukça yaygındır. C++ derleyicisinin, işleri anlayabilmek için yapacak çok işi vardır. Bir C derleyicisinden çok daha fazla çalışmak zorundadır. Birkaç dakika süren ve bir miktar RAM'e yakın olan C++ kodum var.
Bison'un 6000 satırlık bir kural kümesinden yayıldığı robo tarafından oluşturulmuş bir LALR (1) ayrıştırıcısıyla, bu beklenmedik bir sonuç değildir. Ayrıştırıcıdan çalışma zamanı performansı kritik değilse, robo tarafından oluşturulan dilbilgisi dosyası için -O en iyileştirme seçeneklerini bırakarak büyük olasılıkla işleri hızlandırabilirsiniz. Bu muhtemelen bazı şeyleri hızlandıracaktır.
Ayrıca derleyicinizi güncelleştirmeyi de deneyebilirsiniz. gcc, son sürümlerde, performansını belirgin bir şekilde artırdı, bu yüzden daha eski bir gcc kullanıyorsanız, bir iyileşme görebilirsiniz.
C++ 'ya hoş geldiniz.
- 1. Flex/Bison benzeri işlevsellik
- 2. CKağıt ve Flex/Bison
- 3. Flex ve Bison
- 4. Flex ve Bison
- 5. Etkin bir Lex ve Yacc IRC var mı?
- 6. YAML ayrıştırma - lex veya el yapımı?
- 7. Piston'un görüntü kasasını kullanarak bir programın derlenmesi yavaş
- 8. Lex/flex/yacc/bison dosyaları için iyi bir Emacs modu veya yöntemi var mı?
- 9. Ubuntu'da Lex ve Yacc nasıl kurulur?
- 10. Bison değer taşıma/verimlilik
- 11. Uyarı Bison compilation
- 12. Yuvalanmış yorumların kaldırılması bz lex
- 13. C++ Bison ile GLR ayrıştırıcıları
- 14. Bison - bir itme ve salt ayrıştırıcı için ek parametre
- 15. Destekle ilgili sorunlar :: spirit :: lex & whitespace
- 16. PHP yavaş yavaş mysqli
- 17. Linux'ta VLC derlenmesi: Hata Lua'yı bulamadı
- 18. Bir x86_64 linux makinesinde gentoo-biyonik derlenmesi
- 19. Gerekli luac 32-bit'lerinde VLC'nin derlenmesi
- 20. Bir programın -dreaded kullanılarak derlenmesi nasıl algılanır?
- 21. Bir IronPython kodunun EXE veya DLL'ye derlenmesi
- 22. Django Makemigrations ve Migrate yavaş
- 23. socket.io yavaş ve yanıt vermiyor
- 24. Kovan sorgusu çok yavaş ve
- 25. Xcode 7 yavaş ve sluggish
- 26. Ayrıştırıcı ne tür bir bison nedir?
- 27. Internet Explorer'da yavaş yavaş Vaadin
- 28. Kukla 3 dosyası yavaş yavaş
- 29. Noktalı çizgi değil yavaş yavaş
- 30. App yavaş yavaş arka plan değiştirme
Sam, Ben bir C++ programcısı değilim, ancak önceden derlenmiş üstbilgileri (ön derleyici tüm sınıfları toplar) MSVC kavramını anlar, böylece tüm tür/sınıf tanımlarını dilbilgisi dosyasının dışında tutarsa, sınıf meclisi olarak derleme değişmez mi? –
@PaulOgilvie: Ön derlenmiş başlıkların Bison/Lex derlemesinde çok az fark yaratması oldukça olasıdır. –