ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:200.38KB ,
资源ID:22437182      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22437182.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(四川大学编译原理复习要点Word格式文档下载.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

四川大学编译原理复习要点Word格式文档下载.docx

1、【遍】编译器发现,在生成代码之前多次处理整个源程序很方便,这些重复就是遍。 首遍是从源中构造一个语法树或中间代码,在它之后的遍是由处理中间表示、向它增加信 息、更换结构或生成不同的表示组成二、解释器和编译器的区别 与联系?读入源语言后,解释器和编译器都要进行词法分析、语法分析和语义分析, 之后,二者开始有所分别。解释器在语义分析后选择了直接执行语句;编译器 在语义分析后选择将将语义存储成某一种中间语言,之后通过不同的后端翻译 成不同的机器语言(可执行程序)编译器是把源语言(如C,Pascal,java等高级语言)转换为目标语言(汇编语言、机 器语言等低级语言),要产生目标代码。解释器是以一个源

2、语言(C,Pascal, java等高级语言)为输入,一边解释一边执行源 程序,但不产生目标代码。3、算法描述(伪代码)p41构造一个扫描程序的自动过程:正则表达式t NFA t DFA t程序1、 正则表达式t NFA(1) 建立字母表。输入的正则表达式由于一般不输入“与”操作符,因此首先给表达式加入作为与操作。再利用逆波兰式的堆栈操作,把操作符与字母分开,便得 到了字母表。(2) Thompson构造法。首先将构成正则表达式的各个元素分解,对于每一个元素,按照下述规则 1和规则2生成NFA。注意:如果r中记号a出现了多次,那么 对于a的每次出现都需要生成一个单独的 NFA。2、 NFAtD

3、FA从单个输入字符的某个状态中去除 -转换和多重转换。(1) 利用 -closure规则即闭包规则,把 NFA状态划分成集合,而后把每个集合作 为DFA的状态。详细描述:从NFA的状态S开始经过到达的状态存储下,然后再把存储结果中的 状态有经过到达的新状态也存储在一起,这样通过闭包规则就可以这些集合,再把集合 作为DFA的状态。(2) 子集构造3、 DFAt程序 DFA状态最小化 取出DFA状态中的不可达的状态。构造最小状态的等价 DFA的算法是通过创建统一到单个状态的状态集来进行。构造NFA(使用Thompson结构):1)基本正则表达式 基本正则表达式格式 a或,其中a表示字母表中单个字符

4、的匹配,表示空串的匹配。与正则表达式 a等同的NFA (即在其语言中准确接受)的是:2)并置 我们希望构造一个与正则表达式 r s等同的N FA,其中r和s都是正则表达式。可将与rs对应的N FA构造如下:3)在各选项中选择 我们希望在与前面相同的假设下构造一个与 r |s相对应的NFA。如下进行:4)重复 我们需要构造与r *相对应的机器,现假设已有一台与 r相对应的机器。那么就如下进行:构造NFA的一个例子:例:根据Thompson结构将正则表达式 a b | a翻译为N FA。首先为正则表达式 a 和b分别构造机器:|r- 2-6 11 I Illionipsoti l: hl:| F

5、-!0 ab a将NFA转换成DFA(最小子集法):& -闭包(& -closure)是可由e转换从某状态或某些状态达到的所有状态集合,它总是包含状态本身子集构造 相关题目:2.1 , 2.12 , 2.16四、提左因子和消除左递归1、在建立LL 语法分析器的时候,提左因子和消除左递归的目的、原因 目的:提取左因子-避免程序回溯;消除左递归-消除无限循环原因:当有公因子存在时,不能立即区分出文法规则右边的选择; 当有左递归时,将导致一个无限循环。2、提左因子和消除左递归的算法描述 消除左递归 伪代码 P119for i:=1 to m dofor j:=1 to i-1 doreplaceea

6、chgrammerrule choice of theform Ai Aj 3 by the ruleAi a 13 | a 2 3 |.| a k 3 , where Aj a 1| a 2| | a k isthecurrent rule for Ajremove,if necessary,immediateeft recursioninvolving Aia)把直接左递归改写为右递归 【简单直接左递归】设有文法产生式:A A3 | 丫。其中 3非空,丫不以A打头。可写为:Ay AA 3 A| 一般情况下,假定关于 A的产生式是 【普遍的直接左递归】A Aa 1 Aa 2 I |A a m

