SORU
11 HAZİRAN 2011, CUMARTESİ


GCC ve Çınlama ayrıştırıcıları gerçekten el yazısı?

Bir adam Eli Bendersky adlı GCC ve Çınlama ayrıştırıcı el yazısı olan, yacc veya başka bir yardım yapılması ile değil, onun blog yazdı derleyici-derleyici. Ayrıca-iniş ayrıştırıcıları özyinelemeli olduğunu söylemek gibi görünüyor.

Birileri burada bazı ana akım derleyici çerçeveler hala böyle el yazısı ayrıştırıcıları çare olduğunu doğrulayabilir misiniz?

Güncelleme: interesting blog on this topic here

CEVAP
12 HAZİRAN 2011, Pazar


C zor ayrıştırmak için söylediği, halk-teoremi var, ve C aslında imkansız.

Bu doğru değil.

Doğru olan, C ve C ayrıştırma makinaları Hack ve Sembol tablo veri karışıklığı olmadan LALR(1) ayrıştırıcı kullanarak ayrıştırmak için oldukça zor olmasıdır. Aslında GCC onları ayrıştırmak için, bu gibi YACC ve ek hackery kullanılmış, ve evet çirkindi. (Şimdi GCC el yazısı ayrıştırıcıları kullanır, ama yine de sembol tablo ile hackery. Evet, hala çirkin!)

Gerçek nedir, C ve C güçlü ayrıştırıcıları ile ayrıştırmak için nispeten kolay olmasıdır, örneğin, GLR parsers ve herhangi kesmek gerekmez. Elsa C çözümleyici bunun bir örneğidir. C Front End başka bir şeydir Bizim (Bizim "" harika teknoloji ayrıştırma yeşil hat tüzüğünü ön biter) derleyici. tüm gibi

Bizim C ön bitmeyecek kadar hızlı GCC, ve kesinlikle daha yavaş Elsa; ettik koy az enerji içine ayar dikkatle çünkü biz diğer daha acil sorunları (nontheless bu kez kullanıldı üzerinde milyonlarca satır C kodu). Elsa sadece daha genel çünkü muhtemelen GCC yavaştır. İşlemci hızı bu gün verilen, bu farklılıkların uygulamada bir çok sorun olmayabilir.

"Gerçek Derleyiciler" bugün yaygın olarak dağıtılır derleyici kökleri 10 ya da 20 yıl önce ya da daha fazla. ama Verimsiz sonra çok daha önemli, ve kimse nasıl yapılacağını biliyorlardı ne kadar yeşil hat tüzüğünü ayrıştırıcıları haber vardı. Çınlama kesinlikle daha yakın, ama daha sonra halk teoremleri "inandırıcılık" uzun bir süre. onların elinde tutabilir

Bu şekilde daha fazla yapmak zorunda değilsin. Çok makul ön uçları, derleyici idame bir iyileşme ile yeşil hat tüzüğünü ve diğer ayrıştırıcıları kullanabilirsiniz.

Nedoğru, dost canlısı komşunuz derleyicinin davranışı ile eşleşen bir gramer elde etmek zordur. Hemen hemen tüm C uygulamak (en) orijinal standart Derleyiciler iken, onlar da karanlık köşe uzantıları bir sürü, örneğin, MS derleyici, vb özellikler DLL var eğilimindedir. Eğer güçlü bir ayrıştırma motoru varsa, zaman son dilbilgisi gerçeklik maç, dilbilgisi ayrıştırıcı jeneratör sınırlamalar maç bükmeye çalışmak yerine anlamaya çalışmakla geçirirler.

Kasım 2012 EDİT: bu cevap yazma Beri, C bizim ön uç işlemek için geliştirdik C ANSI, GNU, MS varyant ve lehçeleri de dahil olmak üzere 11, tam. Ekstra bir sürü şey varken, ayrıştırma motoru değiştirmek zorunda değilsiniz, biz sadece dilbilgisi kurallarını gözden geçirilmiş. Bizyaptısemantik analiz değiştirmek zorunda; C 11 çok karmaşık anlamsal ve bu iş çözümleyici çalıştırmak için çaba bataklık.

Şubat 2015 DÜZENLEME: ... şimdi tam işler C 14.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Hey Nadine

    Hey Nadine

    24 Kasım 2006
  • Kenneth Håkonsen

    Kenneth Håk

    13 Mart 2011
  • theavettbrothers

    theavettbrot

    9 ŞUBAT 2007