2013-03-06 100 views
5

我正在修改內部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__關鍵字。

回答

1

早期版本的GCC 2.X.X曾經依賴bison進行解析。所以下載一箇舊版本應該爲你提供你想要的。

只要注意新的GCC版本引入的新屬性...