7、| 3 11 3 2 | | 3 n其中,a i(1 wi wm)均不为空,3 j (1 wj w n)均不以A打头。A 31A|32 A | - |nA a 1Aa 2A | a m则消除直接左递归后改写为:| &例4.12 :有文法G(E):EE +T |TT T*F | FF i| (E)消除该文法的直接左递归。 解:按转换规则,可得:E TEEt+TEL FTTt *FT Ft i| (E)b)消除间接左递归 【一般的左递归,不带有&产生式且不带有循环的文法】对于间接左递归的消除需要先将间接左递归变为直接左递归,然后再按 a)清除左递归。例4.13 :以文法G6为例消除左递归: (1)

8、A t aB (2)A t Bb(3)B tAcB Td解:用产生式(1) , (2)的右部代替产生式(3)中的非终结A得到左部为|b的产生式:(1)B taBc(2)B t Bbc(3)B Td消除左递归后得到:BtaBcB |dBBt bcB | &再把原来其余的产生式 At aB,AT Bb加入,最终得到等价文法为:(1)At aBAt BbBt (aBc|d)BtbcBc)消除文法中一切左递归的算法 设非终结符按某种规则排序为消除A中的一切直接左递归end提取左因子伪代码P122当两个或更多文法规则选择共享一个通用前缀时,需要提取左因子:A Tap | aY按如下规则提取左因子:A T

9、a A5、first集合follow集合 算法 伪代码P126 P131具体看书上的例子First集合求法:1.直接收取:对形如 U a的产生式(其中a是终结符),把a收入到First(U)中2.反复传送:对形入 U P的产生式(其中P是非终结符),应把First(P)中的全部内 容传送到First(U)中。Follow集合求法:注意产生式右部的每一个形如“ Ua”的组合,把a直接收入到Follow(U)中。2 .直接收取:对形如“ UP”(P是非终结符)的组合,把First(P)除直接收入到 Follow(U)中。3.反复传送:对形如 PU的产生式(其中 U是非终结符),应把Follow(P

10、)中的全部内容传送到 Follow(U)中。(或 PUB且First(B)包含则把 First(B)除直接收入到 Follow(U)中,并把 Follow(P)中的全部内容传送到 Follow(U)中)6、写递归下降子程序伪代码 P10 6递归下降:将一个非终结符A的文法规则看作将识别A的一个过程的定义 一个if语句(简化了的)文法规则是:if-stmt if (exp) statement| if (exp) statementelsestatement伪代码:procedure ifstmt;beg inmatch (if );match ();exp;match ();stateme n

