翻译单元 : 外部声明
| 翻译单元 外部声明
;
外部声明 : 函数定义
| 声明
;
函数定义 : 特定声明 声明器 声明列表 复合状态
| 声明器 声明列表 复合状态
| 特定声明 声明器 复合状态
| 声明器 复合状态
;
声明 : 特定声明 初化声明器列表 ';'
| 特定声明 ';'
;
声明列表 : 声明
| 声明列表 声明
;
特定声明 : 特殊存储类 特定声明
| 特殊存储类
| 特殊类型 特定声明
| 特殊类型
| 有资格类型 特定声明
| 有资格类型
;
特殊存储类 : '动' | '注册' | '静' | '外' | '又'
;
特殊类型 : '空' | '符' | '短' | '整' | '长' | '浮'
| '双精' | '整' | '正'
| 特殊构或联
| 特殊枚
| 又名
;
有资格类型 : '常' | '易失'
;
特殊构或联 : 构或联 标识 '{' 构声明列表 '}'
| 构或联 '{' 构声明列表 '}'
| 构或联 标识
;
构或联 : '构' | '联'
;
构声明列表 : 构声明
| 构声明列表 构声明
;
初化声明器列表: 初化声明器
| 初化声明器列表 ',' 初化声明器
;
初化声明器 : 声明器
| 声明器 '=' 初化器
;
构声明 : 特殊有资格列表 构声明器列表 ';'
;
特殊有资格列表: 特殊类型 特殊有资格列表
| 特殊类型
| 有资格类型 特殊有资格列表
| 有资格类型
;
构声明器列表: 构声明器
| 构声明器列表 ',' 构声明器
;
构声明器 : 声明器
| 声明器 ':' 常式
| ':' 常式
;
特殊枚 : '枚' 标识 '{' 枚举器列表 '}'
| '枚' '{' 枚举器列表 '}'
| '枚' 标识
;
枚举器列表 : 枚举器
| 枚举器列表 ',' 枚举器
;
枚举器 : 标识
| 标识 '=' 常式
;
声明器 : 指针 直接声明器
| 直接声明器
;
直接声明器 : 标识
| '(' 声明器 ')'
| 直接声明器 '[' 常式 ']'
| 直接声明器 '[' ']'
| 直接声明器 '(' 参数类型列表 ')'
| 直接声明器 '(' 标识列表 ')'
| 直接声明器 '(' ')'
;
指针 : '*' 类型有资格列表
| '*'
| '*' 类型有资格列表 指针
| '*' 指针
;
类型有资格列表 : 有资格类型
| 类型有资格列表 有资格类型
;
参数类型列表: 参数列表
| 参数列表 ',' '...'
;
参数列表 : 参数声明
| 参数列表 ',' 参数声明
;
参数声明 : 特定声明 声明器
| 特定声明 抽象声明器
| 特定声明
;
标识列表 : 标识
| 标识列表 ',' 标识
;
初化器 : 赋值式
| '{' 初化列表 '}'
| '{' 初化列表 ',' '}'
;
初化列表 : 初化器
| 初化列表 ',' 初化器
;
类型名 : 特殊有资格列表 抽象声明器
| 特殊有资格列表
;
抽象声明器 : 指针
| 指针 直接抽象声明器
| 直接抽象声明器
;
直接抽象声明器: '(' 抽象声明器 ')'
| 直接抽象声明器 '[' 常式 ']'
| '[' 常式 ']'
| 直接抽象声明器 '[' ']'
| '[' ']'
| 直接抽象声明器 '(' 参数类型列表 ')'
| '(' 参数类型列表 ')'
| 直接抽象声明器 '(' ')'
| '(' ')'
;
又名 : 标识
;
状态 : 标签状态
| 状态式
| 复合状态
| 选择状态
| 状态步
| 跳状态
;
标签状态 : 标识 ':' 状态
| '若' 常式 ':' 状态
| '默认' ':' 状态
;
状态式 : 式 ';'
| ';'
;
复合状态 : '{' 声明列表 状态列表 '}'
| '{' 状态列表 '}'
| '{' 声明列表 '}'
| '{' '}'
;
状态列表 : 状态
| 状态列表 状态
;
选择状态 : '如' '(' 式 ')' 状态
| '如' '(' 式 ')' 状态 '异' 状态
| '开关' '(' 式 ')' 状态
;
状态步 : '当' '(' 式 ')' 状态
| '干' 状态 '当' '(' 式 ')' ';'
| '对' '(' 式 ';' 式 ';' 式 ')' 状态
| '对' '(' 式 ';' 式 ';' ')' 状态
| '对' '(' 式 ';' ';' 式 ')' 状态
| '对' '(' 式 ';' ';' ')' 状态
| '对' '(' ';' 式 ';' 式 ')' 状态
| '对' '(' ';' 式 ';' ')' 状态
| '对' '(' ';' ';' 式 ')' 状态
| '对' '(' ';' ';' ')' 状态
;
跳状态 : '至' 标识 ';'
| '下' ';'
| '断' ';'
| '中' 式 ';'
| '中' ';'
;
式 : 赋值式
| 式 ',' 赋值式
;
赋值式 : 条件式
| 一元式 赋值符号 赋值式
;
赋值符号 : '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<='
| '>>=' | '&=' | '^=' | '|='
;
条件式 : 逻辑或式
| 逻辑或式 '?' 式 ':' 条件式
;
常式 : 条件式
;
逻辑或式 : 逻辑和式
| 逻辑或式 '||' 逻辑和式
;
逻辑和式 : 包含或式
| 逻辑和式 '&&' 包含或式
;
包含或式 : 独占或式
| 包含或式 '|' 独占或式
;
独占或式 : 和式
| 独占或式 '^' 和式
;
和式 : 等式
| 和式 '&' 等式
;
等式 : 关系式
| 等式 '==' 关系式
| 等式 '!=' 关系式
;
关系式 : 转移式
| 关系式 '<' 转移式
| 关系式 '>' 转移式
| 关系式 '<=' 转移式
| 关系式 '>=' 转移式
;
转移式 : 加式
| 转移式 '<<' 加式
| 转移式 '>>' 加式
;
加式 : 乘式
| 加式 '+' 乘式
| 加式 '-' 乘式
;
乘式 : 转换式
| 乘式 '*' 转换式
| 乘式 '/' 转换式
| 乘式 '%' 转换式
;
转换式 : 一元式
| '(' 类型名 ')' 转换式
;
一元式 : 后缀式
| '++' 一元式
| '--' 一元式
| 一元符号 转换式
| '的大小' 一元式
| '的大小' '(' 类型名 ')'
;
一元符号 : '&' | '*' | '+' | '-' | '~' | '!'
;
后缀式 : 主式
| 后缀式 '[' 式 ']'
| 后缀式 '(' 实参式列表 ')'
| 后缀式 '(' ')'
| 后缀式 '.' 标识
| 后缀式 '->' 标识
| 后缀式 '++'
| 后缀式 '--'
;
主式 : 标识
| 常
| 串
| '(' 式 ')'
;
实参式列表 : 赋值式
| 实参式列表 ',' 赋值式
;
常 : 常整
| 常符
| 常浮
| 常枚
;