编译原理笔记

本文详细介绍了编译原理中的核心概念,包括非终结符与终结符的定义,first集和follow集的计算方法,并通过具体例子进行说明。此外,还涉及到了DFA的构造、LL(1)文法的处理以及SLR(1)分析表的生成。同时,提到了消除左递归和回溯在文法处理中的重要性,并讨论了词法分析器的工作流程和文法的分类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译原理

非终结符和终结符

非终结符是大写字母,剩下的是终结符,终结符是除非终结符外的字母,比如小写字母等。

first集

first集是看产生式左边,右边的话只看第一个终结符(小写字母),如果第一位是大写,小写字母在第二位,只看第一位的,那就去大写字母里找。
· 就是看右边第一个是不是终结符,是就直接写出来,不是就去它非终结符的产生式里面找。

eg:G(E)
E->TE’
E’->+E|ε
T->FT’
T’->T|ε
F->PF’
F’->*F’|ε
P->(E)|a|b|∧

first(E)={(,a,b,∧}
first(E’)={+,ε}
first(T)={(,a,b,∧}
first(T’)={(,a,b,∧,ε}
first(F)={(,a,b,∧}
first(F’)={*,ε}
first(P )={(,a,b,∧}

follow集

follow集是看产生式右边,比如求follow(E)就是在产生式右边找E在哪
eg:follow集 比如求follow(A)
1.看开始符,加上#
2.follow后面是小写字母,那就直接写小写字母
3.看右边A后面有没有东西,也就是非终结符,有的话不可->空,即ε,把first(东西)加入follow(A)中,扣除空集;为空则找follow(左边)
4.看右边A后面没有东西,follow(左边)加入follow(A)

eg1:G(E)
E->TE’
E’->+E|ε
T->FT’
T’->T|ε
F->PF’
F’->*F’|ε
P->(E)|a|b|∧

follow(E)={),#}
follow(E’)={),#}
follow(T)={+,),#}
follow(T’)={+,#,)} 将follow(T)加入follow(T’)中
follow(F)={(,a,b,∧,+,#,)} 将first(T’)加入follow(F)中
follow(F’)={(,a,b,∧,+,#,)} 将follow(F)和follow(F’)加入follow(F’)中
follow(P )={ *,(,a,b,∧,+,#,)}

eg2:
在这里插入图片描述

eg3:
在这里插入图片描述

构造DFA

1.A → α.aβ(可移进项):若当前剩余输入为终结符 a ,则移进 a
2.B → β. (可规约项):按产生式 B → β 进行规约
扫描.后有非终结符,要在项目那里抄对应的
产生式,如果.后无了,即结束了,构造SLR(1)分析表时需要求对应的follow集
在这里插入图片描述
在这里插入图片描述

LL(1)文法

1.消除左递归
2.消除回溯
在这里插入图片描述

把first集和follow集写出来
此题A’->ε则需要求follow集,即follow(A’),反之推出不为空则直接写first集
在这里插入图片描述

SLR(1)文法

遇到移进就填入ACTION表中
遇到规约就去找是第几个推导式,再填入GOTO表中
在这里插入图片描述

概念

词法分析器的输入是(符号串)
词法分析器用于识别(单词)

1.编译程序,解释程序的区别:有没有生成目标代码(前者有,后者无)
2.编译程序的五个主要阶段:词法分析,语法分许,语义分析与中间代码生成,代码优化,目标代码生成
3.克林闭包比正闭包多了一个空串
4.终结符组成的字符串叫句子
5.句型是可以含非终结符,句子一定不能含非终结符

短语

1.二义性 不同的语法树就存在二义性 一个文法的规约不一定是唯一的
2.直接短语(简单短语):语法树找两层的子树,叶子结点从左到右依次相连
3.句柄:最左边的直接短语
4.短语:语法树找到任意的子树,从左到右依次得到就是短语

文法的分类

PSG 0型文法(短语结构文法)
CSG 1型文法(上下文有关文法)
CFG 2型文法(上下文无关文法
BC 3型文法(正则文法)

属性

1.一个文法符号X所携带的语义信息称为X的语义属性,简称属性
2.综合属性:节点的属性值是通过分析树中该节点或其子节点的属性值计算出来的
3.继承属性:节点的属性值是由该节点、该节点的兄弟节点或父节点的属性值计算出来的
4.固有属性:通过词法分析直接得到的属性

### 回答1: 编译原理是针对计算机编程语言的研究,目的是将高级语言转化为机器语言并执行。编译原理笔记PDF是一份系统性的学习笔记,包含了编译原理的各个方面。这份学习笔记可以帮助学习者深入了解编译原理,掌握相关的技能。 编译原理笔记PDF通常包含以下几个方面的内容:编译原理的基本概念,编译器的结构与原理,语法分析器的设计与实现,语义分析器的设计与实现,中间代码生成和机器码生成,以及优化技术等。这些内容都是非常重要的编译原理知识点,可以帮助学习者理解编译原理的各个方面,并掌握相关的技术细节。 编译原理笔记PDF还可以提供一些编译原理实战案例,帮助学习者将所学知识应用到实际情况中。实际中有很多编译器与解析器需要我们开发,而这份学习笔记可以准确清晰地指导我们如何设计和开发这些编译器。 总之,编译原理笔记PDF是一份非常有价值的学习资料,可以帮助我们深入了解编译原理,掌握相关的技能,并将这些知识应用到实际情况中。 ### 回答2: 编译原理笔记PDF是一份非常全面的编译原理学习资料,其中详细介绍了编译原理的各个方面,包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等。这些内容不仅涵盖了编译原理的基本理论概念和算法,还提供了许多实际的实现案例和实际开发中的工具。 对于想要学习编译原理的同学来说,编译原理笔记PDF是一个非常好的选择,它可以帮助同学们快速地掌握编译原理的相关知识和技能。通过对这份资料的学习,同学们能够从实际问题和实际应用的角度深入理解编译原理的相关概念和算法,同时掌握一些实用的工具和技术,从而更好地应对工作和学习中的编译问题。 总之,编译原理笔记PDF是一份非常有价值的学习资料,它能够帮助同学们更好地学习和理解编译原理的相关概念和算法,同时提供一些实际的工具和技术供同学们参考和应用。建议有相关需求的同学一定要好好利用这份资料,从中学到更多有用的知识和技能。 ### 回答3: 编译原理笔记 pdf是一本关于编译原理学习资料,其中涵盖了编译原理的基础知识、重要概念、算法和分析等内容。编译原理是计算机科学中非常重要的一门学科,其研究的是如何将一种高级语言转化为低级语言,并使之在计算机中运行。编译原理涵盖的内容很广,包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等等。 编译原理笔记 pdf可以帮助学习者更好地理解和掌握编译原理的知识,尤其是对于那些正在学习编译原理或者准备学习编译原理的人来说,是一本非常有价值的资料。它可以帮助学习者更深入地了解编译原理的基础概念,例如编译器、编译过程、语言处理器等等,同时也可以帮助学习者更准确地理解编译原理中的各种概念和算法,例如文法、自动机、LL(1)分析器、LR分析器等等。 总之,编译原理笔记 pdf是一本非常实用、有价值的学习资料,它对于那些正在学习或者准备学习编译原理的人来说,是一本非常有趣和有用的书籍。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值