小编Woj*_*gda的帖子

init-declarator-list和GNU GCC属性语法

我正在改进一个内部C语言野牛/基于flex的解析器,其中包括引入正确的__ attribute__支持.

因为我找不到任何描述GNU GCC __ attribute__想法的官方BNF风格语法(除了http://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html文档),我从C中提取点点滴滴通过网络找到的各种实现中的++ x11标准和注释.

我几乎完成了它(至少在解析上面引用的GCC文档中包含的示例时),但是一个特殊的例子令我头疼,外部资源没有任何解决方案.

示例如下:

__attribute__((noreturn)) void d0 (void),
         __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
          d2 (void);
Run Code Online (Sandbox Code Playgroud)

附件说明:

在使用单个说明符和限定符列表的多个标识符的声明中,以逗号分隔的声明符列表中的声明符(不是第一个)之前可以出现属性说明符列表.这些属性说明符仅适用于它们出现在其声明符之前的标识符.

因此,引导我找到这个解决方案:

init-declarator-list:
 init-declarator
 init-declarator-list , attribute-specifier-seq[opt] init-declarator
Run Code Online (Sandbox Code Playgroud)

我知道它有效但我想寻求验证/支持,如果这是解决上述案例的正确方法.

谢谢,

沃伊切赫

编辑:这个链接(虽然有点过时)提供了一个解决方案,就像我的一样:http://plg.uwaterloo.ca/~cforall/gcc.y 奇怪的是,我之前没有偶然发现它,只是在我做的时候搜索__ extension__关键字.

c grammar attributes gnu bnf

5
推荐指数
1
解决办法
358
查看次数

标签 统计

attributes ×1

bnf ×1

c ×1

gnu ×1

grammar ×1