1014 C语言文法定义与C程序的推导过程
<程序> -> <外部声明> | <程序> <外部声明>
<外部声明> -> <函数定义> | <声明>
<函数定义> -> <类型说明> <声明符> <复合语句>
<类型说明> -> <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语言文法定义与C程序的推导过程的更多相关文章
- 1014 C语言文法定义与C程序的推导过程 程序:冒泡算法C程序(语法树)
阅读并理解提供给大家的C语言文法文件. 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 给出一段C程序,画出用上述文法产生这段C程序的完整语法树. 程序:冒泡算法C程序 点此文字查看原图 ...
- 1106 1014 C语言文法定义与C程序的推导过程 冒泡程序语法树
- 1029 C语言文法定义与C程序的推导过程
1 阅读并理解提供给大家的C语言文法文件. 2 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 3 给出一段C程序,写出用上述文法产生这段C程序的推导过程. program → exte ...
- C语言文法定义及C程序的推导过程
program à external_declaration | program external_declaration <程序> -> <外部声明> | < ...
- C语言文法定义与C程序的推导过程
program à external_declaration | program external_declaration <程序> -> <外部声明> | < ...
- 1029c语言文法定义与c程序的推导过程
program → external_declaration | program external_declaration <源程序>→ <外部声明> | <源程序> ...
- 014 C语言文法定义与C程序的推导过程
- 1014 我的C语言文法定义与C程序推导过程
程序> -> <外部声明> | <程序> <外部声明> <外部声明> -> <函数定义> | <声明> < ...
- 1014 C语言文法定义
<程序>→<外部声明>|<程序><外部声明><外部声明>→<函数定义>|<声明><函数定义>→<数 ...
随机推荐
- 在Visual Studio 2012中使用ASP.NET MVC5
去年11月,.NET团队发布了用于 Visual Studio 2012 的 ASP.NET 和 Web 工具 2013.1 您可以从下面提供的链接下载该更新: 下载用于 Visual Studio ...
- 小白日记53:kali渗透测试之Web渗透-SSL、TLS中间人攻击(SSLsplit,Mitmproxy,SSLstrip),拒绝服务攻击
SSL.TLS中间人攻击 SSL中间人攻击 攻击者位于客户端和服务器通信链路中 利用方法: ARP地址欺骗 修改DHCP服务器 (存在就近原则) 手动修改网关 修改DNS设置 修改HOSTS文件[高于 ...
- 一维码ITF 25简介及其解码实现(zxing-cpp)
一维码ITF 25又称交插25条码,常用在序号,外箱编号等应用.交插25码是一种条和空都表示信息的条码,交插25码有两种单元宽度,每一个条码字符由五个单元组成,其中二个宽单元,三个窄单元.在一个交插2 ...
- pycharm如何回到过去某个时间
在编写代码是,我们可能会写错代码,或者是误删某个文件,那么问题来了,如何回到过去的某个时间段,来弥补我们犯下的错呢? 1.如果是恢复删除的文件则右击之前文件所在的文件夹 2.右击文件夹的显示效果如图 ...
- js,indexOf()、lastIndexOf()
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. 提示和注释 注释:indexOf() 方法对大小写敏感! 注释:如果要检索的字符串值没有出现,则该方法返回 -1. 实例 在 ...
- Qt-网易云音乐界面实现-6 迷你个人中心实现
这个界面除了麻烦耗时,没有啥技术含量.暂时我也就把它称为迷你个人中心,因为后面还有一个个人中心了. 先看下完成品 左侧是我的,右侧是原生 个人感觉还可以吧,哈哈哈.给我自己奖励一个鸡腿. 看下头文件 ...
- 经典笔试题:用C写一个函数测试当前机器大小端模式
“用C语言写一个函数测试当前机器的大小端模式”是一个经典的笔试题,如下使用两种方式进行解答: 1. 用union来测试机器的大小端 #include <stdio.h> union tes ...
- SpringMVC 完美解决PUT请求参数绑定问题(普通表单和文件表单)
一 解决方案 修改web.xml配置文件 将下面配置拷贝进去(在原有的web-app节点里面配置 其它配置不变) <!-- 处理PUT提交参数(只对基础表单生效) --> <filt ...
- Python中格式化format()方法详解
Python中格式化format()方法详解 Python中格式化输出字符串使用format()函数, 字符串即类, 可以使用方法; Python是完全面向对象的语言, 任何东西都是对象; 字符串的参 ...
- SSH 报错解决方法记录汇总
SSH 密钥签名失败 情景: 使用 SSH 密钥验证身份时 报错: sign_and_send_pubkey: signing failed: agent refused operation 环境: ...