欢迎来到天天文库
浏览记录
ID:49264872
大小:1.55 MB
页数:65页
时间:2020-02-02
《编译器设计与实现 ——Lcc原理剖析.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、编译器设计与实现——Lcc原理剖析华中科技大学计算机学院张德2021/8/31一、概述1、编译器各阶段2021/8/31词法分析器语法分析器语义分析器中间代码生成器代码优化器代码生成器错误处理器符号表管理器源程序目标程序2、编译器各阶段的分组前端:依赖于语言并很大程度上独立于目标机器。一般包括语法分析、词法分析、符号表的建立、语义分析、中间代码生成以及相关错误处理。后端:依赖于目标机器的阶段或某些阶段的某些部分。一般来说,后端完成的任务不依赖于源语言而只依赖于中间语言。主要包括代码优化、代码生成以及相关的错误处理和符号表操作。
2、2021/8/31二、符号表符号表是编译器保存信息的中心库,编译器的各部分通过符号表进行交互,并访问符号表中的数据——符号。符号表把各种名字映射到符号集合。常量、标识符和标号都是名字,不同名字有不同的属性。符号管理不仅要处理符号本身,还管理符号的作用域。2021/8/311、符号的表示structsymbol{char*name;//名称intscope;//作用域Coordinatesrc;//在源程序中位置Symbolup;//连接符号表中上一个符号Listuses;//可保存一个Coordinate列表,表示使用情况in
3、tsclass;//扩展存储类型//符号标记Typetype;//如变量、函数、常量、结构或联合等信息floatref;//被引用的粗略次数union{//联合u为标号、结构、联合、枚举、常量、全局//和静态变量提供附加信息}u;//Xsymbolx;//由后端处理,如为变量分配寄存器//为调试器产生数据信息}2021/8/311、符号的表示scope域:enum{CONSTANTS=1,LABELS,GLOBAL,PARAM,LOCA
4、L};第k层中声明的局部变量其scope域等于LOCAL+k。src域:typedefstructcoord{char*file;unsignedx,y;}Coordinate;file指名包含该符号定义文件名,y和x表示出现的行号及行中位置。sclass域:符号扩展类型可以是AUTO、REGISTER、STATIC或EXTERN等首字母大写的类型表示全小写类型的指针,如Symbol。2021/8/312、符号表的表示externTableconstants;externTableexternals;externTablegl
5、obals;externTableidentifiers;externTablelabels;externTabletypes;structtable{intlevel;//同symbol中scope域Tableprevious;//符号表链表,指向level-1的表structentry{structsymbolsym;structentry*link;}*buckets[256];//这是一个哈希链数组,方便插入、查找Symbolall;//指向当前及其外层所有符号列表的表头};2021/8/313、符号表举例intx,y
6、;f(intx,inta){intb;y=x+a*b;if(y<5){inta;y=x+a*b;}}2021/8/312021/8/313045600000abxy4、符号表的相关操作查找和建立标识符Symbolinstall(constchar*name,Table*tpp,intlevel,intarena);Symbollookup(constchar*name,Tabletp);标号:与标识符相似,但不涉及作用域常量:这些符号保存在constants表中产生变量:用于产生静态变量保存字符串等2021/8/31三、代码生
7、成接口这一章内容定义了与目标机器无关的前端和与目标机器相关的后端之间的接口。Lcc接口包括一些共享数据结构、18个函数和包括36个操作符的语言。该语言用于将可执行代码从源程序生成dag(有向无环图)。共享数据结构可供前后端共享,但某些域为一端私有。symbol就是一个共享数据结构。2021/8/311、类型度量typedefstructmetrics{unsignedcharsize,align,outofline;}Metrics;size:类型的大小;align:对齐字节数;outofline:控制相关类型的常量的放置。为
8、1时,不出现在dag中,存于静态变量中。Metricscharmetric;Metricsshortmetric;Metricsintmetric;Metricsfloatmetric;Metricsdoublemetric;Metricsstructmetric;2021/
此文档下载收益归作者所有