编译原理大学期末复习笔记-有缘者得

image-20210625213902300

代码优化不考,考前把题型自己做一遍。

主要视频(一到六章):

参考:

image-20210630101810228

第一章:概述

  1. 编译原理八个过程

    image-20210630094907654

  2. 正闭包/自反传递闭包,A+B与AB的概念,AB实际上不是A交B,它由两部分构建而成

    image-20210630095229523(注意+和*)

    image-20210630095642962

    讨论0.1.2.3,A1是1,因此右边是0.1.2,闭包列出来,A0,A1,A2,U与和都是加,AB是乘。

第二章:词法分析

  1. 右线性文法,也是正规文法,3型文法(aB)。 想象A->上面一个a,右边一个B,右边必须有终结符,以及构造一个(先推出句型,然后根据这个画状态转换图)。

    注意终止状态的时候,要补一个终结符。这个题是构造,它把原来的式子先画出语法树,然后去画了状态转换图,再构造了右线性文法。A->a直接指向终态。

    左线性文法反过来,终结符在右边,A->Bb等价为B->bA,而且A->a变成了初态指向A。 (语法树不带箭头)

    image-20210630113151651

    (本题目有个隐含条件,nmk均大于0,所以状态转换图的箭头上不是ε,而是具体abc的值)

    image-20210630120908035

    左线性文法少一个S,因为S->aA变成了A->a,与右线性文法类似,S与A之间的,a单独写出。

    C->cC|c,是C与c之间的c

    (11条消息) 正规文法构造状态转换图,状态转换图构造正规文法—编译原理_Cenhelm的博客-CSDN博客_编译原理状态转换图怎么画

  2. 状态转换图,NFA,DFA…注意一个指向S的箭头,还有终止状态的两个圈。

    image-20210630115720849

    image-20210630115728224

  3. 正规表达式转NFA

    image-20210630124211715

    image-20210630124428275

  4. NFA转DFA确定化

    先列出0的空闭包,在这个基础上一步步推a和b的闭包,注意圆圈里的是数字,箭头上是ab,Ia代表先接触a,后面才再看ε。

    image-20210630121547170

    DFA确定化和最小化 - 简书 (jianshu.com)

  5. DFA最小化(根据终态分组与合并)(用π和π new分组)

    (先按照是否终态分组,然后每个分组都进行只对a的推导,如果结果所在的组不同,就再分组,然后再只对b推导,最后删掉,递推分析。)

    image-20210630124026882

    注意最小化中,本题的4.6.8由于没有什么能推出它,所以可以消去,简便处理。

    编译原理正规表达式转NFA到DFA再化简_哔哩哔哩_bilibili

第三章:文法和语言

  1. 记住文法的定义,注意顺序image-20210630095914580

  2. image-20210630100259154

    image-20210630100400913

    写出文法,这里U用 | 表示,#没有特殊含义,就是个符号。写G[S]注意前三个都是集合。

    image-20210630100505682

    这个注意+ Z | - Z,还有CC,再就是Z->A的情况,很考验全面程度吧

  3. 正规文法与状态转换图的互换

  • image-20210627200213649

  • image-20210627200744162

第四章:自顶向下语法分析

