<程序> -> <外部声明> | <程序> <外部声明>

<外部声明> -> <函数定义> | <声明>

<函数定义> -> <类型说明> <声明符> <复合语句>

<类型说明> -> <void> | <char> | <int>|<float>

<声明> ->  <指针>  <直接说明符>  |  <直接说明符>

<指针> -> <*> | <*指针>

<直接说明符> -> <标识符>  | <直接说明符  ‘[‘  ‘]‘> | <直接标识符‘[‘ 恒表达‘]‘> | <标识符‘(‘ 参数名单 ‘)‘> | <标识符‘(‘ ‘)‘> | <直接说明符 ‘;‘ 识别名单>

<识别名单> -> <标识符> |  <识别名单 ‘;‘ 标识符>

<恒表达式> -> <恒表达式>

<参数名单> -> <参数声明> | <参数名单 ‘;‘ 参数声明>

<参数声明>-><‘说明符‘ ‘声明‘ ‘标识符‘>

<复合语句>-> <‘{‘ ‘}‘> | <‘{‘语句列表‘}‘> | <‘{‘声明‘ ‘语句列表‘ ‘}‘>

<声明_列表> -> <识别符> | <识别名单 识别符>

<识别符> -> <初始化标别符> |<初始化标识符 ‘,‘ 初始化标识符>

<初始化标识符> -> <标识符> | <标识符 ‘=‘ 初始化器>

<初始化器> -> <赋值表达式> | <‘{‘  初始化列表 ‘}‘> | <‘{‘ 初始化列表 ‘,‘ ‘}‘>

<初始化列表> -> <初始化>| <初始化列表 ‘,‘ 初始化器>

<语句表> -> <语句> | <语句表 语句>

<语句> -> |<复合语句> |<表达式语句>|<选择语句>|<迭代语句>|<跳转语句>

<表达式语句> -> -><表达式 ‘;‘>

<选择语句> :if< ‘(‘ 表达式‘)‘ 语句> | if <‘(‘ 表达式 ‘)‘ 语句 else语句 >

<迭代语句> -> while< ‘(‘ 表达式 ‘)‘ 语句 >| for‘(‘ 表达语句 表达语句 ‘)‘ 语句 | for‘(‘ 表达语句 表达语句 表达式 ‘)‘ 语句

<跳转语句> -> <continue>|<break>|<return>|<return 表达式>

<表达式> -> <赋值表达式>|<表达式,赋值表达式>

<赋值表达式> -><条件表达式>|<一元表达式赋值运算符  赋值表达式>

<条件表达式> -> <逻辑或表达>|<逻辑或表达‘?‘ 表达式 ‘:‘条件表达式>

<逻辑或表达> -><逻辑与表达> |<逻辑或表达或运算逻辑表达式>

<逻辑与表达> -><或运算表达式>|< 逻辑表达式和运算或表达式>

<或运算表达式> -><异或表达式>|<或运算表达式 ‘|‘ 异或表达式>

<异或表达式> :<与表达式> | <异或表达式‘^‘与表达式>

<与表达式> :<相等表达式>|<与表达式‘&‘相等表达式>

<相等表达式> :<关系表达式> |< 相等表达式等于运算关系表达式> |< 相等表达式不等于运算关系表达式>

<关系表达式> :<移位表达式>|<关系表达式‘<‘移位表达式>|<关系表达式‘>‘移位表达式 >|< 关系表达式小于等于运算移位表达式>|<关系表达式大于等于运算移位表达式>

<移位表达式> :<加法表达式> |< 移位表达式左运算加法表达式 > |< 移位表达式右运算加法表达式>

<加法表达式> :<乘法表达式> | <加法表达式‘+‘乘法表达式 >|< 加法表达式‘-‘乘法表达式>

<乘法表达式> :<强制转换表达式> | <乘法表达式‘*‘强制转换表达式> | <乘法表达式‘/‘强制转换表达式> |<乘法表达式‘%‘强制转换表达式>

