Bir inhouse C dil bison/flex-based ayrıştırıcısını yenileyerek diğerleri arasında uygun __ attribute__ desteği tanıyorum.init-declarator-list ve GNU GCC özniteliği grameri
Ben GNU GCC açıklar herhangi bir resmi BNF tarzı dilbilgisi bulamıyorum beri __ İnternetten bulduğum çeşitli uygulamalarda ufak tefek C++ x11 standardından ve yorum ayıklanması am (http://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html belgenin hariç) attribute__ fikir.
Neredeyse bunu başardım (en azından yukarıda belirtilen GCC'nin belgesinde yer alan örnekleri ayrıştırmak söz konusu olduğunda), ancak belirli bir örnek bana dış kaynaklarda hiçbir çözüm ipucu vermeyen bir baş ağrısı verdi.
örnek aşağıdaki gibidir:
__attribute__((noreturn)) void d0 (void),
__attribute__((format(printf, 1, 2))) d1 (const char *, ...),
d2 (void);
ekli açıklama söylüyor:
Bir özellik belirtici listesi virgülle- (ilk dışında) Bildiricisi hemen önce görünebilir bildiricilerinden oluşan bir liste içinde, belirticilerin ve niteleyicilerin tek bir listesini kullanarak birden fazla tanımlayıcının beyanı. Bu öznitelik belirticileri, yalnızca belirleyicilerinin göründükleri tanımlayıcısına uygulanır.
Böylece, bu çözüme beni lider:
init-declarator-list:
init-declarator
init-declarator-list , attribute-specifier-seq[opt] init-declarator
bunun işe yaradığını biliyorum ama bu yukarıda belirtilen meseleye çözüm etmenin uygun bir yolu olup olmadığını doğrulama/destek aramak istiyorum.
sayesinde
Wojciech
DÜZENLEME: Bu bağlantı (gerçi, biraz tarihli) tıpkı bir çözüm sunar mayın: http://plg.uwaterloo.ca/~cforall/gcc.y garip, ben ancak şimdi zaman, daha önce bunun üzerine tökezledi değil __ extension__ anahtar kelimesi için arama yaptım.