C语言文法
C语言文法
源程序 → 外部声明 | 子程序(外部声明)
外部声明 → 函数定义| 函数声明
函数定义 → 类型标识符(复合句)
标识符类型 → 无类型 | 字符型 | 整型 | 浮点型
整型→ 长整型 | 短整型 | 无符号整型
声明→ 指针直接声明| 直接声明
指针 → * | * 指针
直接声明→ 标识符| 直接声明[ ]| 直接声明[常量表达式]| 标识符(参数列表)| 标识符() | (直接声明 , 标识符列表)
标识符列表→标识符 | (标识符列表 ,标识符)
常数表达式→ 条件表达式
参数列表→ 参数声明| (参数列表 ,参数声明)
参数声明→ 说明符声明,标识符
复合语句 → { } | { 语句列表 } | { 声明列表 语句列表 }
声明列表→ 声明 | 声明列表 声明
声明→初始化声明| (初始化声明列表 ,初始化声明)
初始化声明 → 声明| 声明=初始化程序
初始化程序 → 表达式 | {初始化程序列表} | {初始化程序列表 , }
初始化程序列表 → 初始化程序 | (初始化程序列表 , 初始化程序)
语句列表→ 语句| 语句列表
语句→语句| 复合语句 | 表达式语句 | 选择语句|循环语句|跳转语句
表达式语句→ 表达式;
选择语句→ IF(表达式)语句| IF(表达式)语句 | ELSE 语句
循环语句→ WHILE(表达式)语句 | FOR(表达式语句;表达式语句)| FOR(表达式语句;表达式语句;表达式语句)
跳转语句| continue; |breack; | return; | return 表达式;
表达式→赋值表达式|(表达式, 赋值表达式)
赋值表达式→条件表达式|一元表达式 (赋值操作符)赋值表达式
条件表达式 → 逻辑‘或’表达式|逻辑‘或’表达式?表达式:条件表达式
逻辑‘或’表达式→逻辑‘与’表达式 |逻辑‘或’表达式‘或’运算|逻辑‘与’表达式
逻辑‘与’表达式→ 逻辑‘或’表达式|逻辑‘与’表达式‘与’运算(逻辑‘或’表达式)
或运算表达式→异或表达式 |或运算表达式‘|异或表达式
相等表达式→关系表达式|相等表达式 等于运算 关系表达式| 相等表达式 不等于运算 关系表达式
关系表达式→替换表达式|关系表达式 替换表达式|关系表达式 替换表达式| 关系表达式<=替换表达式| <关系表达式>=替换表达式
替换表达式→加法表达式| 减法表达式| 乘法表达式
加法表达式→乘法表达式>| (加法表达式 + 乘法表达式)|(加法表达式 - 乘法表达式)
乘法表达式→强制转换表达式| (乘法表达式 * 强制转换表达式)| (乘法表达式 / 强制转换表达式)|(乘法表达式 % 强制转换表达式)
基本表达式→ 标识符 | 常量 | 字符串|(表达式)
一元运算符→& | * | + |- | ~ | !
赋值运算符→ =| 乘法赋值 | 除法赋值|求余赋值|加法赋值|减法赋值|左赋值 |右赋值|与赋值|异或赋值|或赋值
储存类说明符→typedef(定义类型)| <extern(外部变量)| <static(静态)| auto(自动)| register(寄存器)
说明符限定符列表→类型说明符 说明符限定符列表 | 类型说明符| 类型限定符 说明符限定符列表 |类型限定符
结构说明符列表→结构说明符|(结构说明符列表 , 结构说明符)
结构说明符 → 说明符 | (:常数表达式) | (说明符 : 常数表达式)
类型限定符 → 常量| 变量
标记语句→ (标识符 : 语句)| case (常数表达式 : 语句) | default(语句)
C语言文法的更多相关文章
- 1014 C语言文法定义与C程序的推导过程 程序:冒泡算法C程序(语法树)
阅读并理解提供给大家的C语言文法文件. 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 给出一段C程序,画出用上述文法产生这段C程序的完整语法树. 程序:冒泡算法C程序 点此文字查看原图 ...
- 1029 C语言文法定义与C程序的推导过程
1 阅读并理解提供给大家的C语言文法文件. 2 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 3 给出一段C程序,写出用上述文法产生这段C程序的推导过程. program → exte ...
- 我的mini_c语言文法设计
//这个文件主要是用来描述当前源语言的词法结构和语法结构 //当前语言是c语言的一个子集,因此里面所有的描述大家都很熟悉 //注意,当前语言并不支持预处理,因为c预处理比较复杂,而且楼主能力低下,因此 ...
- 消除左递归c语言文法
<程序> -〉 <外部声明> | <函数定义><外部声明> -〉<头文件> | <变量> | <结构体> <头 ...
- 简单的C语言文法
<程序>→<外部声明>|<程序><外部声明> <外部声明>→<函数定义>|<声明> <函数定义>→< ...
- 实验二 c语言文法
<程序>-><声明>|<程序><函数> <函数>-><修饰符><标识符><形式参数>< ...
- c语言文法简化版文法
<源程序>→<外部声明>|<外部声明><函数体> <外部申明>→<头文件><函数声明>|其他声明 <函数体&g ...
- 简化C语言文法
程序 → 外部声明|程序 外部声明 外部声明 → 定义函数|定义 函数定义 → 类型标识符 声明部分语句 类型标识符 → 空类型|字符型|整型|浮点型 声明部分语句 → 指针 直接声明|直接声明 指针 ...
- 简化版c语言文法
<程序> → <外部声明> | <程序的外部声明> <标识符类型> → <无类型> | <字符> | <整型> | ...
随机推荐
- Living in the Matrix with Bytecode Manipulation--转
原文地址:https://www.infoq.com/articles/Living-Matrix-Bytecode-Manipulation You are probably all too fam ...
- 利用Python进行数据分析(6) NumPy基础: 矢量计算
矢量化指的是用数组表达式代替循环来操作数组里的每个元素. NumPy提供的通用函数(既ufunc函数)是一种对ndarray中的数据进行元素级别运算的函数. 例如,square函数计算各元素的平方,r ...
- iis7.0与asp.net的运行原理
IIS7.0 IIS7.0主要引入了WAS(Windows Process Activation,不同于6.0中的Web Admin Service),分担了原来w3svc的部分功能,同时为IIS7. ...
- Django模型类Meta元数据详解
转自:https://my.oschina.net/liuyuantao/blog/751337 简介 使用内部的class Meta 定义模型的元数据,例如: from django.db impo ...
- Java之继承、抽象类、接口篇
一.继承(extends) 什么是继承? 继承是对现实生活中的"分类"概念的一种模拟. 狮子拥有动物的一切基本特性,但同时又拥有自己的独特的特性,这就是"继承" ...
- 来玩Play框架03 模板
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在上一章节中,我把字符串通过ok()返回给客户.我可以把一个完整的html页面放入 ...
- 应用.Net+Consul维护RabbitMq的高可用性
懒人学习的过程就是工作中老大让干啥让做啥就研究研究啥,国庆放假回来的周末老大通过钉钉给我布置了个任务, RabbitMQ高可用解决方案,我想说钉钉太坑了: 这是国庆过后9号周日晚上下班给的任务,我周一 ...
- CSS3之3d变换与关键帧
3d变换是在transform基础上实现的 transform-style:preserve-3d; 建立3d空间 perspective:; 景深(设置用户看的距离) perspective-ori ...
- CSS选择器的权重与优先规则?
我们做项目的时候,经常遇到样式层叠问题,被其他的样式覆盖,或者写的权重不高没效果,对权重没有具体的分析,做了一个总结. css继承是从一个元素向其后代元素传递属性值所采用的机制.确定应当向一个元素应用 ...
- 前端css框架SASS使用教程(转)
一.什么是SASS SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. 本文总结了SASS的主要用法.我的目标是,有了这篇文章,日常的一 ...