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.
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. –