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