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
在高级程序设计语言翻译中,语义分析阶段的工作不与目标机器的体系结构密切相关,而目标代码生成阶段的工作与目标机器的体系结构密切相关。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)