< programs >→< external declarations >|< programs >< external declarations >
< external declarations >→< function definitions >|< declarations >
< function definition >→< type specifier >< declarator >< Compound statement >
< type specifier >→< no return type >|< character >|< integer >|< floating-point >
< declarators >→< pointers >< Direct declarations >|< Direct declarations >
< pointers >→*|*< pointers >
< Direct declaration >→< identifier >|< Direct declaration >[]|< Direct Declaration >[constant Expression]|< identifier > (parameter table) |< identifier > () |< Direct Declaration >,< List of identifiers >
< identifier list >→< identifier >|< identifier list >,< identifiers >
< constant expressions >→< conditional expressions >
< parameter table >→< parameter declaration >|< parameter table;, < parameter declaration >
< parameter declarations >→< declaration specifiers >< Identifiers >
< compound statement >→{<>}| {< Statement List >}| {< Declaration list >< statement list;}
< declarations list >→< declarations >|< declarations List >< declarations >
< declarations >→< initialization declarators >|< initialization declarator list >,< Initialize declarators >
< initialize declarators >→< declarations >|< declarators >=< Initialize >
< initialization >→< Assignment expression >| {< initializer list
Initialize List >}| {< initializer list
Initialize the list;
< Initialize list >→< initialize >|< initialize list >,< Initialize >
< statement list >→< Statement >|< statement list >< statements >
< statements >→< Compound statements >|< expression statements >|< selection statement
SELECT statement >|< Iteration statement >|< jump Statement >
< expression statements >→;|< expressions >;
< SELECT statement >→if (< expression >) < statement >| if (< expression >) < statement >else< Statement >
< iteration statement >→while (< expression >) < statement >|for (< expression statement >< expression statement >) < statement >|for (< expression statement >< expression statement >< expressions >) < statements >
< jump statements >→continue;|break;|return;| return< expressions >;
< expressions >→< Assignment Expressions >|< Expressions >,< Assignment Expressions >
< Assignment expressions >→< conditional expressions >|< unary Expressions >< assignment operators >< Assignment Expressions >
< conditional expression >→< logical OR expression >|< logical or expression >?< expression >:< conditional expression >
< logic or expressions >→< logic and expressions >|< logical OR expression > or op< logic and expressions >
< logic and expressions >→< inclusions or expressions >|< logic and Expressions >and op< contains or expressions >
< include or expression >→< bitwise OR expression >|< with expression >|< bitwise OR expression >^< and expression >
< expressions >→< Equality expressions >|< with expressions >&< equation expressions >
< equation expressions >→< relational Expressions >|< Equality expressions > eq_op< relational Expressions >|< equation expressions > ne_op< relational Expressions >
< relationship expressions >→< conversion Expressions > |< Relationship Expressions ><< transformation Expressions >|< Relational Expressions >>< transform expressions >|< relational Expressions >le op < conversion expressions >|< relational Expressions >ge op< table conversion up to type >
< conversion Expressions >→< addition expressions >|< conversion Expressions >left op< addition expressions >|< conversion Expressions >right op< addition expressions >
< addition expressions >→< multiplication Expressions >|< addition expressions >+< multiplication Expressions >|< addition expressions >-< multiplication expressions >
< multiplication expressions >→< cast expressions >|< multiplication Expressions >*< cast expressions >|< multiply expressions >/< cast expressions >|< multiplicative expressions >%< cast expressions >
< cast expression >→< unary expression >| (< type name >) << cast expression >>
< unary expression >→< suffix expression >| INC op< One-dollar expression >| dec_op< unary expressions >|< unary operators >< cast expressions >| sizeof< One-dollar expression >| SIZEOF (< type name >)
< postfix expression >→< original expression >|< suffix expression >[< expression >]| < suffix expression > () |< suffix expression > (< expression argument list >) |< suffix expression;. identifier|< suffix expression > ptr op identifier|< suffix expression > ptr op identifier|< suffix expression > INC op|< suffix expression > DEC op
< original expression >→identifier| Constant| STRING literal| (< expressions >)
< argument lists for expressions >→< parameter Expressions >|< argument lists for expressions >,< parameter expressions >
< unary operator >→&|*|+|-|~|!
< assignment operator >→=| mul_assign| div_assign| mod_assign| add_assign| sub_assign| left_assign| right_assign| and_assign| xor_assign| Or_assign
< storage class Descriptor >→typedef| extern| static| auto| REGISTER
< descriptor for struct or common body >→< struct or common body > identifier{< struct Declaration list >}|< struct or common body >{< struct declaration list >}|< struct or common body > IDENTIFIER
< structure or common body >→struct| UNION
< struct declaration list >→< struct declaration >|< struct declaration list >< struct declaration >
< struct declaration >→< Descriptor Qualifier List >< struct Declaration list >;
< specifier qualifier list >→< type specifier >< specifier qualifier list >|< type specifier >|< type qualifier >< descriptor qualifier List >|< type qualifier >
< struct declarator list >→< struct declaration >|< struct declarator list >,< struct declaration >
< struct declarations >→< declarations >|:< constant Expressions >|< declarations >:< constant Expressions >
< enumeration specifier >→ENUM{< enumeration list >}| Enum identifier{< Enumeration List >}| ENUM IDENTIFIER
< enumeration list >→< Enumeration method >|< Enumeration list >,< Enumeration >
< enumeration method >→identifier| identifier=< constant-expression >
< type qualifier >→const| VOLATILE
< descriptor qualifier List >→< type qualifier >|< specifier qualifier list >< type qualifier >
< parameter type list >→< parameter table >|< parameter table; ellipsis
< parameter table >→< parameter declaration >|< parameter table >,< parameter declaration >
< type name >→< descriptor qualifier List >|< specifier qualifier List >< abstract description >
< abstract description >→< pointers >|< Direct declarators >|< pointers >< Direct declarators >
< direct declarator >→ (< abstract description >) | []| [< constant Expressions >]|< Direct declarators >[]|< Direct declarators >[< constant Expressions >]| ()| (< parameter type list >) |< direct declarator > () |< direct declarator > (< parameter type list >)
< label statement >→IDENTIFIER:< statement >| case< constant expression >:< statement >| DEFAULT: < statements >
C language Grammar translation