程式à
外部_聲明
| 程式外部_聲明
外部_聲明 à
功能_定義
| 聲明
功能_定義 à 類型_說明聲明符 複合_聲明
類型_說明à
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_目錄抽象_聲明符
抽象_聲明符 à
指針
| 直接_抽象_聲明符
| 指針 直接_抽象_聲明符
直接_抽象_聲明符 à
'('
抽象_聲明符 ')'
| '[' ']'
| '[' 常數_表達 ']'
| 直接_抽象_聲明符 '[' ']'
| 直接_抽象_聲明符 '[' 常數_表達 ']'
| '(' ')'
| '(' 參數_類型_目錄')'
| 直接_抽象_聲明符 '(' ')'
| 直接_抽象_聲明符 '(' 參數_類型_目錄')'
辨別_聲明 à
辨別符 ':' 聲明
| 案例 常數_表達 ':' 聲明
| 預設 ':' 聲明