网站大量收购独家精品文档,联系QQ:2885784924

编译方法、技术与实践概述.pptx

  1. 1、本文档共33页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

;

?编译器的结构

?编译过程

?语言特征;

?一个编译器就是一个程序,读入以某一种语言 (源语言)编写的程序,并把该程序翻译成为一个等价的、用另一种语言(目标语言)编写的程序。;

?编译器vs.解释器

?编译器的结构

?编译的构造工具;

编译器简介;

目标程序;

直接利用用户提供的输入,执行源程序中指定的操作。

不生成目标程序,而是根据源程序的语义直接运行。 边解释,边执行,错误诊断效果好。;

?Java结合了两者:

O先编译成字节码,再由Java虚拟机解释执行

O即时编译(Just-in-timecompiling);;

?编译器vs.解释器

?编译器的结构

?编译的构造工具;

?分析部分(Analysis)

O源程序-语法结构-中间表示

O搜集源程序中的相关信息,放入符号表

O分析、定位程序中可能存在的错误信息(语法、语义错误)

O又称编译器的前端(frontend),是与机器无关的部分

?综合部分(Synthesis)

O根据符号表和中间表示构造目标程序

O又称编译器的后端(backend),是与机器相关的部分;

?每个步骤把源程序的一种表示方式转换成另一种表示方式。

?实践中,某些中间表示不需要明确的构造出来。

?符号表可由各个步骤

使用;

O类型

O作用域

O过程名字的参数数量、参数类型等等;

?词法分析:Thislineisalongersentence.

?语法分析:;

?词法分析/扫描(lexicalanalysis,scanning)

O读入源程序的字符流,输出有意义的词素(lexeme)

O基于词素,产生词法单元:token-name,attribute-value

Otoken-name由语法分析步骤使用

Oattribute-value指向相应的符号表条目,由语义分析/代码生成步骤使用

?例子

Oposition=initial+rate*60

Oid,1=,id,2+,id,3*,number,4;

?词法分析后,需要得到词素序列的语法结构

?语法分析/解析(syntaxanalysis/parsing)

O根据各个词法单元的第一个分量来创建树形中间表示形式。通常是语法树(syntaxtree)。

O指出了词法单元流的语法结构。;

?得到语义(meaning),对于编译器来说比较难

?语义分析(semanticanalysis)

O使用语法树和符号表中的信息,检查源程序是否满足语言定义的语义约束。

O同时收集类型信息,用于代码生成。;

?根据语义分析的输出,生成类机器语言的中间表示

?三地址代码:

O每个指令最多包含三个运算分量

Ot1=inttofloat(60);t2=id3*t1;t3=id2+t2;;

21;

?把中间表示形式映射到目标语言

O寄存器的分配;

?趟:以文件为输入输出单位的编译过程的个数,每趟可由一个或若干个步骤构成

?“步骤”是逻辑组织方式

?“趟”和具体的实现相关

O参考LLVM实现中的Pass;

?编译器vs.解释器

?编译器的结构

?编译的构造工具;

?语法分析器的生成器:yacc/bison

O根据一个程序设计语言的语法描述自动生成语法分析器

?扫描器的生成器:lex/flex

O根据一个语言的词法单元的正则表达式描述生成词法分析器

?语法制导的翻译引擎

O生成一组用于遍历分析树并

文档评论(0)

ning2021 + 关注
实名认证
内容提供者

中医资格证持证人

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

领域认证该用户于2023年05月10日上传了中医资格证

1亿VIP精品文档

相关文档