语言文法
<翻译单元> --> {<外部声明>} *
<外部声明> --> <函数定义>
| <申报>
<函数定义> --> {<声明说明符>} * <声明符> {<申报>} * <复合语句>
<声明说明符> --> <存储类说明符>
| <类型说明符>
| <类型限定符>
<存储类说明符> -->“自动”
| “注册”
| “静”
| “外部”
| “类型定义”
<类型说明符> -->“无效”
| “字符”
| “短”
| “INT”
| “长”
| “浮动”
| “双节”
| “签约”
| “符号”
| <结构-或工会说明符>
| <枚举符>
| <类型定义名称>
<结构-或工会说明符> --> <结构-或工会> <标识>“{”{<结构声明>} +“}”
| <结构-或工会>“{”{<结构声明>} +“}”
| <结构-或工会> <标识符>
<结构-或工会> -->“结构”
| “联盟”
<结构声明> --> {<说明限定符>} * <结构说明符列表>
<说明限定符> --> <类型说明符>
| <类型限定符>
<结构说明符列表> --> <结构说明符>
| <结构说明符列表>“,”<结构说明符>
<结构说明符> --> <说明符>
| <声明符>“:”<常量表达式>
| “:”<常量表达式>
<声明符> --> {<指针>}? <直接说明符>
<指针> -->“*”{<类型限定符>} * {<指针>}?
<类型限定符> -->“常量”
| “挥发性”
<直接说明符> --> <标识符>
| “(”<声明符>“)”
| <直接说明符>“[”{<常量表达式>}? “]”
| <直接说明符>“(”<参数类型列表>“)”
| <直接说明符>“(”{<标识符>} *“)”
<常量表达式> --> <条件表达式>
<条件表达式> --> <逻辑或表达式>
| <逻辑或表达式>“?” <表达式>“:”<条件表达式>
<逻辑或表达式> --> <逻辑和表达>
| <逻辑或表达式“||” <逻辑和表达>
<逻辑和表达> --> <包容性,或表达>
| <逻辑和表达“&&”<包容性,或表达>
<含-或表达式> --> <异或表达>
| <包容性,或表达>“|” <异或表达>
<异或表达式> --> <和表达>
| <异或表达>“^”<和表达>
<和表达式> --> <平等表达>
| <和表达>“&”<平等表达>
<平等表达式> --> <关系表达式>
| <平等表达>“==”<关系表达式>
| <平等表达>“!=”<关系表达式>
<关系表达式> --> <移位表达式>
| <关系表达式>“<”<移位表达式>
| <关系表达式>“>”<移位表达式>
| <关系表达式>“<=”<移位表达式>
| <关系表达式>“> =”<移位表达式>
<移位表达式> --> <添加剂表达>
| <移位表达式>“<<”<添加剂表达>
| <移位表达式>“>>”<添加剂表达>
<添加剂表达式> --> <乘法表达式>
| <添加剂表达>“+”<乘法表达式>
| <添加剂表达式>“ - ”<乘法表达式>
<乘法表达式> --> <铸表达>
| <乘法表达式>“*”<投表达式>
| <乘表达>“/”<投表达式>
| <乘法表达式>“%”<投表达式>
<投表达式> --> <一元表达式>
| “(”<类型名>“),”<铸表达>
<一元表达式> --> <后缀表达式>
| “++”<一元表达式>
| “ - ”<一元表达式>
| <一元算子> <铸表达>
| “sizeof的”<一元表达式>
| “sizeof的”<类型名称>
<后缀表达式> --> <主表达式>
| <后缀表达式>“[”<表达式>“]”
| <后缀表达式>“(”{<赋值表达式>} *“)”
| <后缀表达式>“。” <标识符>
| <后缀表达式>“ - >”<标识>
| <后缀表达式>“++”
| <后缀表达式>“ - ”
<基本表达式> --> <标识符>
| <常数>
| <字符串>
| “(”<表达式>“)”
<常数> --> <整型常数>
| <字符常量>
| <浮常数>
| <枚举常数>
<表达式> --> <赋值表达式>
| <表达式>“,”<赋值表达式>
<赋值表达式> --> <条件表达式>
| <一元表达式> <赋值运算符> <赋值表达式>
<赋值运算符> -->“=”
| “* =”
| “/ =”
| “%=”
| “+ =”
| “ - =”
| “<< =”
| “>> =”
| “&=”
| “^ =”
| “| =”
<一元操作符> -->“&”
| “*”
| “+”
| “ - ”
| “〜”
| “!”
<类型名> --> {<说明限定符>} + {<抽象声明符>}?
<参数类型列表> --> <参数列表>
| <参数列表>“,”...
<参数列表> --> <参数声明>
| <参数列表>“,”<参数声明>
<参数声明> --> {<声明说明符>} + <说明符>
| {<声明说明符>} + <抽象说明符>
| {<声明说明符>} +
<抽象声明符> --> <指针>
| <指针> <直接抽象说明符>
| <直接抽象说明符>
<直接抽象说明符> -->(<抽象说明符>)
| {<直接抽象说明符>}? “[”{<常量表达式>}? “]”
| {<直接抽象说明符>}? “(”{<参数类型列表>?|“)”
<枚举说明> -->“枚举”<标识>“{”<枚举列表>“}”
| “枚举”,“{”<枚举列表>“}”
| “枚举”<标识>
<枚举列表> --> <枚举>
| <枚举列表>“,”<枚举>
<枚举> --> <标识符>
| <标识>“=”<常量表达式>
<类型定义名称> --> <标识符>
<申报> --> {<声明说明符>} + {<初始化声明符>} *
<初始化声明符> --> <说明符>
| <声明符>“=”<初始化>
<初始化> --> <赋值表达式>
| “{”<初始化列表>“}”
| “{”<初始化列表>“,”“}”
<初始化列表> --> <初始化>
| <初始化列表>“,”<初始化>
<复合语句> -->“{”{<申报>} * {<语句>} *“}”
<语句> --> <标记语句>
| <表达式语句>
| <复合语句>
| <选择语句>
| <循环语句>
| <跳转语句>
<标记语句> --> <标识符>“:”<语句>
| “案例”<常量表达式>“:”<语句>
| “默认”“:”<语句>
<表达式语句> --> {<表达式>}? “;”
<选择语句> -->“如果”“(”<表达式>“),”<语句>
| “如果”“(”<表达式>“),”<语句>“其他”<声明>
| “开关”“(”<表达式>“),”<语句>
<循环语句> -->“,而”“(”<表达式>“),”<语句>
| “做”<语句>“,而”“(”<表达式>“)”“;”
| “为”“(”{<表达式>}?“;”{<表达式>}?“;”{<表达式>}“),”<语句>
<跳转语句> -->“转到”<标识>“;”
| “继续”“;”
| “破”“;”
| “回归”{<表达式>}? “;”