语言文法

<翻译单元> --> {<外部声明>} *

 

<外部声明> --> <函数定义>

| <申报>

 

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

 

<声明说明符> --> <存储类说明符>

| <类型说明符>

| <类型限定符>

 

<存储类说明符> -->“自动”

| “注册”

| “静”

| “外部”

| “类型定义”

 

<类型说明符> -->“无效”

| “字符”

| “短”

| “INT”

| “长”

| “浮动”

| “双节”

| “签约”

| “符号”

| <结构-或工会说明符>

| <枚举符>

| <类型定义名称>

 

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

| <结构-或工会>“{”{<结构声明>} +“}”

| <结构-或工会> <标识符>

 

<结构-或工会> -->“结构”

| “联盟”

 

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

 

<说明限定符> --> <类型说明符>

| <类型限定符>

 

<结构说明符列表> --> <结构说明符>

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

 

<结构说明符> --> <说明符>

| <声明符>“:”<常量表达式>

| “:”<常量表达式>

 

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

 

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

 

<类型限定符> -->“常量”

| “挥发性”

 

<直接说明符> --> <标识符>

| “(”<声明符>“)”

| <直接说明符>“[”{<常量表达式>}? “]”

| <直接说明符>“(”<参数类型列表>“)”

| <直接说明符>“(”{<标识符>} *“)”

 

<常量表达式> --> <条件表达式>

 

<条件表达式> --> <逻辑或表达式>

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

 

<逻辑或表达式> --> <逻辑和表达>

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

 

<逻辑和表达> --> <包容性,或表达>

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

 

<含-或表达式> --> <异或表达>

| <包容性,或表达>“|” <异或表达>

 

<异或表达式> --> <和表达>

| <异或表达>“^”<和表达>

 

<和表达式> --> <平等表达>

| <和表达>“&”<平等表达>

 

<平等表达式> --> <关系表达式>

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

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

 

<关系表达式> --> <移位表达式>

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

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

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

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

 

<移位表达式> --> <添加剂表达>

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

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

 

<添加剂表达式> --> <乘法表达式>

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

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

 

<乘法表达式> --> <铸表达>

| <乘法表达式>“*”<投表达式>

| <乘表达>“/”<投表达式>

| <乘法表达式>“%”<投表达式>

 

<投表达式> --> <一元表达式>

| “(”<类型名>“),”<铸表达>

 

<一元表达式> --> <后缀表达式>

| “++”<一元表达式>

| “ - ”<一元表达式>

| <一元算子> <铸表达>

| “sizeof的”<一元表达式>

| “sizeof的”<类型名称>

 

<后缀表达式> --> <主表达式>

| <后缀表达式>“[”<表达式>“]”

| <后缀表达式>“(”{<赋值表达式>} *“)”

| <后缀表达式>“。” <标识符>

| <后缀表达式>“ - >”<标识>

| <后缀表达式>“++”

| <后缀表达式>“ - ”

 

<基本表达式> --> <标识符>

| <常数>

| <字符串>

| “(”<表达式>“)”

 

<常数> --> <整型常数>

| <字符常量>

| <浮常数>

| <枚举常数>

 

<表达式> --> <赋值表达式>

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

 

<赋值表达式> --> <条件表达式>

| <一元表达式> <赋值运算符> <赋值表达式>

 

<赋值运算符> -->“=”

| “* =”

| “/ =”

| “%=”

| “+ =”

| “ - =”

| “<< =”

| “>> =”

| “&=”

| “^ =”

| “| =”

 

<一元操作符> -->“&”

| “*”

| “+”

| “ - ”

| “〜”

| “!”

 

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

 

<参数类型列表> --> <参数列表>

| <参数列表>“,”...

 

<参数列表> --> <参数声明>

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

 

<参数声明> --> {<声明说明符>} + <说明符>

| {<声明说明符>} + <抽象说明符>

| {<声明说明符>} +

 

<抽象声明符> --> <指针>

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

| <直接抽象说明符>

 

<直接抽象说明符> -->(<抽象说明符>)

| {<直接抽象说明符>}? “[”{<常量表达式>}? “]”

| {<直接抽象说明符>}? “(”{<参数类型列表>?|“)”

 

<枚举说明> -->“枚举”<标识>“{”<枚举列表>“}”

| “枚举”,“{”<枚举列表>“}”

| “枚举”<标识>

 

<枚举列表> --> <枚举>

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

 

<枚举> --> <标识符>

| <标识>“=”<常量表达式>

 

<类型定义名称> --> <标识符>

 

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

 

<初始化声明符> --> <说明符>

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

 

<初始化> --> <赋值表达式>

| “{”<初始化列表>“}”

| “{”<初始化列表>“,”“}”

 

<初始化列表> --> <初始化>

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

 

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

 

<语句> --> <标记语句>

| <表达式语句>

| <复合语句>

| <选择语句>

| <循环语句>

| <跳转语句>

 

<标记语句> --> <标识符>“:”<语句>

| “案例”<常量表达式>“:”<语句>

| “默认”“:”<语句>

 

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

 

<选择语句> -->“如果”“(”<表达式>“),”<语句>

| “如果”“(”<表达式>“),”<语句>“其他”<声明>

| “开关”“(”<表达式>“),”<语句>

 

<循环语句> -->“,而”“(”<表达式>“),”<语句>

| “做”<语句>“,而”“(”<表达式>“)”“;”

| “为”“(”{<表达式>}?“;”{<表达式>}?“;”{<表达式>}“),”<语句>

 

<跳转语句> -->“转到”<标识>“;”

| “继续”“;”

| “破”“;”

| “回归”{<表达式>}? “;”

posted @ 2015-10-29 16:03  36郭志豪  阅读(174)  评论(0编辑  收藏  举报