编译器设计难点.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文档。上传文档
查看更多
编译器设计难点

现代编译器的设计及其难点 摘要:我们常用的计算机软件,都需要通过编译的方式,把使用高级计算机语言编写的代码(比如C代码)编译(compile)成计算机可以识别和执行的二进制代码。编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体的过程。一个现代编译器的主要工作流程如下:源程序(source code)→预处理器(preprocessor)→编译器(compiler)→汇编程序(assembler)→目标程序(object code)→连接器(链接器,Linker)→可执行程序(executables)从概念上来讲,一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连接在一起的。一般一个编译过程划分成词法分析、语法分析、语义分析、中间代码生成,代码优化和目标代码生成六个阶段,这是一种典型的划分方法 图1 但有目的平台上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器的某些特征;平台上的资源贫乏,无法运行我们所需要编译器与主机编译相比,交叉编译受的限制更多,虽然在理论上我们可以做任何形式的交叉编译,但事实上,由于受到专利、版权、技术的限制,并不总是能够进行交叉编译,尤其是在业余条件下!举例来说,至今无法生成惠普公司专有的som格式的可执行文件,因此我们根本无法做目的平台为HPPA-HPUX的交叉编译。 图2  要进行交叉编译,需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码。常见的交叉编译例子如下:   1、在Windows PC上,利用ADS(ARM 开发环境),使用armcc编译器,则可编译出针对ARM CPU的可执行代码。   2、在Linux PC上,利用arm-linux-gcc编译器,可编译出针对Linux ARM平台的可执行代码。   3、在Windows PC上,利用cygwin环境,运行arm-elf-gcc编译器,可编译出针对ARM CPU的可执行代码。 后端:依赖于目标机器的阶段或某些阶段的某些部分。一般来说,后端完成的任务不依赖于源语言而只依赖于中间语言。主要包括代码优化、代码生成以及相关的错误处理和符号表操作。 下面对编译器的各个阶段进行详细分析: 词法分析 词法分析又称扫描器(Scanner),是编译的第一个阶段,是语法分析的必要准备。 词法分析器读入源程序,产生语言的基本词法单元,还完成和用户接口的一些任务 词法分析的主要任务: 对构成源程序的字符串从左到右的扫描,逐个字符地读入源程序字符并按照构词规则切分成一个一个具有独立意义的单词。并确定其属性(如保留字、标识符、运算符、界限符和常量等)。再把它们转换成长度统一的标准形式—属性字(Token)。 在这一阶段,我们主要要掌握从正规式到有限自动机的构造方法。 构造词法分析器的一般方法和步骤: 1 用正规式对模式进行描述; 2 为每个正规式构造一个NFA,它识别正规式所表示的正规集; 3 将构造出的NFA转换成等价的DFA,这一过程也被称为确定化; 4 优化DFA,使其状态数最少,这一过程也被称为最小化; 5 从优化后的DFA构造词法分析器。 语法分析 语法分析器的主要作用:(1)、根据词法分析器提供的记号流,为语法正确的输入构造分析树(或语法树)的某种表示;(2)、检查输入中的语法错误,并调用出错处理器进行适当出错处理。 语法分析分为自上而下分析和自下而上分析: 自上而下分析:就是从文法的开始符号出发,向下推导,推出句子,即从根出发,按前序生成结点,为输入串构造分析树。主旨:对任何输入串,试图用一切可能的方法,从文法出发,自上而下,从左到右的为输入串建立一棵语法树,或者说,为输入串寻找一个最左推导。 分析方法:a、带回溯的分析方法; b、不带回溯的分析方法:(1)、递归下降预测分析程序;(2)、非递归/表驱动的预测分析程序。 自下而上分析:从输入串开始,逐步进行“归约”,如果最后能得到文法的开始符号,则输入串是句子,否则输入串有语法错误。即从树末端开始,构造语法树。 核心:寻找句型中的“句柄”进行归约,用不同的方法寻找句柄,就可获得不同的分析方法。 分析方法: (1)、普通的“移进-规约”,掌握短语、直接短语、句柄、素短语、最左素短语的概念。自下而上方法主要包括以下四个动作: 移进:把下一个输入符号读到分析栈中。 归约:把分析栈顶的句柄归约为一非终结符。 接受:分析成功。 报错:处理错误。 这一方

文档评论(0)

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

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

1亿VIP精品文档

相关文档