语言文法2

程序à

       外部_声明

      | 程序外部_声明

 

外部_声明 à

      功能_定义

      | 声明

     

功能_定义 à 类型_说明声明符 复合_声明

 

类型_说明à

      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_目录抽象_声明符

     

抽象_声明符 à

       指针

      | 直接_抽象_声明符

      | 指针 直接_抽象_声明符

     

直接_抽象_声明符 à

       '(' 抽象_声明符 ')'

      | '[' ']'

      | '[' 常数_表达 ']'

      | 直接_抽象_声明符 '[' ']'

      | 直接_抽象_声明符 '[' 常数_表达 ']'

      | '(' ')'

      | '(' 参数_类型_目录')'

      | 直接_抽象_声明符 '(' ')'

      | 直接_抽象_声明符 '(' 参数_类型_目录')'

     

标识_声明 à

       标识符 ':' 声明

      | 案例 常数_表达 ':' 声明

      | 默认 ':' 声明

      

posted @ 2015-10-29 17:46  36郭志豪  阅读(177)  评论(6编辑  收藏  举报