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 可由图

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值