|
| declaration |
::= |
declaration-specifiers ( init-declarator-list |
ε )
; |
| declaration-specifiers |
::= |
( storage-class-specifier (
declaration-specifiers | ε ) ) |
|
| ( type-specifier ( declaration-specifier |
ε ) ) |
|
| ( type-qualifier ( declaration-specifier |
ε ) ) |
| storage-class-specifier |
::= |
auto |
register |
static |
extern |
typedef |
| type-specifier |
::= |
void |
char | short | int | long | float | double |
|
| signed |
unsigned |
struct-or-union-specifier | enum-specifier |
typedef-name |
| struct-or-union-specifier |
::= |
( struct-or-union ( identifier | ε ) {
struct-declaration-list } ) |
|
| ( struct-or-union identifier ) |
| struct-or-union |
::= |
struct |
union |
| struct-declaration-list |
::= |
struct-declaration struct-declaration ∗ |
| enum-specifier |
::= |
( enum (
identifier | ε ) { enumerator-list } ) |
|
| ( enum
identifier ) |
| enumerator-list |
::= |
enumerator ( , enumerator ) ∗ |
| enumerator |
::= |
enumeration-constant |
|
| ( enumeration-constant = constant-expression ) |
| enumeration-constant |
::= |
identifier |
| init-declarator-list |
::= |
init-declarator ( , init-declarator ) ∗ |
| init-declarator |
::= |
declarator | ( declarator = initializer ) |
| type-qualifier |
::= |
const |
volatile |
| declarator |
::= |
( pointer | ε ) direct-declarator |
| direct-declarator |
::= |
identifier |
|
| ( (
declarator )
) |
|
| ( direct-declarator [ ( constant-expression | ε ) ] ) |
|
| ( direct-declarator ( parameter-type-list ) ) |
|
| ( direct-declarator ( ( identifier-list | ε ) ) ) |
| pointer |
::= |
( * ( type-qualifier-list | ε ) ) |
|
| ( * ( type-qualifier-list | ε ) pointer ) |
| parameter-type-list |
::= |
parameter-list | ( parameter-list , ... ) |
| parameter-list |
::= |
parameter-declaration ( , parameter-declaration ) ∗ |
| type-qualifier-list |
::= |
type-qualifier type-qualifier ∗ |
| struct-declaration |
::= |
specifier-qualifier-list struct-declarator-list
; |
| specifier-qualifier-list |
::= |
type-specifier ( specifier-qualifier-list |
ε ) |
|
| ( type-qualifier ( specifier-qualifier-list |
ε ) ) |
| struct-declarator-list |
::= |
struct-declarator ( , struct-declarator ) ∗ |
| struct-declarator |
::= |
declarator |
|
| type-specifier ( declarator | ε ) : constant-expression
) |
| parameter-declaration |
::= |
( declaration-specifiers declarator ) |
|
| ( declaration-specifiers ( abstract-declarator
| ε )
) |
| identifier-list |
::= |
identifier ( , identifier ) ∗ |
| abstract-declarator |
::= |
pointer |
|
| ( ( pointer | ε ) direct-abstract-declarator
) |
| direct-abstract-declarator |
::= |
( (
abstract-declarator ) ) |
|
| ( direct-abstract-declarator | ε ) [ ( constant-expression | ε ) ] |
|
| ( direct-abstract-declarator | ε ) ( ( parameter-type-list | ε ) ) |
| initializer |
::= |
assignment-expression |
|
| ( {
initializer-list } ) |
|
| ( {
initializer-list , } ) |
| initializer-list |
::= |
initializer ( , initializer ) ∗ |
| type-name |
::= |
specifier-qualifier-list ( abstract-declarator |
ε ) |
| typedef-name |
::= |
identifier |