
编译原理
编译原理学习笔记
海轰Pro
微信小程序:「海轰Pro」
微信公众号:「海轰Pro」
知乎:「海轰Pro」
微博:「海轰Pro」
展开
-
编译原理学习笔记(三十一)~习题
题目文法:L →E ; L | εE →TE’ E’→ + T E’ | - T E’ | εT →FT’ T’→*F T’|/FT’|mod FT’|εF →(E) | id | numFIRST()和FOLLOW()集合:FIRST(F/T/E)= {( id num}FIRST(T') = {* / mod ε}FIRST(E') = {+ - ε}FIRST(L) = {ε ( id num}FOLLOW(L) = {#}FOLLOW(E/E'原创 2020-06-09 17:22:06 · 2112 阅读 · 1 评论 -
编译原理学习笔记(三十一)~习题
题目考虑文法:S–>aSbS| bSaS| ε为句子abab构造两个不同的最左推导,并画出分析树。为句子abab构造对应的最右推导。解原创 2020-06-07 16:32:28 · 3511 阅读 · 0 评论 -
编译原理学习笔记(三十)~习题:写出LR分析器对于输入adbdb$的格局变化和相应动作
题目解原创 2020-06-07 15:22:42 · 1751 阅读 · 1 评论 -
编译原理学习笔记(二十九)~习题:分析句子 id--id*id的 最右推导过程,画出分析树,找出和分析过程中每一步的对应关系。
题目分析句子 id–id*id的 最右推导过程,画出分析树,找出和分析过程中每一步的对应关系。语法如下:E → E - T (1)E → T (2)T → T * F (3)T → F(4)F → -F (5)F → id (6)分析表如下:推导过程如下:解分析树如下:...原创 2020-06-07 14:27:53 · 2746 阅读 · 1 评论 -
编译原理学习笔记(二十八)~习题:构造基于LR(0)项目的DFA,以及基于LR(1)项目的DFA及分析表
题目构造下面文法基于LR(0)项目的DFA,以及基于LR(1)项目的DFA及分析表。解FOLLOW集合(1)基于LR(0)项目识别活前缀的DFA(2)基于LR(1)项目识别活前缀的DFASLR分析表规范的LR分析表原创 2020-06-07 14:00:41 · 4653 阅读 · 0 评论 -
编译原理学习笔记(二十七)~习题:构造基于LR(0)、LR(1)项目的识别活前缀的DFA(2)
题目文法:S–>Aa | bAc | Bc | bBaA–>dB–>d通过构造基于LR(0)、LR(1)项目的识别活前缀的DFA,判断上面文法是否是SLR(1)文法??是否是LALR(1)文法??是否是LR(1)文法??依次说明理由。解(1)基于LR(0)项目识别活前缀的DFA、暂无,参考上一篇博文。(2)基于LR(1)项目识别活前缀的DFA判断:是LR(1) 的,因为该DFA是确定的,没有冲突!I5、 I9合并后,读入a或c时,不知道按照哪一个产生原创 2020-06-07 13:50:29 · 6537 阅读 · 3 评论 -
编译原理学习笔记(二十六)~习题:构造基于LR(0)、LR(1)项目的识别活前缀的DFA
题目文法:S–>Aa | bAc | dc | bdaA–>d 通过构造基于LR(0)、LR(1)项目的识别活前缀的DFA,判断上面文法是否是SLR(1)文法??是否是LALR(1)文法??是否是LR(1)文法??依次说明理由。解FOLLOW集(1)基于LR(0)项目的识别活前缀的DFA(2)基于LR(0)、LR(1)项目的识别活前缀的DFA判断:基于LR(0)项目的识别活前缀的DFA中:在I4第一个项目要求面对c移进到8原创 2020-06-07 13:37:32 · 7522 阅读 · 0 评论 -
编译原理学习笔记(二十五)~习题
题目 分析课件中为台式计算器文法设计生成语法树的语义规则,尝试为该文法设计生成分析树的语法制导定义。解原创 2020-06-06 22:11:24 · 1502 阅读 · 1 评论 -
编译原理学习笔记(二十四)~习题
题目构造语法树的语法制导定义翻译为LR翻译器的栈操作代码。解原创 2020-06-06 21:45:10 · 1878 阅读 · 1 评论 -
编译原理学习笔记(二十三)~习题
题目根据下面的语法制导翻译方案,画出赋值语句x:=a+b*c的注释分析树解原创 2020-06-06 21:32:11 · 1755 阅读 · 0 评论 -
编译原理学习笔记(二十二)~习题:声明语句的翻译
原创 2020-06-06 20:29:04 · 1823 阅读 · 1 评论 -
编译原理学习笔记(二十一)~习题:声明语句中各变量及过程在符号表中的存储结构
题目proc find;x : pointer;a : array [2] of int;y: int;proc swap;i: int;z: real;…endend写出上述过程声明语句中各变量及过程在符号表中的存储结构,标出子表之间的双项链以及表头处的总宽度。解原创 2020-06-06 20:26:26 · 1543 阅读 · 0 评论 -
编译原理学习笔记(二十)~习题:布尔表达式的短路、直接计算的三地址码
题目布尔表达式a<b or c<d and not e<f画出注释分析树。写出直接计算和短路计算的三地址码序列。体会在直接计算中出现了显式的逻辑运算三地址码,在短路计算中没有显式的逻辑运算三地址码。解:1、注释分析树2、(1)直接计算三地址码(2)短路计算三地址码...原创 2020-06-06 19:47:03 · 4356 阅读 · 1 评论 -
编译原理学习笔记(十九)~习题:将语句翻译为三地址代码
题目1.把下列语句翻译成三地址代码while a > 10 do if b = 100 then while a < 20 do a := a + b – 1解:(原创 2020-06-06 19:42:17 · 16731 阅读 · 1 评论 -
编译原理学习笔记(十八)~LL(1)文法
定义 文法G被称为是LL(1)文法,当且仅当为它构造的预测分析表中不含多重定义的条目。第一个L代表从左到右扫描输入序列,第二个L表示产生最左推导,1表示在确定每一步 动作时向前看一个终结符。具体怎么理解呢? 举个简单的例子吧,通过自上而下语法分析,我们可以利用FIRST()和FOLLOW()集合构造出预测分原创 2020-06-05 21:53:14 · 6299 阅读 · 1 评论 -
编译原理学习笔记(十七)~自上而下语法分析之构造预测分析表
方法我的理解:首先分别计算出FIRST()和FOLLOW()集合在对每一个非终结符的FIRST()依次分析,假设有E–>TL,其中FIRST(E)={+,-},那么在分析表中[E,+]和[E,-]对于的框框就应该填写E–>TL。注意:如果FIRST(E)中含有空集。emm,还是同样假设有E–>TL,其中FIRST(E)={+,-,空},其FOLLOW(E)={mod,*},那么[E,+]和[E,-]对于的框还是E–>TL,而这里还需要加上[E,mod]和[E, 乘法原创 2020-06-05 21:26:55 · 2289 阅读 · 1 评论 -
编译原理学习笔记(十六)~将正规式构造为CFG(上下文无关文法)
原创 2020-06-05 20:18:33 · 2638 阅读 · 1 评论 -
编译原理学习笔记(十五)~最小化DFA
概念 最小化:优化DFA,使其状态数最少。 那么什么时候状态数是最少的呢?这里我们需要介绍两个新的名词:可区分和不可区分。官方定义: 可区分:对于任何两个状态t和s,若从一状态出发接受输入字符串ω,而从另一状态出发不接受ω原创 2020-06-05 19:27:12 · 34638 阅读 · 1 评论 -
编译原理学习笔记(十四)~识别={0,1}上能被能5整除的二进制数
题目例:识别 ={0,1}上能被能5整除的二进制数正解解释:状态0、1、2、3、4表示被5除后余数为0 1 2 3 4 的时候(就是圆圈中的数字表示余数为多少)机器对于一个二进制数字,是从左到右,逐个数字扫描。比如二进制数字10010,机器先读入的数字是1,再是0, 0,1, 0。所以第一个读入的数字不是0就是1。如果是0,那么被5除后余数是0(后面统称余数),进入0状态;如果是1,那么余数就是1,进入1状态。第二个读入的数字也不是0就是1.但是这里需要我们对第一个数字分情况进行讨论:原创 2020-06-05 18:22:04 · 4177 阅读 · 0 评论 -
编译原理学习笔记(十三)
课堂题目1.把下列语句翻译成三地址代码while a > 10 doif b = 100 thenwhile a < 20 doa := a + b – 12.把下列语句翻译成三地址代码if a>10 and c>d thenif b=100 then a := a / belse a := a * b题目答案题目一:(1) if a>10 goto (3)(2) goto -(3) if b==100 goto (5) M3.stat(4)原创 2020-05-14 22:45:31 · 2462 阅读 · 0 评论 -
编译原理学习笔记(十二)
课后习题布尔表达式a<b or c<d and not e<f画出注释分析树。写出直接计算和短路计算的三地址码序列。体会在直接计算中出现了显式的逻辑运算三地址码,在短路计算中没有显式的逻辑运算三地址码。习题答案...原创 2020-05-11 15:58:22 · 1962 阅读 · 0 评论 -
编译原理学习笔记(十一)~LALR分析法
前言 进行完LR(1)分析后,我们会发现,存在一些同心项目【同心:如果除展望符外,两个LR(1)项目集是相同的,则称这两个LR(1)项目集是同心的】那么是否可以简化这些项目呢?是的,可以,简化后就是LALR分析。LALR分析LALR:lookahead-LR基本思想:寻找具有相同核心的LR (...原创 2020-04-18 15:28:04 · 15807 阅读 · 1 评论 -
编译原理学习笔记(十)~LR(1)分析
前言 在SLR分析的最后,介绍了SLR依然可能存在语法冲突。为什么呢? 原因:SLR只是简单地考察下一个输入符号b是否属于与归约项目A→α相关联的FOLLOW(A),但b∈FOLLOW(A)只是归约α的一个必...原创 2020-04-18 15:06:50 · 33578 阅读 · 5 评论 -
编译原理学习笔记(九)~SLR分析
前言 在上一篇博客:LR(0)分析的最后,简要的说明了一下LR(0)分析在构建分析表时候会发生的一些冲突。那么有什么方法可以避免这种语法冲突呢? SLR分析就是对LR(0)分析产生冲突的一种解决办法。S:si...原创 2020-04-18 13:29:53 · 21569 阅读 · 7 评论 -
编译原理学习笔记(八)~FIRST()集和FOLLOW()集的求法
FIRST()定义:我的理解:对于一个X,求X的FIRST集合,就是在X 能够推导出来的 式子中的第一个终结符的集合。特殊情况:若X只能推出ε,那么就将ε加入FIRST集合举例说明:思路:FIRST集合可以按照 从下往上 的方法依次求出。 对于F,我们可以发现,F–>(E)|id,意思...原创 2020-04-01 17:00:30 · 6575 阅读 · 6 评论 -
编译原理学习笔记(七)~LR(0)分析
LR(0) 项目解释:右部某位置标有圆点的产生式称为相应文法的一个LR(0)项目(简称为项目)举例说明:S–>bBB则可以推导出4个项目注:项目描述了句柄识别的状态产生式A→ε 只生成一个项目A→ ·增广文法解释:如果G 是一个以S为开始符号的文法,则G的增广文法 G’ 就是在G中加上新开始符号S’ 和产生式S’ → S而得到的文法举例:为什么要引入增广文法呢?...原创 2020-04-16 13:10:07 · 34419 阅读 · 5 评论 -
编译原理学习笔记(六)~LR分析
LR分析法概念:LR文法(Knuth,1963)是最大的、可以构造出相应移入归约语法分析器的文法类名词解释:L:对输入进行从左到右的扫描R:反向构造出一个最右推导序列LR(k)分析:需要向前查看k个输入符号的LR分析。k=0和k=1这两种情况具有实践意义。当省咯(k)时,表示k=1那么什么是最右推导呢?注意:这里的R是反向最右推导。其实本质就是上图中的最左规约。举个形象的例子吧...原创 2020-04-16 10:09:46 · 8900 阅读 · 7 评论 -
编译原理学习笔记(五)
题目文法GS->cT|RTT->DR| εR->dR | εD->a|bd(1) 求文法G中每个非终结符的FIRST集合和FOLLOW集合;(2)判断该文法是否为LL(1)文法,并说明理由;(3)如果是LL(1)文法为该文法构造预测分析表。解答(1)(2)(3)...原创 2020-03-30 15:40:38 · 2386 阅读 · 1 评论 -
编译原理学习笔记(四)
题目文法GS→>cT| RTT→>DR| εR→dR| εD→a|bd求每个非终结符的FIRST集合和FOLLOW集合;正解更多需要更多学习资料、源码等资源的小伙伴可以去海轰的微信公众号:海轰Pro回复:海轰就可以啦(注意主页的使用说明哦o( ̄︶ ̄)o)...原创 2020-03-19 16:51:36 · 1552 阅读 · 0 评论 -
编译原理学习笔记(三)
题目将下面正规式描述的变量声明语句:(int | float ) id (, id)* ;改写为与其等价的上下文无关文法。这里的记号,也就是文法里的终结符只能包括以下五个:int、float为保留字;id为标识符;”,“和”;“为特殊符号;(), | 和 * 是正规式的运算符,不要混淆!正解更多需要更多学习资料、源码等资源的小伙伴可以去海轰的微信公众号:海轰Pro回复:...原创 2020-03-16 15:51:30 · 1971 阅读 · 1 评论 -
编译原理学习笔记(二)
题目L: { A, B, …, Z, a, b, …, z }, D: { 0, 1, …, 9 }自然语言描述下列运算所描述的语言特征,为每一个语言举两个符合该语言特征的例子:LDDLD*(L和D)DL+D (+代表正闭包)答案...原创 2020-03-12 10:07:20 · 1539 阅读 · 0 评论 -
编译原理学习笔记(一)
题目已知一个不确定的有限自动机(NFA)(1)描述该NFA所识别语言的特点,列举两个可识别的串;(2)写出与该NFA等价的正规式;(3)将其确定化(即转换为与NFA等价的DFA);(4)使用子集合并法求出最小DFA。我的答案标准答案...原创 2020-03-12 10:03:43 · 2560 阅读 · 0 评论