<强制转换表达式> :<一元表达式 > | < ‘(‘ 类型名称 ‘)‘强制转换表达式>

<一元表达式> <后缀表达式>|< inc运算一元表达式>|< dec运算一元表达式>|< 一元运算符将表达式>| <结构体变量的一元表达式>| <结构体变量的‘(‘ 类型名称 ‘)‘>

<后缀表达式> :<基本表达式> | <后缀表达式‘[‘表达式‘]‘> | <后缀表达式‘(‘ ‘) >|<后缀表达式 ‘(‘参数表达式列表‘)‘  >|< 后缀表达式‘.‘ 标识符 >| <后缀表达式指针运算标识符 >| <后缀表达式inc运算 >| <后缀表达式dec运算>

<基本表达式> -> <标识符> |< 常量>|< 字符串常量> |< ‘(‘表达式‘)‘>

<参数表达式列表> : <赋值表达式>| <参数表达式列表‘,‘赋值表达式>

<一元运算符> :< ‘&‘>  | < ‘*‘ > |  <‘+‘ > | < ‘-‘>  | < ‘~‘>  | < ‘!‘>

<赋值运算符> -> <‘=‘ > |< 乘法分配> |< div分配>| <mod分配> | <加法分配>  |  <sub分配 > |< 左分配> | <右分配> |< 与分配> |< 异或分配> |< 或分配>

<存储类说明符> -> <定义类型> |< 外部变量> | <静态 > |< 自动>  |< 寄存器>

<结构或联合说明符> :<结构或联合标识符‘{‘结构体声明列表‘}‘ > | <结构或联合‘{‘结构体声明列表‘}‘  >|< 结构或联合标识符>

<结构或联合> :<结构体> |< 联合>

<结构体声明列表> <结构体声明> |< 结构体声明结构体声明列表>

<结构体声明> :<说明符限定符列表结构说明符‘;‘说明符->类型说明符说明符限定符列表 >| <类型说明符 >| <类型限定符说明符限定符列表> |< 类型限定符>

<结构说明符列表> -> <结构体声明>| <结构说明符列表‘,‘结构体声明>

<结构体声明> -> :<声明> |<  ‘:‘常量表达式>|< 声明‘:‘常量表达式>

<枚举声明> -> <枚举‘{‘枚举器列表‘}‘ >| <枚举标识符‘{‘枚举器列表‘}‘ > |< 枚举标识符>

<枚举器列表> -> <枚举器> |< 枚举器列表‘,‘枚举器>

<枚举器> -> <标识符> |< 标识符‘=‘常量表达式>

<类型限定符> -> <常量> |< 易失的>

<类型限定符列表> -> <类型限定符> |< 类型限定符列表  类型限定符>

<参数类型列表> -> <参数列表> |< 参数列表‘,‘省略符号>

<参数列表> -> <声明参数> | <参数列表‘,‘声明参数>

<类型名称> -> <限定说明符列表> |< 限定符抽象说明符列表>

<抽象说明符> -> <指针> |<直接抽象说明符> |< 指针直接抽象说明符>

<直接抽象说明符> -> <‘(‘ 抽象说明符 ‘)‘ >| <‘[‘ ‘]‘  |  ‘[‘ 常量表达式‘]‘>| <直接抽象说明符‘[‘ ‘]‘ > | <直接抽象说明<符‘[‘ 常量表达式 ‘]‘ > | < ‘(‘ ‘)‘  |  ‘(‘参数类型列表‘)‘ >|< 直接抽象说明符‘(‘ ‘)‘> | <直接抽象说明符‘(‘参数类型列表‘)‘>

<有标号语句> -> <标识符‘:‘语句> | <case常量表达式‘:‘语句>  | < default‘:‘语句>

