《语义分析中》PPT课件.ppt

《语义分析中》PPT课件.ppt

ID:52108734

大小:303.34 KB

页数:19页

时间:2020-03-31

《语义分析中》PPT课件.ppt_第1页
《语义分析中》PPT课件.ppt_第2页
《语义分析中》PPT课件.ppt_第3页
《语义分析中》PPT课件.ppt_第4页
《语义分析中》PPT课件.ppt_第5页
资源描述:

《《语义分析中》PPT课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第05章语义分析主要内容:语义分析基础符号表类型分析声明和执行体的语义分析5.3类型分析5.3.1类型的等价性和相容性类型的等价性1)按名等价:typetp=array[1..10]ofinteger;vara,b:tp;则称a,b是相同类型的变量2)结构等价:typetp1=array[1..10]ofinteger;typetp2=array[1..10]ofinteger;vara:tp1;b:tp2;则称a,b是相同类型的变量类型的相容性:主要有:1)运算分量类型的相容性;2)赋值语句左右类型的相容性;3)形参和实参类型的相容性;类型分析的作用:构造类型的

2、内部表示,进行类型检查。分析过程:读Token序列,识别出各种类型,类型检查,返回类型内部表示的地址。5.3.2类型分析的总控算法功能:类型检查,Ptr返回类型的内部表示地址。VoidTypeProcess(Ptr){switch(token.class){caseID:NameTYPE(Ptr);break;//类型名caseENUM:EnumTYPE(Ptr);break;//枚举类caseARRAY:ArrayTYPE(Ptr);break;//数组类caseRECORD:RecordTYPE(Ptr,0,null);break//记录类caseUNION:

3、UnionTYPE(Ptr,0,null);break;//联合类casePOINTER:PointerTYPE(Ptr);break;//指针类default:error()};next_token();return;}5.3.3类型名分析形式:id/*类型标识符*/处理子程序:voidNameType(Ptr){FindEntry(token.seman,total,Entry,Present);//查符号表if(Present=flase)error;//无声明错if(Entrykind)!=typeKind}error;//非类型标识符Ptr=Entry

4、idType;}如:VARid:t;5.3.4枚举类型分析形式:(id1,…,idn)分析任务:1)扫描及检查枚举类型的语义错误;2)构造该类型的内部表示,用Ptr指针指向它;3)构造枚举常量标识符的符号表项。例:设枚举类型(a,b),则首先产生枚举类型的内部表示,其中EntryList表示一个指针,指向枚举表。SizeenumTyEnumListPtr:aPtrConsKind0bPtrConsKind1aEntry:bEntry:其次,在符号表区里为常量a和b构造相应表项如下:处理子程序:voidEnumType(Ptr){list=nil;L0:next_

5、token();//读表的下一个元素Link(list,token.seman);//连接到内部枚举表next_token();if(token.class==“,”)gotoL0;Ptr:=★(enumSize,enumTy,List);//生成枚举类型的内部表示SizeenumTyEnumListPtr:m=0;L1:name=first(List);//取List的首元素List=tail(List);//去掉List的首元素Enter(name,(Ptr,constKind,m),entry,present);//建立符号表项if(present)erro

6、r();m=m+1;if(List!=“nil”)gotoL1;}如:(a,b)的符号表EntryList:aPtrConsKind0bPtrConsKind15.3.5数组类型分析形式:array[c1..c2]ofT算法要点:扫描C1时把其值计算到Low中;扫描C2时把其值计算到Up中;扫描T时构造出其内部结点(由ElemPtr指向);构造数组结点:Ptr:=★(size,arrayTy,Low,Up,ElemPtr)实现算法:voidArrayType(Ptr){//array[C1..C2]ofTnext_token();//读“[”next_t

7、oken();Low=token.seman;//处理下标next_token();//读“..”next_token();Up=token.seman;//处理上标next_token();next_token();//读“]of”if(Low>Up)errorTy;new(ElemPtr);next_token();TypeProcess(EelemPtr);//处理元素类型Sizes:=(Up-Low+1)(*ElemPtr.Size);//求本类型长度Ptr:=★(size,arrayTy,Low,Up,ElemPtr);//生成数组类型的内部表示}5.

8、3.6记录

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。