11、tif toke n = elsethe nmatch (else;en dif ;en d ifstmt;p44给出基于DFA进行词法分析的表驱动的实现算法state:=1;ch:=nextinput character;while not acceptstateand not error(state) donew state:=Tstate,ch;if adva ncestate,chthe n ch:=n ext in put chracter;State: =n ewstateen d while;if acceptstatethe n accpet;7、上下文无关文法 BNFEBNF

12、 最左最右推导1定义:上下文无关文法 G是一个四元组G = (N , T , P, S),其中N是非终结符的有限集合;T是终结符或单词的有限集合,它与 N不相交;P是形如A F 的产生式的有限集合,其中 A N, a V * ,V=T U NS是N中的区分符号,称为开始符号或句子符号。 V中的符号称为文法符号,包括终结符和非终结符。2、Backus-Naur符号(就是众所周知的 BNF或Backus-Naur Form)是描述语言的形式化的 数学方法,由John Backus (也许是PeterNaur)开发,用于描述 Algol 60编程语言的语法。3、EBNF (扩展的BNF)使用花括号表

13、示重复,方括号表示可选EBNF中注意重复和可选的表示方法,语法图【可视的表示 EBNF规则的图形表示法】 上下文无关文法说明程序设计语言的语法结构,利用了与正则表达式中极为类似的命名惯 例和运算。二者的主要区别在于上下文无关文法的规则是递归的( recursive)最左推导(leftmost derivation )是指它的每一步中最左的非终结符都要被替换的推导最右推导(rightmost derivation )则是指它的每一步中最右的非终结符都要被替换的推导。 最左推导和与其相关的分析树的内部节点的前序编号相对应;最右推导则和后序编号相对 应 最右推导的一个例子:exp T expop e

14、xp | ( e xp) |n u m b e r opT + |- |* exp =? ep op exp=* fxp qp xjumbar=exp * aufiter n exp ) * uundiz- 3 ( exp op 即)“ ausber =* (# 呼 nunbex * aLULbjr r (伴p - jjuwgjj * J3us2r f (JiiDBfxr - nunbtfjr) * number图41尊用衆达式U4-斗性2的推导分析树与抽象语法树有什么不同?对一个串按照某种文法进行推导的过程,可以用一颗树表示出来,这棵树就是分析树。分析树是表示记号串结构的一种十分有用的方法。

15、抽象语法树是真正的源代码记号序列的抽象表示,包含了转换所需的所有 信息,而且比分析树效率更高。分析程序可以通过一个分析树表示所有步骤,但却通常只能构造出一个抽 象的语法树(或与它等同的)。8记号类型1保留字,女口 IF何THEN,它们表示字符串“if”和“then”2、特殊符号,如算数符号加(PLUS)和减(MINUS),它们表示“+”“9、语言、句子、句型【语言】由推导 从exp中得到的所有记号符号的串集是被表达式的文法定义的语言【句型】从文法起始符号出发经过任意有限次推导出来的串【句子】 的只有终结符的串10、自顶向下(第4章)自底向上(第5章)区别:自顶向下语法分析:从文法的开始符号出发

16、,从顶部开始构造语法分析树。自底向上语法分析:从构成语法分析树的叶子节点的终结符号串开始,从底部开始构造语 法分析树。1自顶向下的分析算法通过在最左推导中描述出各步骤来分析记号串输入自顶向下的分析程序有两类:回溯分析程序、预测分析程序。两类自顶向下分析的算法:递归下降分析、 LL (1)分析。LL(1):第一个L指的是由左向右的处理输入,第 2个L指的是为输入串描绘一个最左推导,括号里的1表示仅使用输入中的一个符号来预测分析的方向。P106112递归下降:将一个非终结符A的文法规则看作将识别a的一个过程的定义First集合follow集合LL(1)文法的判断及分析表2、自底向上语法分析:从构成

17、语法分析树的叶子节点的终结符号串开始,从底部开始构 造语法分析树。自底向上分析法也称移进-规约分析法。思想:对输入串自左向右进行扫描,并将输入符逐个移入栈中,边移入边分析,一旦栈顶 符号形成某个句型的句柄或可规约串时,就用产生式左部的非终结符代替之;这称为一步 规约。最普通的自底向上算法称作 LR(1)分析:L表示自左向右处理输入, R表示生成了最右推导SLR( 1)分析是对LR( 1)分析的改进LALR ( 1 )比SLR( 1)略微强大 且比一般的LR( 1)简单P153 LR(0)项目的 DFA自底向上的分析程序有两种可能的动作 (除“接受”之外):1)将终结符从输入的开头移进到栈的顶部

18、。2)假设有B N F选择Aa,将栈顶部的串a归约为非终结符 A。11、综合题1、 编写正则表达式2、 给定程序,最左、最右推导,画分析树和抽象语法树3、 正则表达式,NFA, DFA之间的转换;DFA最小化;DFA用伪代码表示出 来。4、 二义性文法可生成带有两个不同分析树的串的文法称作二义性文法 改二义性文法:基本步骤:把出现二义的部分优先级分块。然后每个优先级用一个新的 VN表示。最底优先级的VN符号要能由VT符号定义如:A t|a5、 给定文法写递归下降分析,写DFA表驱动算法6、 给定文法,提取左因子,消除左递归;构造 first、follow 集合;说明语法是否为LL (1):若满足以下条件,则BNF中的文法就是LL (1)文法:1)在每个产生式A X1|X2|.|Xn中对于所有的 i 和 j: 1 三i,j 三n.iz j,first(X) A first(X)为空;2)若对于每个非终结符A都有first(A)包含了那么first(A) Afollow(A)为空构造LL (1)分析表;写出分析过程7、 给定文法,构造LR(0)项目的DFA;构造SLR(1)的分析表;文法是否为SLR(1)或LR(0)?若不是,说明原因;给出SLR(1)或LR(0)的分析步骤

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1