image-20210630123859429

  1. image-20210630124606322

    image-20210630100806868

    两类语法,注意是规约不是归约。

    最右推导是规范推导,生成右句型,称作规范句型。

    而最左规约是规范规约。最左规约是最右推导的逆过程。

  2. 语法树:直接子树(只有根和叶子)。image-20210630101035877

    特点:image-20210630101956946

    写法:image-20210630102023617

    可以看出包括+这种的,它们是终结符,也要给一个线连接上。

    编译原理通过语法树找短语,直接短语,句柄,素短语,直接短语_哔哩哔哩_bilibili

  3. image-20210630102748962

    二义性,根据同样的最左(最右)推导,能画出不同的语法树。

    两个不同的最左推导,也是两个不同的最右推导。下面这两个图,从左看和从右看,图一样,式子不一样,也就是说有4个式子…两个图代表二义性,每个图2个式子代表两种推导。

    NOTE:类似E->EA,A->+b*C,最终样子是E->E+b*c,并不带括号。

    (下图全是最左推导)

    image-20210630103051396

  4. 概念:短语,素短语,直接短语,句柄。

    image-20210630103602183

    image-20210630103919940

    如何找句柄,各步骤的句柄:最左直接短语是相对最左规范规约来的,也就是把它的逆过程最右推导列出来,看最后被推导的终结符是谁,这里bbAacb->bbaacb,所以句柄是a。而每一步的句柄,就是删掉上个句柄,剩下的,比方说bAacb->bbAacb,所以A->bA,那一步的句柄就是bA!

  5. 化简文法:image-20210630112716627

    2.4文法的化简和改造_哔哩哔哩_bilibili

    • 判断LL(1)文法的三个步骤(这里E’与T’碰巧带ε了而已,判断是看ε,交集。建表用的是FOLLOW(xx’))

      image-20210630134409106

    • 消除左递归,构建等价的LL(1)文法

      image-20210630131145185

      这里的“,”原来是个符号,需要当成终结符来看

      image-20210630131514145

      image-20210630131402288

      image-20210630140004042

      编译原理第五章——消除左递归 - 程序员大本营 (pianshen.com)

    • 构建First和Follow集

      First集不是那么简单,要考虑ε,所以代入非终结符去看是比较稳妥的。

      image-20210630132533632

      image-20210630132615723

      这里代入B和C,除非B,C全是ε,不然A推不出ε,如果B是ε,C是c,那么推出c

      image-20210630132859075

      image-20210630133428131Follow集,情况2的α可以空,β不可以,还要注意去掉ε

    • 判断:1.先消除左递归和化简 2.同一个式子的几个分式的First不相交3.A->ε的话,保证它First和Follow不相交(也就是等于Φ)image-20210630135436082

    • 建立LL(1)分析表(预测分析表)

      image-20210630140132801

      image-20210630140145618

      左边非终结符,上面终结符,包括#,列式子按照First集。然后带’的这种,E’和T’,要按照Follow再列一次,方法和First一样,只不过填的是T‘->ε。

    • image-20210626225243790

    • 只要10分钟,一遍学会👉LL(1)的First集和Follow集_哔哩哔哩_bilibili

第五章:自底向上语法分析

  1. 项目定义和四类项目

    • 判断LR(0)分析表的两个条件

    • 画出LR(0)的DFA图(加S’拓广文法,加·,从S’递推文法,In画框,根据·后不同的非终结符讨论,·后移一位并递推,直到In不存在重复)

    • (注意后面rn要用到标号,S’是标号是0)

    • 一堆递推只算一个In,先列完前面的,然后递推

    • image-20210626225028815

    • image-20210630142111554

    • image-20210630142605650

    • image-20210630143511167

    • ACTION是终结符,GOTO是非终结符,左边S2与右边的2区别不大,如果点在最后,要么是规约要么是接受项目,移不动,所以在它这儿写rn,S’开头(不是S)的接受项目写acc

    • image-20210630142855168

    • 建立LR(0)分析表。ACTION GOTO (非终结符 #)(终结符)(标数字)

      image-20210630141020675

    • (四类元素:acc Sn rn n)

    • (特别注意,接受项目在拓广文法以后,变为了S’->而不是S->,判断是否有移进冲突时注意)image-20210626231039452

    • image-20210626230958317

    • 判断SLR(1)等文法

    • (只要是移进和规约在同一个In就可以进行判断了,移进前面的阿尔法可以为空,关键是后面的x,如果FOLLOW(A)(其实在填表的时候,也是在FOLLOW的地方填入了ε),和x的交集不为空,则不是SLR(1)文法,如果是两个移进,就两个FOLLOW交集判断)

    • image-20210627134559557

    • 多个移进全部算进去,FOLLOW(S)是第一个,ab是后三个,交集注意包含#号(也不一定,但得注意)

第六章:语法制导翻译&中间代码生成

  1. 逆波兰表示

  2. 三类转移操作符和四类优先级(非与或**“W”** ) (1+2=3^

    image-20210627213851217

image-20210630143047347

image-20210630143105761

image-20210630143201697

image-20210630143228641

第七章:运行时存储空间组织

没有笔记

  • 13
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值