c语言语法规则 c99版

c语言语法规则,c99版

词汇语法

词汇元素

 记号:
  关键字
  标识符
  常量
  字符串
  标点符号

 预处理记号:
  头文件名
  标识符
  预处理数
  常量字符
  字符串
  运算符
  非上述范围内的任一非空白字符

关键字
 关键字:其中之一
  auto  break  case  char
  const  continue default do
  double  else  enum  extern
  float  for  goto  if
  inline  int  long  register
  restrict return  short  signed
  sizeof  static  struct  switch
  typedef union  unsigned void
  volatile while  _Bool  _Complex
  _Imaginary

标识符
 标识符:
  非数字标识符
  标识符 非数字标识符
  标识符 数字字符

 非数字标识符:
  非数字字符
  通用字符名
  其它执行字符集定义的字符

 非数字字符:其中之一
  _ a b c d e f g h i j k l m
    n o p q r s t u v w x y z
    A B C D E F G H I J K L M
    N O P Q R S T U V W X Y Z

 数字字符:其中之一
  0 1 2 3 4 5 6 7 8 9
通用字符名

 通用字符名:
  /u hex-quad十六进制四元组
  /U hex-quad hex-quad十六进制四元组 十六进制四元组

 十六进制四元组:
  十六进制数字 十六进制数字
  十六进制数字 十六进制数字

常量
 常量:
  整形常量
  浮点型常量
  枚举型常量
  字符型常量

 整型常量:
  十进制常量 任选的整形后缀
  八进制常量 任选的整形后缀
  十六进制常量 任选的整形后缀

 十进制常量:
  非零数字
  十进制常量 数字

 八进制常量:
  0
  八进制常量 八进制数字

 十六进制常量:
  十六进制前缀 十六进制数字
  十六进制常量 十六进制数字

 十六进制前缀:其中之一
  0x 0X

 非零数字:其中之一
  1 2 3 4 5 6 7 8 9

 八进制数字:其中之一
  0 1 2 3 4 5 6 7

 十六进制数字:其中之一
  0 1 2 3 4 5 6 7 8 9
  a b c d e f
  A B C D E F

 整数后缀:
  无符号后缀 任选的长后缀
  无符号后缀 长长后缀
  长后缀 任选的无符号后缀
  长长后缀 任选的无符号后缀

 无符号后缀:其中之一
  u U

 长后缀:其中之一
  l L

 长长后缀:其中之一
  ll LL

 浮点常量:
  十进制浮点常量
  十六进制浮点常量

 十进制浮点常量:
  小数常量 任选的指数部分  任选的浮点后缀
  数字序列 指数部分 任选的浮点后缀


 十六进制浮点常量:
  十六进制前缀 十六进制小数常量
  二进制指数部分 任选的浮点后缀
  十六进制前缀 十六进制数字序列
  二进制指数部分 任选的浮点后缀

 小数常量:
  数字序列 . 数字序列
  数字序列 .

 指数部分:
   e 任选的正负号  数字序列
   E 任选的正负号  数字序列

 正负号:其中之一
  + -

 数字序列:
  数字
  数字序列 数字

 十六进制小数常量:
  任选的十六进制数字序列  . 十六进制数字序列
  十六进制数字序列 .

 二进制指数部分:
  p 正负号 可选 数字序列
  P 正负号 可选 数字序列

 十六进制数字序列:
  十六进制数字
  十六进制数字序列 十六进制数字

 浮点后缀:其中之一
  f l F L

 枚举常量:
  标识符

 字符常量:
  'c字符序列'
  L'c字符序列'

 c字符序列:
  c 字符
  c字符序列 c字符

 c字符:
  源字符集中除单引号’,反斜线/,或新行字符外的任意字符

 转义序列:
  简单转义序列
  八进制转义序列
  十六进制转义序列
  通用字符名

 简单转义序列:其中之一
  /'  /"  /?  //
  /a  /b  /f  /n  /r  /t  /v

 八进制转义序列:
  / 八进制数字
  / 八进制数字 八进制数字
  / 八进制数字  八进制数字 八进制数字

 十六进制转义序列:
  /x 十六进制数字
  十六进制转义序列 十六进制数字

字符串
 字符串:
  "串字符序列"
  L"串字符序列"

 串字符序列:
  串字符
  串字符序列 串字符

 串字符:
  源字符集中除双引号字符",反斜线/,或新行字符外的任意字符

