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