2009-10-28 22 views
10

Şirketimde yirmi bir yıllık tescilli bir dil geliştirmeye yardımcı oldum. Bu, Turing tam bir dildir. Başka bir gramer rejimine (Antlr gibi) tercüme etmek bir seçenek değildir (buna karar veremiyorum).Yacc Dilbilgisi Hata Ayıklayıcıları Var mı?

Çoğunlukla dilbilgisini genişletmek sorunsuz geçti. Ama her bir süre içinde ben

  • bazen sadece

(benim zayıf beyine) mantıklı değil

  • ortadan kaldırmak için zor olduğunu bir azaltmaya-azaltabilir veya vardiya-azaltmak alırsınız y.output dosyalarına ve deneysel dilbilgisi yeniden düzenlemelerine çok fazla acı verdikten sonra, genellikle nereye gitmek istediğimi öğrendim. Bazen tatmin edici tavizler vermek zorunda kaldım.

    Yani, bir gezinti, deneme ve değişikliklerin hata ayıklamasına izin veren bir yacc dilbilgisinde çekilebilecek herhangi bir araç var mı?

    Bir üretim eklesem, "her yerde kullanılan atomik üretimden daha fazlasını görmek istiyorum" (düşün tanıtıcısı) "kural foo ile çakışmalar" (evet, daha fazla bilgi var, s/r, r/r, bundan daha fazla, ama sanırım benim sürüklenmemi aldın. Düşünme kapama koymaktan ve bir sembol yığını ve durum makinesini hayal etmeye çalışmaktan öte etkileşimin bazı ipuçlarına sahip olmak güzel olurdu.

    Güncelleme: Sanırım açıklığa kavuşmalıyım. Berkeley Yacc kullanıyoruz. Bison'un son bir sürümünü kullanarak test ediyorum. Çıktı için dilbilgisini --report = itemset ile derledim. Bu yazı ile

    Amacım harici araçları augment yacc ile gemi gramer ayıklama tesisleri ararlar etmektir. Bugün varsayılan set ile acı verici. Antlr ile kullanabileceğiniz gibi daha iyi etkileşimli araçlar bulmama yardımcı olun.

  • cevap

    7

    Sen belki çıktı ayıklama üretir yacc -d biraz yardım almak - bu temelde sembol yığını devletler ve böyle tam bir listesini verir. Çıktı yoğun ve hacimli, bu yüzden tüm bunları doğrudan okumaya çalışıyorum nadiren çok fazla şey gerçekleştirir (hiç bir zaman benim için hiç olmaz). Ancak, bir değişiklik (örneğin) bir r/r çatışması yaptığınızda, eski gramer ve yenisine yacc -d'u çalıştırabilir, daha sonra sonuçlarda çok daha ayrıntılı bir aşağıya inmek için sonuçlarda fark çalıştırabilirsiniz. değişiklik (ler) çatışmaya neden oldu.

    Muhtemelen, s/r çatışmaları genellikle iyi huyludur - bir sorun olduğundan, "düzeltmek" denemeye değmediğinden emin değilseniz, çoğu zaman değerli değildir. Aynı şey r/r çatışmalarında da geçerli değildir. Bunlar bazen benign iken, nispeten nadirdir.

    Düzeltme: Oops - üzgünüm, bu olmalıdır -v. Sen y.output'tan bahsediyorsun, o yüzden görünüşte bu kısmı nasıl yapacağını biliyorsun. Asıl nokta, y.output dosyalarına doğrudan bakmaya çalışmak değil, ama temiz bir şekilde ortaya çıkan ile gerçek çatışmanın ayrıntılarını göremeyen bir şey arasında fark yaratmak (10'a bakmadan) Sadece iyi şeyler "şeyler" nin jilyon hatları.

    +0

    Ne demek istediğinden emin değilim. Her iki yaccs ile -d, "jeton makroları için bir başlık dosyası çıkarır" anlamına gelir. Anahtar kullanmanın hakkında daha fazla bilgi ekledim --report = itemset. Bu demek istediğin şey mi? Tüm durum geçiş bilgisiyle dolu bir dosya oluşturur. Onu kullanıyorum ama daha güçlü, etkileşimli bir araç umuyordum. –

    +1

    Jerry haklı, S/R çatışmalar mutlaka hatalar değildir. Hemen hemen her gerçek dilbilgisi bir demet var. – DigitalRoss