C编译器剖析_4.1 语义检查_语义检查简介

本文详细介绍了C编译器在语义检查阶段的工作,涉及ucldeclchk.c、uclstmtchk.c和uclexprchk.c文件中的功能。通过建立类型系统和对声明、语句、表达式的检查,确保代码符合C语言的语义。以实例解释了非法操作,如不同类型间的非法运算,并提供了分析代码的策略,从exprchk.c开始,然后是stmtchk.c,最后是declchk.c,尽管这与编译器执行顺序相反,但更利于理解。
摘要由CSDN通过智能技术生成

4.1  语义检查简介

    在这一章中,我们需要在语法分析阶段建立的语法树的基础上,进行语义检查。UCC编译器中与此相关的代码主要在ucl\declchk.c,ucl\stmtchk.c和ucl\exprchk.c,分别用于对声明Declaration、语句Statement和表达式Expression进行语义检查SemanticsCheck。其中,最重要的工作就是建立C语言的类型系统,我们在第2.4节时就已简单介绍过C语言的类型系统。在阅读这部分代码时,一定需要结合语法树进行,看起来比较笨但却很管用的办法是,把第3章中我们构造出来的语法树画在纸质的笔记本上,对照着语法树,才不至于迷失方向。我们就如一只猴子,在语法树上跳来跳去进行语义检查。在如此枝繁叶茂的语法树上,如果没有对应的图纸做导航,很快就会“云深不知处”了。

    按UCC编译器的正常执行流程,我们需要先为变量名和函数名建立起类型信息,这部分工作就主要是在declchk.c中进行,之后再进行语句和表达式的语义检查。我们反复强调过,通过声明Declaration,C程序员实际上建立了类型表达式,UCC编译器会在语义检查时,为变量名和函数名等标志符建立起相应的类型结构。在第2.4节时,我们已初步介绍了在UCC编译器中,整数、函数、结构体、数组和指针等类型结构在UCC编译器内部是如何表示的。而ucl\declchk.c中的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值