5

私は社内の C 言語 bison/flex ベースのパーサーを刷新しています。とりわけ、適切な __attribute__ サポートを導入しています。

GNU GCC __ attribute__ のアイデアを説明する公式の BNF スタイルの文法が見つからないため ( http://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.htmlドキュメントを除く)、C からビットとピースを抽出しています。 ++x11 標準と、Web で見つかったさまざまな実装のコメント。

私はほぼ完了しました (少なくとも、上記の GCC のドキュメントに含まれる例の解析に関しては) が、外部ソースに解決策のヒントがない 1 つの特定の例が頭痛の種になりました。

例は次のとおりです。

__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__ キーワードの検索。

4

1 に答える 1

1

GCC 2.XX の初期バージョンは、解析のために bison に依存していました。したがって、古いバージョンをダウンロードすると、必要なものが提供されます。

新しい属性が新しい GCC バージョンで導入されることに注意してください ...

于 2013-03-12T13:25:46.433 に答える