C programming language BNF definition

translation-unit :

external-declaration

translation-unit external-declaration

external-declaration :

function-definition

declaration

function-definition :

declaration-specifiers opt declarator declaration-list opt compound-statement

declaration :

declaration-specifiers init-declarator-list opt ;

declaration-list :

declaration

declaration-list declaration

declaration-specifiers :

storage-class-specifier declaration-specifiers opt

type-specifier declaration-specifiers opt

type-qualifier declaration-specifiers opt

storage-class specifier : one of

auto register static extern typedef

type specifier : one of

void char short int long float double signed

unsigned struct-or-union-specifier enum-specifier typedef-name

type-qualifier : one of

const volatile

struct-or-union-specifier :

struct-or-union identifier opt { struct-declaration-list }

struct-or-union identifier

struct-or-union : one of

struct union

struct-declaration-list :

struct declaration

struct-declaration-list struct declaration

init-declarator-list :

init-declarator

init-declarator-list , init-declarator

init-declarator :

declarator

declarator = initializer

struct-declaration :

specifier-qualifier-list struct-declarator-list ;

specifier-qualifier-list :

type-specifier specifier-qualifier-list opt

type-qualifier specifier-qualifier-list opt

struct-declarator-list :

struct-declarator

struct-declarator-list , struct-declarator

struct-declarator :

declarator

declarator opt : constant-expression

enum-specifier :

enum identifier opt { enumerator-list }

enum identifier

enumerator-list :

enumerator

enumerator-list , enumerator

enumerator :

identifier

identifier = constant-expression

declarator :

pointer opt direct-declarator

direct-declarator :

identifier

( declarator )

direct-declarator [ constant-expression opt ]

direct-declarator ( parameter-type-list )

direct-declarator ( identifier-list opt )

pointer :

* type-qualifier-list opt

* type-qualifier-list opt pointer

type-qualifier-list :

type-qualifier

type-qualifier-list type-qualifier

parameter-type-list :

parameter-list

parameter-list , ...

parameter-list :

parameter-declaration

parameter-list , parameter-declaration

parameter-declaration :

declaration-specifiers declarator

declaration-specifiers abstract-declarator opt

identifier-list :

identifier

identifier-list , identifier

initializer :

assignment-expression

{ initializer-list }

{ initializer-list , }

initializer-list :

initializer

initializer-list , initializer

type-name :

specifier-qualifier-list abstract-declarator opt

abstract-declarator :

pointer

pointer opt direct-abstract-declarator

direct-abstract-declarator :

( abstract-declarator )

direct-abstract-declarator opt [constant-expression opt ]

direct-abstract-declarator opt (parameter-type-list opt )

typedef-name :

identifier

statement :

labeled-statement

expression-statement

compound-statement

selection-statement

iteration-statement

jump-statement

labeled-statement :

identifier : statement

case constant-expression : statement

default : statement

expression-statement :

expression opt ;

compound-statement :

{ declaration-list opt statement-list opt }

statement-list :

statement

statement-list statement

selection-statement :

if (expression ) statement

if (expression ) statement else statement

switch (expression ) statement

iteration-statement :

while (expression ) statement

do statement while (expression ) ;

for (expression opt ; expression opt ; expression opt ) statement

jump-statement :

goto identifier ;

continue;

break;

return expression opt ;

expression :

assignment-expression

expression , assignment-expression

assignment-expression :

conditional-expression

unary-expression assignment-operator assignment-expression

assignment-operator : one of

= *= /= %= += -= <<= >>= &= ^= |=

conditional-expression :

logical-OR-expression

logical-OR-expression ? expression : conditional-expression

constant-expression :

conditional-expression

logical-OR-expression :

logical-AND-expression

logical-OR-expression || logical-AND-expression

logical-AND-expression :

inclusive-OR-expression

logical-AND-expression && inclusive-OR-expression

inclusive-OR-expression :

exclusive-OR-expression

inclusive-OR-expression | exclusive-OR-expression

exclusive-OR-expression :

AND-expression

exclusive-OR-expression ^ AND-expression

AND-expression :

equality-expression

AND-expression & equality-expression

equality-expression :

relational-expression

equality-expression == relational-expression

equality-expression != relational-expression

relational-expression :

shift-expression

relational-expression < shift-expression

relational-expression > shift-expression

relational-expression <= shift-expression

relational-expression >= shift-expression

shift-expression :

additive-expression

shift-expression << additive-expression

shift-expression >> additive-expression

additive-expression :

multiplicative-expression

additive-expression + multiplicative-expression

additive-expression - multiplicative-expression

multiplicative-expression :

multiplicative-expression * cast-expression

multiplicative-expression / cast-expression

multiplicative-expression % cast-expression

cast-expression :

unary expression

(type-name ) cast-expression

unary-expression :

postfix expression

++ unary expression

-- unary expression

unary-operator cast-expression

sizeof unary-expression

sizeof (type-name )

unary operator : one of

& * + - ~ !

postfix-expression :

primary-expression

postfix-expression [expression ]

postfix-expression (argument-expression-list opt )

postfix-expression .identifier

postfix-expression -> +identifier

postfix-expression ++

postfix-expression --

primary-expression :

identifier

constant

string

(expression )

argument-expression-list :

assignment-expression

assignment-expression-list , assignment-expression

constant :

integer-constant

character-constant

floating-constant

enumeration-constant

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值