第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语言表达式的语法图与语法检查相关推荐

  1. Java基础加强重温_13:XML(可拓展标记语言)、XML语法、XML约束、XML解析(Dom4j,JAXP)、Dom4j基本使用、Xpath表达式(XML路径语言)、XML解析综合案例

    摘要 Java基础加强重温_13: XML(可拓展标记语言.作用:小型数据库.框架配置文件.不同平台数据交换). XML语法(文档.标签/元素.属性.注释.转义字符.CDTA区) XML约束(DTD约 ...

  2. 探索Java语言与JVM中的Lambda表达式

    2019独角兽企业重金招聘Python工程师标准>>> 转载来源:http://www.admin10000.com/document/1291.html Lambda表达式是自Ja ...

  3. matlab函数表达式里分号_C语言表达式和语句

    一.表达式 在C语言中,常量.变量.函数调用以及按C语言语法规则用运算符把运算数连接起来的式子都是合法的表达式 . 最后一类可以理解为运算符和运算对象的组合.例如: 算术表达式 = 算术运算符 + 运 ...

  4. 51单片机c语言除法符号,单片机c语言教程:C51运算符和表达式

    上两课说了常量和变量,先来补充一个用以重新定义数据类型的的语句吧.这个语句就是 typedef,这是个很好用的语句,但我却不常用它,通常我定义变量的数据类型时都是使 用标准的关键字,这样别人能很方便的 ...

  5. 【C语言入门教程】2.7 表达式

    表达式由运算符.常量及变量构成,C语言的表达式基本遵循一般代数规则.有几种运算法则是 C 语言表达式特有的. 2.7.1 表达式中的类型转换 同一表达式中的不同类型常量及变量在运算时需要变量为同一数据 ...

  6. c语言的运算答案,C语言运算符与表达式的练习题答案.doc

    C语言运算符与表达式的练习题答案.doc C语言运算符与表达式的练习题单项选择题 1以下选项中,正确的 C 语言整型常量是( D ). A. 32L B. 510000 C. -1.00 D. 567 ...

  7. c语言每个整数占9列,c语言 第五章 数据类型和表达式.ppt

    c语言 第五章 数据类型和表达式 第五章数据类型和表达式 C语言的基本数据类型 各种基本数据类型的常量和变量的定义 C语言的表达式和各种表达式的求解规则 5.1 数据的存储和基本数据类型 5.1.1数 ...

  8. c语言表达式判断,在C语言的if语句中,用做判断的表达式为()。

    摘要: 做判电视场面调度特别是镜头调度必须考虑什么的问题颜渊问"仁",句中孔子告诉他"_______为仁".表达曾参因孝行被后人尊为"_____&qu ...

  9. c++ long 转 short_C精品编程之——C语言的数据类型、运算符、表达式,精品课程...

    在前边的文章分享中,我们已经看到程序中使用的各种变量都应预先加以说明,即先说明,后使用.对变量的说明可以包括三个方面: ·数据类型 ·存储类型 ·作用域 在本课中,我们只介绍数据类型说明.其它说明在以 ...

  10. c语言 4则运算符,C语言学习之路之四-----------C语言的运算符与表达式

    C语言的运算符与表达式 运算符与表达式 C语言的运算符又称为操作符,是数据间进行运算的符号.C语言的运算符按运算类型可分为赋值运算符.算术运算符.逻辑运算符.关系运算符.位运算符.指针运算符和取成员运 ...

最新文章

  1. 基于Sharding Sphere实现数据“一键脱敏”
  2. 汇编语言复习摘要四——第一个汇编程序
  3. POJ 3368 Frequent values 【ST表RMQ 维护区间频率最大值】
  4. wxWidgets:wxTreeCtrl 示例
  5. 劳动合同中不写薪资?
  6. Python 输出HTML实体字符(#x***转html,html符号乱码,中文乱码)
  7. MySQL中Join算法实现原理通俗易懂
  8. oracle 认证视频,Oracle 认证专家视频教程-OCP全套教程【98集】_IT教程网
  9. 自定义填充图案插件 cad_CAD软件中如何自定义CAD填充图案?
  10. wow模型修改器_《魔兽世界》魔兽世界模型修改器攻略
  11. 文件类型识别工具:TrID(trid)下载安装及使用
  12. SPSS学习(三)可靠性(用α系数衡量)
  13. 微信小程序模拟器里面不能显示自己写的INDEX
  14. LOGO特训营 第三节 首字母创意手法
  15. QQ群关键字提醒设置
  16. 国子监祭酒是个什么官
  17. Eigen实现克罗内克内积
  18. 阿里云天池打卡笔记兼错题集
  19. python搜索文献 速成_0基础5天速成Python,你也能发top期刊
  20. Halcon编程实验-(4)车牌号数字+字母的识别【目的:OCR识别的应用】

热门文章

  1. 利用GridView显示主细表并一次编辑明细表所有数据的例子(转)
  2. 一篇关于感情的文章(转) PS:觉得写得还不错,虽然有些还做不到
  3. Python图像处理](2)---图像融合、加法运算及图像类型转换、图像缩放、图像旋转、图像翻转与图像平移
  4. Boxfilter 块滤波器
  5. python 字符串前面的“r“是个啥?
  6. python case when用法_oracle菜鸟学习之 select case when的使用
  7. linux redis集群工具,Redis集群部署及常用的操作命令
  8. c++几个类互相包含
  9. docker常用操作(三) docker安装maven私服
  10. Java敏捷开发框架