四川大学编译原理复习要点

四川大学编译原理复习要点版2013、编译器各个阶段的功能,输入、输出,前端、后端1将字符序列收集到称作记号(token)的有意义单元中词法分析:)1输出:记号输入:源代码扫描程序2)语法分析:从扫描程序中获取记号形式的源代码,并完成定义程序结构的语法分析,语法分析定义了程序的结构元素及其关系。输出:语法树输入:记号3)语义分析程序:分析程序的静态语义,包括声明和类型检查。输出:注释树输入:语法树4)源代码优化程序:编译器通常包括许多代码改进或优化步骤。绝大多数最早的优化步骤是在语义分析之后完成的,而此时代码改进可能只依赖于源代码。【对源代码进行优化,并产生中间代码】输入:注释树输出:中间代码5)目标代码生成:得到中间代码,生成目标机器的代码输入:中间代码输出:目标代码代码生成器6)目标代码优化程序:编译器改进由代码生成器生成的目标代码。输入:目标代码输出:目标代码扫描程序、分析程序和语义分析程序是前端,代码生成器是后端,前后端分开的好处:可以给编译器带来更方便的可移植性,此时的编译器既能改变源代码,又能改变目标代码。【遍】编译器发现,在生成代码之前多次处理整个源程序很方便,这些重复就是遍。首遍是从源中构造一个语法树或中间代码,在它之后的遍是由处理中间表示、向它增加信息、更换结构或生成不同的表示组成二、解释器和编译器的区别与联系?读入源语言后,解释器和编译器都要进行词法分析、语法分析和语义分析,之后,二者开始有所分别。解释器在语义分析后选择了直接执行语句;编译器在语义分析后选择将将语义存储成某一种中间语言,之后通过不同的后端翻译成不同的机器语言(可执行程序)编译器是把源语言(如C,Pascal,java等高级语言)转换为目标语言(汇编语言、机器语言等低级语言),要产生目标代码。解释器是以一个源语言(C,Pascal,java等高级语言)为输入,一边解释一边执行源程序,但不产生目标代码。.、算法描述(伪代码)p413构造一个扫描程序的自动过程:正则表达式→NFA→DFA→程序1、正则表达式→NFA(1)建立字母表。输入的正则表达式由于一般不输入“与”操作符,因此首先给表达式加入.作为与操作。再利用逆波兰式的堆栈操作,把操作符与字母分开,便得到了字母表。(2)Thompson构造法。首先将构成正则表达式的各个元素分解,对于每一个元素,按照下述规则1和规则2生成NFA。注意:如果r中记号a出现了多次,那么对于a的每次出现都需要生成一个单独的NFA。2、NFA→DFA从单个输入字符的某个状态中去除ε-转换和多重转换。(1)利用ε-closure规则即闭包规则,把NFA状态划分成集合,而后把每个集合作为DFA的状态。详细描述:从NFA的状态S开始经过ε到达的状态存储下,然后再把存储结果中的状态有经过ε到达的新状态也存储在一起,这样通过闭包规则就可以这些集合,再把集合作为DFA的状态。(2)子集构造3、DFA→程序DFA状态最小化取出DFA状态中的不可达的状态。构造最小状态的等价DFA的算法是通过创建统一到单个状态的状态集来进行。构造NFA(使用Thompson结构):基本正则表达式基本正则表达式格式或ε,其中表示字母表中单个字符的匹配,1)aaε表示空串的匹配。与正则表达式等同的(即在其语言中准确接受)的是:FANa与ε等同的NFA是:我们希望构造一个与正则表达式rs等同的NFA,其中r和2)并置s都是正则表达式。可将与rs对应的NFA构造如下:我们希望在与前面相同的假设下构造一个与r|s在各选项中选择3)相对应的N。如下进行:FA.重复我们需要构造与相对应的机器,现假设已有一台与相对应的机器。4)r*r那么就如下进行:构造NFA的一个例子:例:根据结构将正则表达式翻译为。首先为正则表达式FANThompsonaaab|和分别构造机器:b接着再为并置构造机器:ba现在再为构造另一个机器复件,并利用它们组成完整的,如下FANaaab|图:将(最小子集法)转换成NFADFA:转换从某状态或某些状态达到的所有状态集合,ε)是可由erusolc-ε闭包(-ε.它总是包含状态本身,2.16相关题目:2.1,2.12子集构造提左因子和消除左递归四、语法分析器的时候,提左因子和消除左递归的目的、原因LL(1)1、在建立避免...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

确认删除?