什么是语义分析?

什么是语义分析?,第1张

语义分析是编译过程的一个逻辑阶段, 语义分析的任务是对结构上正确的源程序进行上下文有关性质的审查,进行类型审查。语义分析是审查源程序有无语义错误,为代码生成阶段收集类型信息。比如语义分析的一个工作是进行类型审查,审查每个算符是否具有语言规范允许的运算对象,当不符合语言规范时,编译程序应报告错误。如有的编译程序要对实数用作数组下标的情况报告错误。又比如某些某些程序规定运算对象可被强制,那么当二目运算施于一整型和一实型对象时,编译程序应将整型转换为实型而不能认为是源程序的错误。

语义分析是编译过程的一个逻辑阶段. 语义分析的任务是对结构上正确的源程序进行上下文有关性质的审查, 进行类型审查. 例如一个C程序片断:

int arr[2],b

b = arr * 10

源程序的结构是正确的. 语义分析将审查类型并报告错误:不能在表达式中使用一个数组变量,赋值语句的右端和左端的类型不匹配.

一个C程序片断

int arr[2],b

b = arr * 10

源程序的结构是正确的. 语义分析将审查类型并报告错误:不能在表达式中使用一个数组变量,赋值语句的右端和左端的类型不匹配.

又比如在语句sum:=first+count*10中,*的两个运算对象:count是实型,10是整型,则语义分析阶段进行类型审查之后,在语法分析所得到的分析树上增加一语义处理结点,表示整型变成实型的一目算符inttoreal.

例:id1:=id2+id3*10

经语法分析得知其是Pascal语言,表示成语法树为:

:=

/ \

id1 +

/ \

id2 *

/ \

id3 10

经语义分析得插入语义处理结点的树:

:=

/ \

id1 +

/ \

id2 *

/ \

id3 inttoreal

|

10

在高级程序设计语言翻译中,语义分析阶段的工作不与目标机器的体系结构密切相关,而目标代码生成阶段的工作与目标机器的体系结构密切相关。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11020991.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存