欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    【2022精编】《编译原理》期末复习资料汇总.docx

    • 资源ID:45154165       资源大小:324.19KB        全文页数:17页
    • 资源格式: DOCX        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    【2022精编】《编译原理》期末复习资料汇总.docx

    编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第17页 共17页编译原理期末复习资料【题 1】1. (a|b)*(aa|bb)(a|b)*画出状态转换图。IaIb 1,2,32,3,42,3,5 2,3,42,3,4,6,7,82,3,5 2,3,52,3,42,3,5,6,7,8 2,3,4,6,7,82,3,4,6,7,82,3,5,7,8 2,3,5,6,7,82,3,4,7,82,3,5,6,7,8 2,3,5,7,82,3,4,7,82,3,5,6,7,8 2,3,4,7,82,3,4,6,7,82,3,5,7,8IaIb123243325446575675746 新的状态转换图如下: (1)A=1,2,3,B=4,5,6,7 Aa=2,4 ×(2)A=1,3,B=2,C=4,5,6,7 Aa=2B,Ab=3,5 ×(3)A=1,B=2,C=3,D=4,5,6,7(单元素可以不用看,必有,古先看D) Da=4,7D,Db=5,6D,Aa=2B,Ab=3C,Ba=4D,Bb=3C,Ca=2B,Cb=5C,则有ab ABC BDCCBDDDD2. (a*|b*)b(ba)*的状态转换图。IaIb 1,2,3,42,43,4,5,6,8 2,42,45,6,8 3,4,5,6,8-3,4,5,6,7,8 5,6,8-7 3,4,5,6,7,86,83,4,5,6,7,8 76,8- 6,8-7IaIb1232243-54-657567-7-6新的状态转换图如下:化简:(用终结状态与非终结状态,然后输出状态一致分一类)。(1)A=1,2,6,B=3,4,5,7 Aa=2 ×(2)A=1,2,B=6,C=3,4,7,D=5 Cb=5,6 ×(只要有一个不属于任何一个集合,就不行)(3)A=1,2,B=6,C=3,D=4,7,E=5 Ab=3,4 ×(4) A=1,B=2,C=6,D=3,E=4,7,F=5 Aa=2B,Ab=3D,Ba=2B,Bb=4E,Ca=7E,Db=5F,Eb=6C,Fa=7E,Fb=5Fab ABD BBECE-D-FE-CFEF注意事项:知识要点:u 正则表达式:;是最左边一个字母一定是,其余字母为的任意组合,不包括。a和若干个a(包括0的情形)后跟一个b构成的符号串集合a和a后跟若干个(包括0的情形)b构成的符号串集合u 状态转换图(有穷状态自动机): 【题 2】1.求如下简单算术表达式文法中语法变量的FOLLOW集。解答:(1)求表达式文法的语法符号的FIRST集:FIRST(F)=(, idFIRST(T)=FIRST(F)=(, id FIRST(E)=FIRST(T)=(, id FIRST(E')=+,FIRST(T')=*, FIRST(+)=+, FIRST(*)=*FIRST(()=(FIRST())=)FIRST(id)=id(2)求表达式文法的语法变量的 FOLLOW集:FOLLOW(E) = #, ) FOLLOW(E')= FOLLOW( E ) = #, ) FOLLOW(T) = FIRST(E')-FOLLOW(E)FOLLOW(E')= +,),#FOLLOW(T')= FOLLOW(T)= +,),#FOLLOW(F) = FIRST(T)FOLLOW(T)FOLLOW(T') =*,+,),# 6知识点First集合的求法: First集合最终是对产生式右部的字符串而言的,但其关键是求出非终结符的First集合,由于终结符的First集合就是它自己,所以求出非终结符的First集合后,就可很直观地得到每个字符串的First集合1. 直接收取:对形如U->a的产生式(其中a是终结符),把a收入到First(U)中2. 反复传送:对形入U->P1P2P3Pn的产生式(其中P是非终结符),应先把First(P1)中的全部内容传送到First(U)中,如果P1中有,把First(P2)中的内容传送到First(U)中,类推直到Pi中无。Follow集合的求法: Follow集合是针对非终结符而言的,Follow(U)所表达的是句型中非终结符U所有可能的后随终结符号的集合,特别地,“$”是识别符号的后随符,先直接加入到S中。1. 直接收取:注意产生式右部的每一个形如“Ua”的组合,把a直接收入到Follow(U)中。2. 直接收取:对形如“UP”(P是非终结符)的组合,把First(P)中非收入到Follow(U)中。3. 反复传送:对形如U>aP的产生式(其中P是非终结符)或U->aPQ(P,Q为非终结符且Q中含),应把Follow(U)中的全部内容传送到Follow(P)中。例 文法:SABc Aa| Bb|First集合求法:能由非终结符号推出的所有的开头符号或可能的,但要求这个开头符号是终结符号。如此题A可以推导出a和,所以FIRST(A)=a,;同理 FIRST(B)=b,;S可以推导出aBc,还可以推导出bc,还可以推导出c,所以FIRST(S)=a,b,cFollow集合的求法:紧跟随其后面的终结符号或。但文法的识别符号包含,在求的时候还要考虑到。 具体做法是把所有包含你要求的符号的产生式都找出来,再看哪个有用。 Follow(S)=如求A的,产生式:SABc Aa| ,但只有SABc 有用。跟随在A后面的终结符号是FIRST(B)=b,当FIRST(B)的元素为时,跟随在A后的符号就是c,所以 Follow(A)=b,c同理Follow(B)=c2.对下面的文法 G : (1)计算这个文法的每个非终结符的 FIRST 集和 FOLLOW 集。(2) 证明这个方法是 LL(1) 的。(3) 构造它的预测分析表。解:(1)计算这个文法的每个非终结符的FIRST集和FOLLOW集。 FIRST集合有: FIRST(E)=FIRST(T)=FIRST(F)=FIRST(P)=(,a,b,; FIRST(E')=+, FIRST(T)=FIRST(F)=FIRST(P)=(,a,b,; FIRST(T')=FIRST(T)=(,a,b,; FIRST(F)=FIRST(P)=(,a,b,; FIRST(F')=FIRST(P)=*,; FIRST(P)=(,a,b,; FOLLOW集合有: FOLLOW(E)=),#; FOLLOW(E')=FOLLOW(E)=),#; FOLLOW(T)=FIRST(E')FOLLOW(E)=+,),#;/不包含 FOLLOW(T')=FOLLOW(T)=FIRST(E')FOLLOW(E)=+,),#; FOLLOW(F)=FIRST(T')FOLLOW(T)=(,a,b,+,),#;/不包含 FOLLOW(F')=FOLLOW(F)=FIRST(T')FOLLOW(T)=(,a,b,+,),#; FOLLOW(P)=FIRST(F')FOLLOW(F)=*,(,a,b,+,),#;/不包含 (2)证明这个方法是LL(1)的。 各产生式的SELECT集合有: SELECT(E->TE')=FIRST(T)=(,a,b,; SELECT(E'->+E)=+; SELECT(E'->)=FOLLOW(E/)=),# SELECT(T->FT')=FIRST(F)=(,a,b,; SELECT(T'->T)=FIRST(T)=(,a,b,; SELECT(T'->)=FOLLOW(T/)=+,),#; SELECT(F->PF')=FIRST(P)=(,a,b,; SELECT(F'->*F')=*; SELECT(F'->)=FOLLOW(F')=(,a,b,+,),#; SELECT(P->(E)=( SELECT(P->a)=a SELECT(P->b)=b SELECT(P->)= 可见,相同左部产生式的SELECT集的交集均为空,所以文法GE是LL(1)文法。 (3)构造它的预测分析表。 文法GE的预测分析表如下: 【题 3】考虑下面的文法:(1) 求出所有语法变量的FIRSTOP集合和LASTOP集合。(2) 构造文法的算符优先关系表,并判断是否为算符优先文法。(3) 计算文法的算符优先函数。(4) 给出表达式和id*(id+id)的算符优先分析过程。解答:(1) 所有语法变量的FIRSTOP集合和LASTOP集合如下:(2)文法的算符优先关系表算符关 系算 符+-*/()id+-*/()id因为文法中任意两个终结符之间只存在一种关系,因此该文法为算符优先文法。(3) 文法的算符优先函数优先函数算符+-*/()id#(栈内优先函数)22440440(栈外优先函数)11335050(4) 表达式的算符优先分析过程步骤栈输入串优先关系动作1#+#2#+#移进3#F+#用归约4#F+#移进+5#F+#移进6#F+F#+#用归约7#E#+#用归约表达式id*(id+id)的算符优先分析过程步骤栈S优先关系当前输入字符R输入字符串0#id*(id+id)#1#id*(id+id)#2#N*(id+id)#3#N*(id+id)#4#N*(id+id)#5#N*(id+id)#6#N*(N+id)#7#N*(N+id)#8#N*(N+id)#9#N*(N+N)#10#N*(N)#11#N*(N)#12#N*N#13#N停止#2.已知文法 GS 为: S->a|(T) T-> T,S|S (1) 计算 GS 的 FIRSTVT 和 LASTVT 。 (2) 构造 GS 的算符优先关系表并说明 GS 是否为算符优先文法。 (3) 计算 GS 的优先函数。 (4) 给出输入串 (a,a)# 的算符优先分析过程。解:(1)各符号的FIRSTVT和LASTVT:(2)算符优先关系表: 因为文法中任意两个终结符之间只存在一种关系,因此该文法为算符优先文法。(3)对应的算符优先函数为: (4)句子(a,a)#分析过程如下: 知识点 FIRSTVT 及 LASTVT 求法 构造集合 FIRSTVT ( P )的两条规则。 (i)若有产生式 Pa ,或 PQa ,则 a FIRSTVT ( P )。 (ii)若 a FIRSTVT ( P ),且有产生式 PQ ,则 a FIRSTVT ( P )。 构造集合 FIRSTVT ( P )的两条规则 (i)有产生式Pa,或PaQ,则aLASTVT(P)。(ii)若 a LASTVT ( Q ),且有产生式 PQ ,则 a FIRSTVT ( P )。【题 4】1. 令文法G:S BB B aB B b 判断该文法是否LR(1)文法,若是构造LR(1)分析表。解1)将文法G拓广为G:(0)SS (1)SBB (2)BAb (3)Bb 2)求出G的非终结符的FOLLOW和FIRST集AFOLLOW(A)FIRST(A)S#a,bS#a,bBa,b,#a,b3)构造个G的LR(1)的项目集族及GO函数I5:SBB.,#I2:SB.B,# B.Ab,# B.b,#I1:SS.,# BI7:Bb.,#I6:Ba.B,# B.Ab,# B.b,# S B a bI0:S.S,# S.BB,# B.aB,a|b B.b,a|bI9:BaB.,# BI3:Ba.B,a|b B.aB,a|b B.b,a|b a a aI8:BaB.,a|b B bI4:Bb.,a|b b3)判断文法是否为LR(1)文法。 该文法构出的CI0, I1, I2, I3, I4, I5, I6, I7, I8, I9中,每个状态集均无冲突,所以该文法是LR(1)文法。4)构造LR(1)分析表状态ACTIONGOTOab#SB0S3S4121acc2S6S753S3S484r3r35r16S6S77r38r2r29r2填空题1.消除左递归(P124)文法左递归问题:一个文法是含有左递归的,如果存在非终结符P。u 直接消除见诸于产生式中的左递归: 假定关于非终结符P的规则为PPa | b,其中b不以P开头。那么,我们可以把P的规则等价地改写为如下的非直接左递归形式:PbP¢P¢aP¢|e 一般而言,假定关于P的全部产生式是PPa1 | Pa2 | | Pam | b1 | b2|bn,其中,每个a都不等于e,而每个b都不以P开头,那么,消除P的直接左递归性就是把这些规则改写成: Pb1P¢ | b2P¢ | | bnP¢P¢a1P¢ | a2P¢ | | amP¢ | e例 文法 EET | T TT*F | F F(E) | i 经消去直接左递归后变成: ETE¢ E¢+TE¢ | e TFT¢ T¢*FT¢ | e F(E) | i 例如文法SQc|cQRb|bRSa|a 虽没有直接左递归,但S、Q、R都是左递归的 SÞQcÞRbcÞSabcu 一个文法消除左递归的条件:1) 不含以e为右部的产生式(无空产生式);2) 不含回路。u 消除左递归的算法:1. 把文法G的所有非终结符按任一种顺序排列成P1,P2,Pn;按此顺序执行;2. FOR i:=1 TO n DO BEGIN FOR j:=1 TO i-1 DO 把形如PiPjg的规则改写成 Pid1g|d2g|dkg ; (其中Pjd1|d2|dk是关于Pj的所有规则) 消除关于Pi规则的直接左递归性 END3. 化简由2所得的文法。即去除那些从开始符号出发永远无法到达的非终结符的产生规则。例 考虑文法G(S)SQc|cQRb|bRSa|a令它的非终结符的排序为R、Q、S。对于R,不存在直接左递归。把R代入到Q的有关候选后,把Q的规则变为QSab | ab | b,现在的Q不含直接左递归。把Q代入到S的有关候选后,S变成SSabc | abc | bc | c,由于SSabc | abc | bc | c存在直接左递归,消除S的直接左递归后:SabcS¢ | bcS¢ | cS¢S¢abcS¢ | eQSab |ab | bRSa|a关于Q和R的规则已是多余的,化简为: SabcS¢ | bcS¢ | cS¢ S¢abcS¢ | e注意:由于对非终结符排序的不同,最后所得的文法在形式上可能不一样。但不难证明,它们都是等价的。同样:例 考虑文法G(S)SQc|cQRb|bRSa|a非终结符排序选为S、Q、R,那么, R Qca|ca|a R Rbca|bca|ca|a最后所得的无左递归文法是: SQc | c QRb | b RbcaR¢ | caR¢ |a R¢ R¢ bca R¢ | e不同排序所得的文法的等价性是显然的。2. 文法的分类(Chomsky体系)(P41)(1)短语结构文法(PSG)如果G满足文法定义的要求,则是型文法(短语结构文法PSG: Phrase Structure Grammar )。L(G)为PSL。(1)上下文有关文法(CSG)如果对于,均有|成立(除外),则称为型文法。即:上下文有关文法(CSG) L(G)为1型/上下文有关/敏感语言(CSL)。其他定义方法:设文法GS,若P中任一产生式的形式为 ,其中,(VT)*,A V。(2) 上下文无关文法(CFG)如果对于,均有|,并且V成立,则称G为型文法。即:上下文无关文法(CFG:)L(G)为2型/上下文无关语言(CFL),CFG能描述程序设计语言的多数语法成分。(3)正规(则)文法(RG)设,,wT+或为,如果对于,均具有如下形式:右线性(Right Linear)文法:或左线性(Left Linear)文法:或都是型文法(正规文法RG),L(G)为3型/正规集/正则集/正则语言(RL),能描述程序设计语言的多数单词。左、右线性文法不可混用。例正规文法(RG):G1:S®0 | 1 | 00 | 11 G3:S®0 | 1 | 0A | 1B,A ®0,B ®1G5:S®0 | 0SG8:A®aS | bS | cS | a | b | c上下文无关文法(CFG):G2:S®A | B | AA | BB, A ®0,B ®1 G4:S®A | B | BB, A ®0,B ®1 G14:S®0 | 1 | 2 | 3 | 0S0 | 1S1 | 2S2 | 3S3上下文有关文法(CSG):G:SCDCaCACACaCaDdaDdAcdecl = (,T,)是一个文法, P*G是0型文法,L(G)是0型语言;-其能力相当于图灵机*|:G是1型文法,L(G)是1型语言(除);-其识别系统是线性界限自动机*N : G是2型文法,L(G)是2型语言;-其识别系统是不确定的下推自动机*AaB或Aa: G是右线性文法,L(G)是3型语言ABa或A: G是左线性文法,L(G)是3型语言-其识别系统是有穷自动机3.逆波兰表示法逆波兰表达式又叫做后缀表达式。在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,所以,这种表示法也称为中缀表示。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法。按此方法,每一运算符都置于其运算对象之后,故称为后缀表示。将一个普通的中序表达式转换为逆波兰表达式的一般算法是: (1) 首先构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越高的原则。 (2) 读入一个用中缀表示的简单算术表达式,为方便起见,设该简单算术表达式的右端多加上了优先级最低的特殊符号“#”。 (3) 从左至右扫描该算术表达式,从第一个字符开始判断,如果该字符是数字,则分析到该数字串的结束并将该数字串直接输出。 (4) 如果不是数字,该字符则是运算符,此时需比较优先关系。做法如下:将该字符与运算符栈顶的运算符的优先关系相比较。如果,该字符优先关系高于此运算符栈顶的运算符,则将该运算符入栈。倘若不是的话,则将栈顶的运算符从栈中弹出,直到栈顶运算符的优先级低于当前运算符,将该字符入栈。 (5)重复上述操作(3)-(4)直至扫描完整个简单算术表达式,确定所有字符都得到正确处理,我们便可以将中缀式表示的简单算术表达式转化为逆波兰表示的简单算术表达式。逆波兰表达式,它的语法规定,表达式必须以逆波兰表达式的方式给出。逆波兰表达式又叫做后缀表达式。这个知识点在数据结构和编译原理这两门课程中都有介绍,下面是一些例子: 正常的表达式 逆波兰表达式 a+b -> a,b,+ a+(b-c) -> a,b,c,-,+ a+(b-c)*d -> a,b,c,-,d,*,+ a+d*(b-c)->a,d,b,c,-,*,+ a=1+3 -> a=1,3 + http=(smtp+http+telnet)/1024 ->http=smtp,http,telnet,+,+,1024,/4. 三地址码的几种表示()四元式 (op,arg1,arg2,result)例:x:=y op z 的四元式(op,y,z,x)例:a:=b * -c + b* -c(,c,_,T1)(*,b,T1,T2)(,c,_,T3)(*,b,T3,T4)(+,T2,T4,T5)(:=,T5,_,a)()三元式 为了避免把临时变量填入符号表,用中间代码地址(指针)代表运算对象。(op,arg1,arg2)例:a:=b * -c + b * -c(0)(,c,_ )(1)(*,b,(0)(2)(,c,_ )(3)(*,b,(2)(4)(+,(1),(3)(5)(:=,a,(4)例:xi:= y(0)(= ,x,i)(1)(:=,y,(0))用两条三元式表示索引赋值。例:x:=yi(0)( =,y,i) (1)(:=,x,(0)例9 将下列语句翻译为逆波兰表示(后缀式)、三元式和四元表示: a:=(b+c)*e+(b+c)/f【解】解题思路把中缀式转换为后缀式的简单方法:按中缀式中各运算符的优先规则,从最先执行的部分开始写,一层层套。如ab+cada+be,先把b+c写为bc+;然后把a套上去,成为abc+;再把ad表示为ad;然后把套上去,成为abc+ad,依此类推。四元式由4个部分组成:算符op、第1和第2运算量arg1和arg2,以及运算结果result。运算量和运算结果有时指用户自定义的变量,有时指编译程序引进的临时变量。如果op是一个算术或逻辑算符,则result总是一个新引进的临时变量,用于存放运算结果。三元式只需3个域:op、arg1和arg2。与四元式相比,三元式避免了临时变量的填入,而是通过计算这个临时变量的语句的位置来引用这个临时变量。我们很容易把一个算术表达式或一个赋值句表示为四元式序列或三元式序列。解答逆波兰表示为:bc+e*bc+f/+:=三元式序列为:(1)(+,b,c)(2)(* ,(1) ,e)(3)(+ ,b,c)(4)(/ ,(3) ,f)(5)(+ ,(2) ,(4)(6)(:= ,a,(5)四元式序列为:(1)(+ ,b,c,T1)(2)(* ,T1,e,T2)(3)(+ ,b,c,T3)(4)(/ ,T3,f,T4)(5)(+ ,T2,T4,T5)(6)(:= ,T5,-,a)练习给出下列表达式的逆波兰表示、四元式和三元式形式。()()() 句柄设有CFG G=(V,T,P,S),G的句型的最左直接短语称为句柄。附:定义2.27 设有CFG G=(V,T,P,S),(VT)*,S,A,则称是句型的相对于变量A的短语(phrase);如果此时有A,则称是句型的相对于变量A的直接短语。在无意义冲突时,简称为句型的直接短语,直接短语也叫做简单短语。例 对于文法的句型来说,它的短语有:,。其中直接短语有:,。而就是句型的句柄。6. 综合属性和继承属性如果节点的属性值是通过分析树中该节点或其子节点的属性值计算出来的,则称其为综合属性;如果节点的属性值是由该节点、该节点的兄弟节点或父节点的属性值计算出来的,则称其为继承属性。例1 文法符号的属性有综合属性和继承属性两种。例2 S属性文法中的每个文法符号,只含有综合属性。例3 终结符只有综合属性,它们有词法分析器提供。7. 语法制导定义(0) s'->sprintf(“0”);(1) s->BB printf(“1”); (2) B->aB printf(“2”); (3)B->b printf(“3”); 输入#bab# 输出结果是33210第 17 页 共 17 页

    注意事项

    本文(【2022精编】《编译原理》期末复习资料汇总.docx)为本站会员(飞****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开