程序à
外部_声明
| 程序外部_声明
外部_声明 à
功能_定义
| 声明
功能_定义 à 类型_说明声明符 复合_声明
类型_说明à
VOID
| CHAR
| INT
| FLOAT
声明符
指针 直接_声明符
| 直接_声明符
指针à
'*'
| '*' 指针
直接_声明符
标识符
|直接_声明符’[‘ ‘]’
|直接_声明符 ’[’ 常数_表达 ’]’
| 标识符 '(' 参数_目录')'
| 标识符 '(' ')'
|直接_声明符 ‘,’ 标识符_目录
标识符_目录
: 标识符
| 标识符_目录',' 标识符
常数_表达à
条件_表达
参数_目录à
参数_声明
| 参数_目录',' 参数_声明
参数_声明 à
声明_符 标识符
复合_声明 à
'{' '}'
| '{' 声明_目录'}'
| '{' 声明_目录声明_目录'}'
声明_目录à
声明
| 声明_目录声明
声明à
初始化_声明符
| 初始化_声明符_目录',' 初始化_声明符
初始化_声明符 à
声明符
| 声明符 '=' 初始化
初始化 à
分配_表达
| '{' 初始化_目录'}'
| '{' 初始化_目录',' '}'
初始化_目录à
初始化
| 初始化_目录',' 初始化
声明_目录à
声明
| 声明_目录声明
声明 à
| 复合_声明
| 表达_声明
| 选择_声明
| 迭代_声明
| 跳转_声明
表达_声明 à
';'
| 表达 ';'
选择_声明
: 假设 '(' 表达 ')' 声明
| 假设 '(' 表达 ')' 声明 否则 声明
迭代_声明à
当 '(' 表达 ')' 声明
| F或 '(' 表达_声明 表达_声明 ')' 声明
| F或 '(' 表达_声明 表达_声明 表达 ')' 声明
跳转_声明
| CONTINUE ';'
| BREAK ';'
| RETURN ';'
| RETURN 表达 ';'
表达
: 分配_表达
| 表达 ',' 分配_表达
分配_表达 à
条件_表达
| 一元_表达 分配_操作分配_表达
条件_表达 à
逻辑_或_表达
| 逻辑_或_表达 '?' 表达 ':' 条件_表达
逻辑_或_表达 à
逻辑_和_表达
| 逻辑_或_表达 或_OP 逻辑_和_表达
逻辑_和_表达
: 含_或_表达
| 逻辑_和_表达 和_OP 含_或_表达
含_或_表达à
异_或_表达
| 含_或_表达 '|' 异_或_表达
异_或_表达
: 和_表达
| 异_或_表达 '^' 和_表达
和_表达
: 平等_表达
| 和_表达 '&' 平等_表达
平等_表达
: 关系_表达
| 平等_表达 EQ_OP 关系_表达
| 平等_表达 NE_OP 关系_表达
关系_表达
: sh假设t_表达
| 关系_表达 '<' sh假设t_表达
| 关系_表达 '>' sh假设t_表达
| 关系_表达 LE_OP sh假设t_表达
| 关系_表达 GE_OP sh假设t_表达
sh假设t_表达
: 添加_表达
| sh假设t_表达 LEFT_OP 添加_表达
| sh假设t_表达 RIGHT_OP 添加_表达
添加_表达
: 乘法_表达
| 添加_表达 '+' 乘法_表达
| 添加_表达 '-' 乘法_表达
乘法_表达
: 投_表达
| 乘法_表达 '*' 投_表达
| 乘法_表达 '/' 投_表达
| 乘法_表达 '%' 投_表达
投_表达
: 一元_表达
| '(' 类型_名')' 投_表达
一元_表达
: 后缀_表达
| INC_OP 一元_表达
| DEC_OP 一元_表达
| 一元_操作投_表达
| SIZEOF 一元_表达
| SIZEOF '(' 类型_名')'
后缀_表达 à
: 基本_表达
| 后缀_表达 '[' 表达 ']'
| 后缀_表达 '(' ')'
| 后缀_表达 '(' 赋值_表达_目录')'
| 后缀_表达 '.' 标识符
| 后缀_表达 PTR_OP 标识符
| 后缀_表达 INC_OP
| 后缀_表达 DEC_OP
基本_表达 à
标识符
| 常数
| 字符串
| '(' 表达 ')'
赋值_表达_目录
: 分配_表达
| 赋值_表达_目录',' 分配_表达
一元_operat或
: '&'
| '*'
| '+'
| '-'
| '~'
| '!'
分配_操作à
'='
| MUL_ASSIGN
| DIV_ASSIGN
| MOD_ASSIGN
| ADD_ASSIGN
| SUB_ASSIGN
| LEFT_ASSIGN
| RIGHT_ASSIGN
| 和_ASSIGN
| X或_ASSIGN
| 或_ASSIGN
st或age_class_说明à
类型DEF
| EXTERN
| STATIC
| AUTO
| REGISTER
struct_或_union_spec假设ier
: struct_或_union 标识符 '{' struct_声明_目录'}'
| struct_或_union '{' struct_声明_目录'}'
| struct_或_union 标识符
struct_或_union
: STRUCT
| UNION
struct_声明_目录
: struct_声明
| struct_声明_目录struct_声明
struct_声明
: spec假设ier_qual假设ier_目录struct_声明符_目录';'
spec假设ier_qual假设ier_目录à
类型_说明spec假设ier_qual假设ier_目录
| 类型_spec假设ier
| 类型_qual假设ier spec假设ier_qual假设ier_目录
| 类型_qual假设ier
struct_声明符_目录à
struct_声明符
| struct_声明符_目录',' struct_声明符
struct_声明符 à
: 声明符
| ':' 常数_表达
| 声明符 ':' 常数_表达
enum_说明à
ENUM '{' enumerat或_目录'}'
| ENUM 标识符 '{' enumerat或_目录'}'
| ENUM 标识符
enumerat或_目录à
enumerat或
| enumerat或_目录',' enumerat或
Enumerat或 à
标识符
| 标识符 '=' 常数_表达
类型_qual假设ier à
CONST
| VOLATILE
类型_qual假设ier_目录à
类型_qual假设ier
| 类型_qual假设ier_目录类型_qual假设ier
参数_类型_目录à
参数_目录
| 参数_目录',' ELLIPSIS
参数_目录à
: 参数_声明
| 参数_目录',' 参数_声明
类型_名à
spec假设ier_qual假设ier_目录
| spec假设ier_qual假设ier_目录抽象_声明符
抽象_声明符 à
指针
| 直接_抽象_声明符
| 指针 直接_抽象_声明符
直接_抽象_声明符 à
'(' 抽象_声明符 ')'
| '[' ']'
| '[' 常数_表达 ']'
| 直接_抽象_声明符 '[' ']'
| 直接_抽象_声明符 '[' 常数_表达 ']'
| '(' ')'
| '(' 参数_类型_目录')'
| 直接_抽象_声明符 '(' ')'
| 直接_抽象_声明符 '(' 参数_类型_目录')'
标识_声明 à
标识符 ':' 声明
| 案例 常数_表达 ':' 声明
| 默认 ':' 声明