标点符号
 标点符号:其中之一
  [ ] ( ) { } . ->
  ++ -- & * + - ? !
  / % << >> < > <= >= == != ? | && ||
  ? : ; ...
  = *= /= %= += -= <<= >>= &= ?= |=
  , # ##
  <: :> <% %> %: %:%:
头文件名
 头文件名:
  <标题字符序列>
  "引号内字符序列"

 标题字符序列:
  标题字符
  标题字符序列 标题字符

 标题字符:
  源字符集中除新行字符和>外的任何字符

 引号内字符序列:
  引号内字符
  引号内字符序列 引号内字符

 引号内字符:
  源字符集中除新行字符和"外的任何字符

预处理数
 预处理数:
  数字
  .数字
  预处理数 数字
  预处理数 非数字标识符
  预处理数 e 正负号
  预处理数 E 正负号
  预处理数 p 正负号
  预处理数 P 正负号
  预处理数 .

短语结构语法

表达式

 初等表达式:
  标识符
  常量
  字符串
  ( 表达式 )

 后缀表达式:
  初等表达式
  后缀表达式 [表达式]
  后缀表达式 (任选的实参表达式表)
  后缀表达式 . 标识符
  后缀表达式 -> 标识符
  后缀表达式 ++
  后缀表达式 --
  (类型名) {初始化列表}
  类型名){初始化列表}

 实参表达式表:
  赋值表达式
  参数表达式表 ,赋值表达式

 一元表达式:
  后缀表达式
  ++ 一元表达式
  -- 一元表达式
  一元算符 强制(转换)表达式
  sizeof 一元表达式
  sizeof (类型名)

 一元表达式:其中之一
  & * + - ? !

 强制转换表达式:
  一元表达式
  (类型名) 强制转换表达式
  乘除类表达式:
  强制转换表达式
  乘除类表达式 * 强制(转换)表达式
  乘除类表达式 / 强制(转换)表达式
  乘除类表达式 % 强制(转换)表达式

 加减类表达式:
  乘除类表达式
  加减类表达式 + 乘除类表达式
  加减类表达式 - 乘除类表达式

 移位类表达式:
  加减类表达式
  移位类表达式 << 加减类表达式
  移位类表达式 >> 加减类表达式

 关系表达式:
  移位类表达式
  关系表达式 < 移位类表达式
  关系表达式 > 移位类表达式
  关系表达式 <= 移位类表达式
  关系表达式 >= 移位类表达式

 相等类表达式:
  关系表达式
  相等类表达式==关系表达式
  相等类表达式!=关系表达式

 按位与表达式:
  相等类表达式
  按位与表达式&相等类表达式

 按位异或:
  按位与表达式
  按位异或表达式^按位与表达式

 按位或:
  按位异或表达式
  按位或表达式|按位异或表达式

 逻辑与表达式:
  按位或表达式
  逻辑与表达式 &&按位或表达式

 逻辑或表达式:
  逻辑与表达式
  逻辑或表达式|| 逻辑与表达式

 条件表达式:
  逻辑或表达式
  逻辑或表达式?表达式:条件表达式

 赋值表达式:
  条件表达式
  一元表达式 赋值算符 赋值表达式

 赋值算符:其中之一
  =  *=  /=  %=  +=  -=  <<=  >>=  &=  ?=  |=

 表达式:
  赋值表达式
  表达式, 赋值表达式

 常量表达式:
  条件表达式

