基于lcc编译工具实现.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于lcc编译工具实现

基于lcc编译工具实现   摘要:编译工具是进行软件系统开发和测试的强大工具。现有的编译工具复杂、庞大并且为数不多,诸如Vtune之类的程序剖面分析工具更是昂贵,但是对程序进行静态分析和动态跟踪评估等工作在很多方面十分有用,因此,以现有编译器为主体进行编译器扩展来现相应工具是非常有必要的。LCC是一款广为使用的ANSI C编译器,由于自身的简单和使用高效特点,由它出发通过修改、定制,构造其他特殊目的的编译器相关工具就变得相对简单。   关键词:编译器 编译工具 LCC 编译后端      Implementation of compilation-tools based on lcc   Abstract Compilation tools are powerfull tools for development and testing of software system. Compilation-tools existed are complex, large and infrequent and program profiling tools as VTune are costly. However, static analysing and dynamic tracing and evaluating for program is useful sometimes, so that, implementation these tools by extending a compiler existed is necessary. Lcc is a widely used compiler for ANSI C. construction compilation-tools by modifying, and configurating it is relatively simple because of its simple and effectiveness.   Keywords compiler, compilation- tools, lcc, compiler back-end      1.简介      编译器是编译工具的一种,是进行软件开发不可或缺的工具。编译器强大而复杂,其他编译相关工具也是如此。纵观各种编译相关的工具,如GCC编译器、lint语法检查器,以及许多程序剖面分析器等等,一直在强大、庞大、复杂和昂贵之间游走。对于许多特定目的的工作而言,一款轻便、高效和廉价的编译工具是十分具有吸引力的,因此,以一个简单高效的编译器为主体,针对不同的用途进行定制,有时就变得十分有必要。本文以此为目的,介绍了一种以LCC为主体进行配置和实现编译器相关工具的具体方法。   LCC是一款免费、开放源代码并被广泛使用的ANSI C编译器。它的作者是美国ATT实验室的Christopher W. Fraser和美国普林斯顿大学教授David R. Hanson,当前版本为4.2。LCC的分析代码由手工编写而成,编译速度非常快;LCC没有单独的优化遍,但对于大多数应用来说,LCC产生的代码已经足够快了。[1],与广为使用的GCC形成鲜明对比的是,LCC的源代码简单、紧凑,十分有利于进行修改。以可变目标为目的的设计,移植或对各种不同用途后端的实现比较简单。我们的工作就针对该编译器后端进行自定义配置的方法展开,它与LCC编译器的移植工作没有区别。      2.数据表示      类型和符号的数据结构是编译器的核心数据表示。对于编译后端而言,中间代码有关的数据结构也是非常重要的。LCC使用DAG(有向无环图)对中间代码进行描述,它使用二叉树的链表形式进行组织。所有的中间代码通过代码表进行管理,这种代码表与优化器中用于控制流分析的基本块有所区别,但可以看作是一种扩展基本块[1],通过它可以方便进行基本块的划分,从而插入单独的优化遍,使LCC成为优化编译器。   编译器后端的实现者需要熟悉至少四种LCC的核心数据结构,分别是类型、符号、DAG节点和后端接口描述,本文不对其细节进行赘述,可参考LCC编译器源代码。   对于这四种数据结构中,LCC从概念上将其划分为三部分,一部分为编译前端私有数据,根据LCC后端的访问约定,LCC后端并不访问这个部分的数据;第二部分为前后端共享的数据;第三部分为后端私有数据,前端对此一无所知。其中,前两个部分的数据从形式上看没有区别,而第三部分,作为后端的私有数据结构由后端自己实现,由各结构中的x域成员进行维护,它们的组织形式如下:          LCC为生成可执行目标代码的代码生成器提供了一种自动代码生成的方法,使用这种方法,后端的实现者只需要提供一份规范

文档评论(0)

bokegood + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档