1014 C语言文法的更多相关文章

  1. 1014 C语言文法定义与C程序的推导过程 程序:冒泡算法C程序(语法树)

    阅读并理解提供给大家的C语言文法文件. 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 给出一段C程序,画出用上述文法产生这段C程序的完整语法树. 程序:冒泡算法C程序 点此文字查看原图 ...

  2. 1014 C语言文法定义

    <程序>→<外部声明>|<程序><外部声明><外部声明>→<函数定义>|<声明><函数定义>→<数 ...

  3. 1014 C语言文法定义与C程序的推导过程

    <程序> -> <外部声明> | <程序> <外部声明> <外部声明> -> <函数定义> | <声明> ...

  4. 1106 1014 C语言文法定义与C程序的推导过程 冒泡程序语法树

  5. C语言文法

    C语言文法 源程序 → 外部声明 | 子程序(外部声明) 外部声明   → 函数定义| 函数声明 函数定义 → 类型标识符(复合句) 标识符类型 → 无类型 | 字符型 | 整型 | 浮点型 整型→ ...

  6. 1029 C语言文法定义与C程序的推导过程

    1 阅读并理解提供给大家的C语言文法文件. 2 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 3 给出一段C程序,写出用上述文法产生这段C程序的推导过程. program → exte ...

  7. 1014 我的C语言文法定义与C程序推导过程

    程序> -> <外部声明> | <程序> <外部声明> <外部声明> -> <函数定义> | <声明> < ...

  8. 我的mini_c语言文法设计

    //这个文件主要是用来描述当前源语言的词法结构和语法结构 //当前语言是c语言的一个子集,因此里面所有的描述大家都很熟悉 //注意,当前语言并不支持预处理,因为c预处理比较复杂,而且楼主能力低下,因此 ...

  9. 消除左递归c语言文法

    <程序> -〉 <外部声明> | <函数定义><外部声明> -〉<头文件> | <变量> | <结构体> <头 ...

随机推荐

  1. 解决修改重命名sql Server数据库名称

    错误: 消息 5030,级别 16,状态 2,第 1 行无法用排他锁锁定该数据库,以执行该操作. 解决方法:(原理一样) 1.将数据库设置为单用户模式 (单用户模式指定一次只有一个用户可访问数据库,该 ...

  2. Java的锁优化

    高效并发是从JDK 1.5到JDK 1.6的一个重要改进,HotSpot虚拟机开发团队在这个版本上花费了大量的精力去实现各种锁优化技术,如适应性自旋(Adaptive Spinning).锁消除(Lo ...

  3. Xamarin如何生成Android项目的APK

    Xamarin如何生成Android项目的APK 首先需要选择Release模式生成项目.然后从“生成”菜单中选择Export Android Package命令,就可以导出APK包.APK保存在An ...

  4. 吃豆子(Packman)

    ZLYD团队总结--吃豆子(Packman) 一.设计主要内容 玩家可以通过键盘或鼠标控制游戏区.游戏采取分数和血量制,当血量用尽时游戏结束,游戏以最终玩家获得的分数来判断玩家水平的高低.使用IEDA ...

  5. Leetcode 第一遍刷完

    2014/10/15 Leetcode第一刷总算结束,时间拖太长了,希望第二遍能快一点,争取一个月能刷完第二遍??哈哈哈哈

  6. CSS一些总结

    1. display block:块元素,默认宽度为100%,可以设置元素的宽高,默认占满一行.块元素包括div,h1-h6,form,table,ul,ol等: inline:行内元素,默认宽度为内 ...

  7. CentOS 下安装python 之MySQLdb

    yum -y install mysql-devwget http://downloads.sourceforge.net/project/mysql-python/mysql-python-test ...

  8. tableviewCell折叠状态3

    // //  LHQDelegateModel.h //  11 - 投资管理 - 李洪强 // //  Created by vic fan on 16/4/13. //  Copyright © ...

  9. imread() not working in OpenCV 2.4.11 Debug mode

    The OpenCV function imread() not working in OpenCV 2.4.11 Debug mode of VS2010 under Win32, the way ...

  10. sqlmap我常用到的几个参数

    -r "抓的包存放的文件路径.txt"    一般方便带cookie与session类型 --dbms Oracle/Mysql     指定数据库类型 指定变量注入点变量:在变量 ...