声明
 声明:
  声明说明符 任选的初始化声明符列表 ;

 声明说明符:
  存储类说明符 任选的声明说明符
  类型说明符 任选的声明说明符
  类型限定符 任选的声明说明符
  函数说明符 任选的声明说明符

 初始化声明列表:
  初始化声明
  初始化列表, 初始化声明

 初始化声明:
  声明符
  说明符 = 初值符

 存储类说明符:
  typedef extern  static  auto  register

 类型说明符:
  void  char  short  int  long
  float  double  signed  unsigned _Bool
  _Complex _Imaginary 结构或联合说明符  枚举说明符
  自定义类型名

 结构或联合说明符:
  结构或联合关键字 任选的标识符 {结构声明表}
  结构或联合关键字 标识符

 结构或联合关键字:
  struct  union

 结构声明表:
  结构声明
  结构声明表 结构声明

 结构声明:
  说明符—限定符表 结构声明符表;

 说明符-限定符表:
  类型说明符 任选的说明符-限定符表
  类型限定符 任选的说明符-限定符表

 结构声明符表:
  结构声明符
  结构声明符表,结构声明符

 结构声明符:
  声明符
  任选的声明符  :常量表达式

 枚举说明符:
  enum 任选的标识符 {枚举符表}
  enum 任选的标识符 {枚举符表 ,}
  enum 标识符

 枚举符表:
  枚举符
  枚举符表 , 枚举符

 枚举符:
  枚举常量
  枚举常量=常量表达式

 类型限定符:
  const  restrict  volatile

 函数说明符:
  inline

 声明符:
  任选的指针 直接声明符

 直接声明符:
  标识符
  ( 声明符 )
  直接声明符 [ 任选的类型限定符表 任选的赋值表达式 ]
  直接声明符 [ static 任选的类型限定符表 赋值表达式 ]
  直接声明符 [ 类型限定符表 static 赋值表达式 ]
  直接声明符 [ 任选的类型限定符表 *]
  直接声明符 ( 参数类型表 )
  直接声明符 ( 任选的标识符表)

 指针:
  * 任选的类型限定符表
  * 任选的类型限定符表 指针

 类型限定符表: 
  类型限定符
  类型限定符表 类型限定符

 参数类型表:
  参数表
  参数表 ,...

 参数表:
  参数声明
  参数表 ,参数声明

 参数声明:
  声明限定符 声明符
  声明限定符 任选的抽象声明符

 标识符表:
  标识符
  标识符表 ,标识符

 类型名:
  说明符-限定符表 任选的抽象声明符

 抽象声明符:
  指针
  任选的指针 直接抽象声明符

 直接抽象声明符:
  ( 抽象声明符 )
  任选的直接抽象声明符 [ 任选的赋值表达式 ]
  任选的直接抽象声明符 [ * ]
  任选的直接抽象声明符 ( 任选的参数类型表 )

 自定义类型名:
  标识符

 初值符:
  赋值表达式
  { 初值符表 }
  { 初值符表 , }

 初值符表:
  任选的标志 初值符
  初值符表 , 任选的标志 初值符

 标志:
  标志符表 =

 标志符表:
  标志符
  标志符表 标志符

 标志符:
  [ 常量表达式 ]
  . 标识符

语句
 语句:
  标签语句
  复合语句
  表达式语句
  选择语句
  循环语句
  跳转语句

 标签语句:
  标识符: 语句
  cast 常量表达式 :语句
  default :语句

 复合语句:
  { 任选的块条目表 }

 块条目表:
  块条目
  块条目表 块条目

 块条目:
  声明
  语句

 表达式语句:
  任选的表达式;

 选择语句:
  if ( 表达式 ) 语句
  if( 表达式 ) 语句 else 语句
  switch ( 表达式 ) 语句

 循环语句:
  while ( 表达式 ) 语句
  do 语句 while ( 表达式 );
  for( 任选的表达式;任选的表达式;任选的表达式) 语句
  for ( 声明 任选的表达式 ;任选的表达式) 语句

 跳转语句:
  goto 标识符 ;
  continue;
  break;
  return 任选的表达式 ;

外部定义
 转换单元:
  外部声明
  转换单元 外部声明

 外部声明:
  函数定义
  声明

 函数定义:
  声明说明符 声明符 任选的声明表 复合语句

 声明表:
  声明
  声明表 声明

预处理指令
 预处理文件:
  任选的组

 组:
  组件
  组 组件

 组件:
  条件块
  控制行
  文本行
  #非指令行

 条件块:
  条件组 任选的多重嵌套条件组 任选的否则组 条件终行

 条件组:
  # if 常量表达式 新行 任选的组
  # ifdef 标识符 新行 任选的组
  # ifndef 标识符 新行 任选的组

 多重嵌套条件组 :
  嵌套条件组
  多重嵌套条件组 嵌套条件组

 嵌套条件组 :
  # elif 常量表达式 新行 任选的组

 否则组:
  # else 新行 任选的组

 条件终行:
  # endif 新行

 控制行:
  # include 预处理记号串 新行
  # define 标识符 替换表 新行
  # define 标识符 左括号 任选的标识符表 ) 替换表 新行
  # define 标识符 左括号 ... ) 替换表 新行
  # define 标识符 左括号 标识符表 ,... ) 替换表 新行
  # undef 标识符 新行
  # line 预处理记号串 新行
  # error 任选的预处理记号串 新行
  # pragma 任选的预处理记号串 新行
  # 新行

 文本行:
   任选的预处理记号串 新行

 非指令:
  预处理记号 新行

 左括号:
  不带前导空白类字符的左圆括号(

 替换表:
  任选的预处理记号串

 预处理记号串:
  预处理记号
  预处理记号串 预处理记号
 新行:
  新行字

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值