我正在修改內部C語言bison/flex-based解析器,其中包括引入正確的__ attribute__支持。init-declarator-list和GNU GCC屬性語法
由於我找不到任何描述GNU GCC __ attribute__思想(除http://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html文檔之外)的任何官方BNF風格語法,我從C++ x11標準中提取了部分代碼片段,並在網絡上發現了各種實現中的註釋。
我已經完成了它(至少在解析上面引用的GCC文檔中包含的示例時),但是一個特例使我頭痛,沒有外部解決方案的提示。
的例子是如下:
__attribute__((noreturn)) void d0 (void),
__attribute__((format(printf, 1, 2))) d1 (const char *, ...),
d2 (void);
附的描述說:
的屬性說明符列表可以立即出現在逗號一個聲明符 (比所述第一其他)之前用 指定符和限定符的單個列表在 中聲明多個標識符。這些屬性說明符僅適用於其聲明符出現前的 標識符。
因此,導致我這樣的解決方案:
init-declarator-list:
init-declarator
init-declarator-list , attribute-specifier-seq[opt] init-declarator
我知道它的工作原理,但我想尋求驗證/支持,如果這是解決上述情況的正確方法。
感謝,
沃伊切赫
編輯: 此鏈接(日期,雖然有點)給出瞭解決方案,就像我的:http://plg.uwaterloo.ca/~cforall/gcc.y 奇怪的是,我沒有在它前面跌跌撞撞,只是現在當我搜索了__ extension__關鍵字。