source program → External declarations | Sub-Program (external Declaration)
External declarations → Function definitions | function declaration
function definition → type identifier (compound sentence)
identifier type → no type | Character Type | Integral type | Floating point Type
integral type → long integer type | Short-integer | Unsigned integral type
Declaration → Pointer Direct declaration | Direct declaration
Pointer →* | * pointer
Direct Declaration → identifiers | Direct declaration []| Direct declaration [constant Expression]| Identifiers (parameter list) | Identifier () | (Direct declaration, List of identifiers)
Identifier list → identifiers | (identifier list, identifier)
Constant-expression → conditional-expression
parameter list → parameter declaration | (parameter list, parameter declaration)
parameter declaration → Descriptor declaration, identifier
Compound Statement →{} | {Statement List} | {Declaring list statement list}
Declaration List → Declaration | Declaration List Declaration
Declaration → Initialization Declaration | (Initialize declaration list, initialize declaration)
Declaration of initialization → Declaration | Declaration = Initialization Program
Initialization program → expression | {initialization Program List} | {Initialization program list,}
Initialization program list → initialization Program | (Initialize program list, initialize program)
Statement List → statements | Statement list
Statement → statement | Compound Statement | Expression Statements | SELECT statement | Loop Statement | JUMP statement
expression statement → expression;
SELECT statement →if (expression) statement | IF (expression) statement | ELSE statement
Loop statement →while (expression) statement | For (an expression statement; An expression statement) | For (an expression statement; An expression statement; An expression statement)
Jump Statement | continue; |breack; | return; | return expression;
Expression → assignment expression | (An expression, an assignment expression)
assignment expression → conditional expression | unary expression (Assignment operator) assignment expression
conditional expression → logical ' or ' expression | logical ' or ' expression? Expression: Conditional expression
Logical ' or ' expression → logic ' and ' expression | logic ' or ' expression ' or ' operation | logic ' and ' expression
Logic ' and ' expression '-logic ' or ' expression | logic ' with ' expression ' and ' operation (logical ' or ' expression ')
or op-expression → xor expression | or expression ' | xor expression
equality expressions → relational expressions | Equality expression equals an expression of an operation relationship | An equality expression is not equal to an expression of an operation relationship
Relationship expression → substitution expression | relationship expression Substitution expression | Relationship expression Substitution expression | Relational expression <= Substitution expression | < relationship expression >= substitution expression
Replace expression → addition expression | Subtraction-expression | Multiplication expressions
addition expression → multiplication expression >| (addition expression + multiplication expression) | (addition expression-multiplication expression)
multiplication expression → cast expression | (Multiplication expression * Cast expression) | (multiplication expression/cast expression) | (multiplicative expression% cast expression)
Basic Expressions → identifiers | Constants | string | (expression)
Unary operator →& | * | + |- | ~ | !
Assignment operator →=| Multiply Assign values | Division Assignment | finding remainder Assignment | addition Assignment | subtraction Assignment | Left Assignment | Right Assignment | and Assignment | XOR Assignment | or assignment
Storage class Descriptor →typedef (definition Type) | <extern (external variable) | <static (Static) | Auto (Auto) | Register (Register)
Specifiers qualifier list → type specifier specifier qualifier list | Type descriptor | Type Qualifier Descriptor Qualifier List | Type qualifier
struct specifier list → struct specifier | (struct description list characters, struct specifier)
struct descriptor → specifier | (: constant-expression) | (specifier: constant-expression)
Type Qualifiers → Constants | Variable
Tag statement → (identifier: statement) | Case (constant expression: statement) | Default (statement)
C Language Grammar