c语言表达式语法问题,C语言表达式的语法图与语法检查
第l4卷第5期 上海工业大学学报 Vol-l4 No一5
1993 10 月 JOU RNAL OF SHANGHAI UNIVERSITY OF TECHNOLOGY October 1993
C语言表达式的语法图与语法检查’
7一惭 铁玮 (计算虮工程系) 了 Ze
摘 要 C语言的表达式较FORTRAN.PASCAL等高级语言的表达式更复杂.更最活
为了更好地说明 C谙言的表达式,本文根据美国 ANSI的标准给出了它的语法图 在使用 自
】簧向下分析算法检查表达式的语法正确性时,要求恢语法无壶遵归.因而,对 C语言表达式
的语法图进行了适应的等价变形,使之成为无左递归的语法图 同时简要说明了左递归的消
除和捡壹程序的设计
夫键词 语法; ;左遵归:至些坌堑
中田分类号 TP301 2:TP31 1 12
1 引 言
谤考,往寿谚言
C程序设计语言是贝尔实验室干 70年代初期在已开发的程序设计语言的基础上发展
起来的.C语言随着 UNIX操作系统的。打遍天下无敌手 而风摩世界,又独立于 UNI)(
系统,适用多种环境和机种.在我国 C语言也已经被广泛使用,成为程序员最喜欢使用的
语言之一.
与 BASIC、FORTRAN,PASCAL等程序设计语言的表达式相比,C语言的表达式更
复杂、更灵活.美国 ANSI的标准中给出了C语言表达式的 BNF范式Il-3】而用语法图来说
明更直观,更清晰.
我们在设计 C语言语法制导编辑器时发现有些 C语言程序设计书中给出的表达式语
j击图不符合表达式的语法.为了更清楚、更准确地解释和理解 C语言表达式,根据美国标
准 C语言(87 ANSI C)中的表达式的 BNF范式,给出了对应的表达式语法图.同时,根据
实际课题的需要,编写表达式语j击检查程序,要求对语法图进行等价变形,消除左递归12].
2 由ANSI标准中的 BNF范式得到语法图
根据美国ANSI标准中表达式的 BNF范式l1,直接得到对应的表达式语法图(见图 1)
这样由图 1至图 8中的表达式,构成了C语言表达式的语法图.
1992年 10月 2O日
铁 玮 工学硕壬,上海工业大学应用教I旰室 上海市延长路 149~(200072)
维普资讯 http://www.cqvip.com
上 海 工 业 大 学 学 报 I4卷
囤 1 表达式语法图
囤6 三元表达式图
图7 赋值表达式图
囤2 表达式表图
囤 3 一元表达式图
囤 4 左值图
囤5 二元表达式图
囤8 常数表达式图
维普资讯 http://www.cqvip.com
5期 铁 玮:C语言表达式的语法图与语法检查
3 语法图的等价变形和左递归的消除
采用自顶向下分析算法检查 C语言表达式的语法正确性,要求语法无左递归【 · .但从
表达式语法图中可看出,在图 1,图2中存在直接左递归,还有一些隐含的间接左递归,例
图1,图 8,图 5之间及图 1,图7,图4之间等.先消除直接左递归,基本原理如下:
假定关于 P的垒部产生式是 ’
P—PallP 2 。IP lI 21.。IF
其中,每个 都不等于 £(空串),而每个 都不以 P开头,那么,消除 P的直接左递归性就
是把上面的规则改写成:
. P一 PJl卢,P l__ P
一 P P P l£
具体证明见文献『4_,该变换是等价变换.
以上的变化以语法图形式反映出来(见
图9),等价于图 lO(a),图 lo0).P 可由图
c语言表达式语法问题,C语言表达式的语法图与语法检查相关推荐
- Java基础加强重温_13:XML(可拓展标记语言)、XML语法、XML约束、XML解析(Dom4j,JAXP)、Dom4j基本使用、Xpath表达式(XML路径语言)、XML解析综合案例
摘要 Java基础加强重温_13: XML(可拓展标记语言.作用:小型数据库.框架配置文件.不同平台数据交换). XML语法(文档.标签/元素.属性.注释.转义字符.CDTA区) XML约束(DTD约 ...
- 探索Java语言与JVM中的Lambda表达式
2019独角兽企业重金招聘Python工程师标准>>> 转载来源:http://www.admin10000.com/document/1291.html Lambda表达式是自Ja ...
- matlab函数表达式里分号_C语言表达式和语句
一.表达式 在C语言中,常量.变量.函数调用以及按C语言语法规则用运算符把运算数连接起来的式子都是合法的表达式 . 最后一类可以理解为运算符和运算对象的组合.例如: 算术表达式 = 算术运算符 + 运 ...
- 51单片机c语言除法符号,单片机c语言教程:C51运算符和表达式
上两课说了常量和变量,先来补充一个用以重新定义数据类型的的语句吧.这个语句就是 typedef,这是个很好用的语句,但我却不常用它,通常我定义变量的数据类型时都是使 用标准的关键字,这样别人能很方便的 ...
- 【C语言入门教程】2.7 表达式
表达式由运算符.常量及变量构成,C语言的表达式基本遵循一般代数规则.有几种运算法则是 C 语言表达式特有的. 2.7.1 表达式中的类型转换 同一表达式中的不同类型常量及变量在运算时需要变量为同一数据 ...
- c语言的运算答案,C语言运算符与表达式的练习题答案.doc
C语言运算符与表达式的练习题答案.doc C语言运算符与表达式的练习题单项选择题 1以下选项中,正确的 C 语言整型常量是( D ). A. 32L B. 510000 C. -1.00 D. 567 ...
- c语言每个整数占9列,c语言 第五章 数据类型和表达式.ppt
c语言 第五章 数据类型和表达式 第五章数据类型和表达式 C语言的基本数据类型 各种基本数据类型的常量和变量的定义 C语言的表达式和各种表达式的求解规则 5.1 数据的存储和基本数据类型 5.1.1数 ...
- c语言表达式判断,在C语言的if语句中,用做判断的表达式为()。
摘要: 做判电视场面调度特别是镜头调度必须考虑什么的问题颜渊问"仁",句中孔子告诉他"_______为仁".表达曾参因孝行被后人尊为"_____&qu ...
- c++ long 转 short_C精品编程之——C语言的数据类型、运算符、表达式,精品课程...
在前边的文章分享中,我们已经看到程序中使用的各种变量都应预先加以说明,即先说明,后使用.对变量的说明可以包括三个方面: ·数据类型 ·存储类型 ·作用域 在本课中,我们只介绍数据类型说明.其它说明在以 ...
- c语言 4则运算符,C语言学习之路之四-----------C语言的运算符与表达式
C语言的运算符与表达式 运算符与表达式 C语言的运算符又称为操作符,是数据间进行运算的符号.C语言的运算符按运算类型可分为赋值运算符.算术运算符.逻辑运算符.关系运算符.位运算符.指针运算符和取成员运 ...
最新文章
- 基于Sharding Sphere实现数据“一键脱敏”
- 汇编语言复习摘要四——第一个汇编程序
- POJ 3368 Frequent values 【ST表RMQ 维护区间频率最大值】
- wxWidgets:wxTreeCtrl 示例
- 劳动合同中不写薪资?
- Python 输出HTML实体字符(#x***转html,html符号乱码,中文乱码)
- MySQL中Join算法实现原理通俗易懂
- oracle 认证视频,Oracle 认证专家视频教程-OCP全套教程【98集】_IT教程网
- 自定义填充图案插件 cad_CAD软件中如何自定义CAD填充图案?
- wow模型修改器_《魔兽世界》魔兽世界模型修改器攻略
- 文件类型识别工具:TrID(trid)下载安装及使用
- SPSS学习(三)可靠性(用α系数衡量)
- 微信小程序模拟器里面不能显示自己写的INDEX
- LOGO特训营 第三节 首字母创意手法
- QQ群关键字提醒设置
- 国子监祭酒是个什么官
- Eigen实现克罗内克内积
- 阿里云天池打卡笔记兼错题集
- python搜索文献 速成_0基础5天速成Python,你也能发top期刊
- Halcon编程实验-(4)车牌号数字+字母的识别【目的:OCR识别的应用】
热门文章
- 利用GridView显示主细表并一次编辑明细表所有数据的例子(转)
- 一篇关于感情的文章(转) PS:觉得写得还不错,虽然有些还做不到
- Python图像处理](2)---图像融合、加法运算及图像类型转换、图像缩放、图像旋转、图像翻转与图像平移
- Boxfilter 块滤波器
- python 字符串前面的“r“是个啥?
- python case when用法_oracle菜鸟学习之 select case when的使用
- linux redis集群工具,Redis集群部署及常用的操作命令
- c++几个类互相包含
- docker常用操作(三) docker安装maven私服
- Java敏捷开发框架