【摘要】:语义分析阶段的任务是审查源程序有无语义错误。源程序中有些语法成分,按照语法规则去判断,它是正确的,但它不符合语义规则。现在的程序段只剩下一个警告错误了一般,语义分析的工作还包括类型审查,类型提升以及为代码生成阶段收集类型信息。语义分析阶段进行类型审查之后,将整型量提升为实型量。图6.54插入语义处理结点的树
语义分析阶段的任务是审查源程序有无语义错误。源程序中有些语法成分,按照语法规则去判断,它是正确的,但它不符合语义规则。比如使用了没有声明的变量;或者给一个过程名赋值;或者调用函数时参数类型不合适;或者参加运算的两个变量类型不匹配等。比如下边的程序片段:
int arr[2],c;
c=arr1∗10;
其中的赋值语句是符合语法规则的,但是因为没有声明变量arr1,而存在语义错。
请你说出error1和error2分别违背了什么语义规则,warning呢?
现在的程序段只剩下一个警告错误了(www.daowen.com)
一般,语义分析的工作还包括类型审查,类型提升以及为代码生成阶段收集类型信息。比如审查每个算符是否实施于具有语言规范允许的运算对象,当不符合语言规范时,编译程序应报告错误。又比如对实数用作数组下标的情况报告错误。又比如某些语言规定运算对象可被强制,那么当二目运算施于一个整型量和一个实型量时,编译程序应将整型量自动转换成实型量而不能认为是源程序的错误,或者给出警告信息后将整型量自动转换成实型量。
假如在赋值语句sum∶=first﹢count∗10中,算符∗的两个运算对象分别是count和10,而count是实型变量,10是整型量。语义分析阶段进行类型审查之后,将整型量提升为实型量。在语法分析所得到的分析树上增加一个一目算符结点,这个结点的名称为inttoreal,表示进行将整型量变成实型量的语义处理,那么,图6.53所示的树变成图6.54所示的那样。
图6.54 插入语义处理结点的树
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
有关计算机导论的文章