文法分析

<翻译单元> :: = {<声明变量>} *

<声明变量> :: = <函数定义>
| <申报>

<函数定义> :: = {<声明说明符>} * <声明符> {<申报>} * <复合语句>

<声明说明符> :: = <存储类说明符>
| <类型说明符>
| <类型限定符>

<存储类说明符> :: =“自动”
| “注册”
| “静”
| “外部”
| “类型定义”

<类型说明符> :: =“无效”
| “字符”
| “短”
| “INT”
| “长”
| “浮动”
| “双节”
| “签约”
| “符号”
| <结构-或工会说明符>
| <枚举符>
| <类型定义名称>

<结构-或工会说明符> :: = <结构-或工会> <标识>“{”{<结构声明>} +“}”
| <结构-或工会>“{”{<结构声明>} +“}”
| <结构-或工会> <标识符>

<结构-或工会> :: =“结构”
| “联盟”

<结构声明> :: = {<说明限定符>} * <结构说明符列表>

<说明限定符> :: = <类型说明符>
| <类型限定符>

<结构说明符列表> :: = <结构说明符>
| <结构说明符列表>“,”<结构说明符>

<结构说明符> :: = <说明符>
| <声明符>“:”<常量表达式>
| “:”<常量表达式>

<声明符> :: = {<指针>}? <直接说明符>

<指针> :: =“*”{<类型限定符>} * {<指针>}?

<类型限定符> :: =“常量”
| “挥发性”

<直接说明符> :: = <标识符>
| “(”<声明符>“)”
| <直接说明符>“[”{<常量表达式>}? “]”
| <直接说明符>“(”<参数类型列表>“)”
| <直接说明符>“(”{<标识符>} *“)”

<常量表达式> :: = <条件表达式>

<条件表达式> :: = <逻辑或表达式>
| <逻辑或表达式>“?” <表达式>“:”<条件表达式>

<逻辑或表达式> :: = <逻辑和表达>
| <逻辑或表达式“||” <逻辑和表达>

<逻辑和表达> :: = <包容性,或表达>
| <逻辑和表达“&&”<包容性,或表达>

<含-或表达式> :: = <异或表达>
| <包容性,或表达>“|” <异或表达>

<异或表达式> :: = <和表达>
| <异或表达>“^”<和表达>

<和表达式> :: = <平等表达>
| <和表达>“&”<平等表达>

<平等表达式> :: = <关系表达式>
| <平等表达>“==”<关系表达式>
| <平等表达>“!=”<关系表达式>

<关系表达式> :: = <移位表达式>
| <关系表达式>“<”<移位表达式>
| <关系表达式>“>”<移位表达式>
| <关系表达式>“<=”<移位表达式>
| <关系表达式>“> =”<移位表达式>

<移位表达式> :: = <添加剂表达>
| <移位表达式>“<<”<添加剂表达>
| <移位表达式>“>>”<添加剂表达>

<添加剂表达式> :: = <乘法表达式>
| <添加剂表达>“+”<乘法表达式>
| <添加剂表达式>“ - ”<乘法表达式>

<乘法表达式> :: = <铸表达>
| <乘法表达式>“*”<投表达式>
| <乘表达>“/”<投表达式>
| <乘法表达式>“%”<投表达式>

<投表达式> :: = <一元表达式>
| “(”<类型名>“),”<铸表达>

<一元表达式> :: = <后缀表达式>
| “++”<一元表达式>
| “ - ”<一元表达式>
| <一元算子> <铸表达>
| “sizeof的”<一元表达式>
| “sizeof的”<类型名称>

<后缀表达式> :: = <主表达式>
| <后缀表达式>“[”<表达式>“]”
| <后缀表达式>“(”{<赋值表达式>} *“)”
| <后缀表达式>“。” <标识符>
| <后缀表达式>“ - >”<标识>
| <后缀表达式>“++”
| <后缀表达式>“ - ”

<基本表达式> :: = <标识符>
| <常数>
| <字符串>
| “(”<表达式>“)”

<常数> :: = <整型常数>
| <字符常量>
| <浮常数>
| <枚举常数>

<表达式> :: = <赋值表达式>
| <表达式>“,”<赋值表达式>

<赋值表达式> :: = <条件表达式>
| <一元表达式> <赋值运算符> <赋值表达式>

<赋值运算符> :: =“=”
| “* =”
| “/ =”
| “%=”
| “+ =”
| “ - =”
| “<< =”
| “>> =”
| “&=”
| “^ =”
| “| =”

<一元操作符> :: =“&”
| “*”
| “+”
| “ - ”
| “〜”
| “!”

<类型名> :: = {<说明限定符>} + {<抽象声明符>}?

<参数类型列表> :: = <参数列表>
| <参数列表>“,”...

<参数列表> :: = <参数声明>
| <参数列表>“,”<参数声明>

<参数声明> :: = {<声明说明符>} + <说明符>
| {<声明说明符>} + <抽象说明符>
| {<声明说明符>} +

<抽象声明符> :: = <指针>
| <指针> <直接抽象说明符>
| <直接抽象说明符>

<直接抽象说明符> :: =(<抽象说明符>)
| {<直接抽象说明符>}? “[”{<常量表达式>}? “]”
| {<直接抽象说明符>}? “(”{<参数类型列表>?|“)”

<枚举说明> :: =“枚举”<标识>“{”<枚举列表>“}”
| “枚举”,“{”<枚举列表>“}”
| “枚举”<标识>

<枚举列表> :: = <枚举>
| <枚举列表>“,”<枚举>

<枚举> :: = <标识符>
| <标识>“=”<常量表达式>

<类型定义名称> :: = <标识符>

<申报> :: = {<声明说明符>} + {<初始化声明符>} *

<初始化声明符> :: = <说明符>
| <声明符>“=”<初始化>

<初始化> :: = <赋值表达式>
| “{”<初始化列表>“}”
| “{”<初始化列表>“,”“}”

<初始化列表> :: = <初始化>
| <初始化列表>“,”<初始化>

<复合语句> :: =“{”{<申报>} * {<语句>} *“}”

<语句> :: = <标记语句>
| <表达式语句>
| <复合语句>
| <选择语句>
| <循环语句>
| <跳转语句>

<标记语句> :: = <标识符>“:”<语句>
| “案例”<常量表达式>“:”<语句>
| “默认”“:”<语句>

<表达式语句> :: = {<表达式>}? “;”

<选择语句> :: =“如果”“(”<表达式>“),”<语句>
| “如果”“(”<表达式>“),”<语句>“其他”<声明>
| “开关”“(”<表达式>“),”<语句>

<循环语句> :: =“,而”“(”<表达式>“),”<语句>
| “做”<语句>“,而”“(”<表达式>“)”“;”
| “为”“(”{<表达式>}?“;”{<表达式>}?“;”{<表达式>}“),”<语句>

<跳转语句> :: =“转到”<标识>“;”
| “继续”“;”
| “破”“;”
| “回归”{<表达式>}? “;”

posted on 2015-10-29 15:52  28刘阳  阅读(161)  评论(0编辑  收藏  举报