编译原理前五章知识点整理

第一章:
翻译程序:将源语言程序转换为目标语言程序。
编译程序:源语言是高级语言,目标语言为低级语言(汇编语言、机器语言)的翻译程序叫做编译程序。
诊断编译程序:用于帮助程序开发和调试的编译系统。
优化编译系统:着重于提高目标代码效率的编译系统。
编译过程:(1)词法分析(2)语法分析(3)语义分析与中间代码产生(4)优化(5)目标代码生成
遍:对于源程序或者中间结果扫描一次,加工处理生成新的中间结果或目标程序。
编译原理前端:与源代码有关与目标机无关。
编译原理后端:与目标及有关与源代码无关。
为什么要分前端和后端:在多目标语言和多源语言的开发过程中,可以灵活搭配组合,消除重复开发的工作量。
第二章:
字母表:一个有穷字符集。
字符:字母表中的一个元素。
符号串:由字符组成的有穷数列。
空字:不含任何字符的序列。
子集的积:不满足交换律。
闭包:V表示字符相乘任意次的合集。
正规闭包:比闭包少一个空字。
文法:描述语言的语法结构的形式规则。
上下文无关文法由四部分组成:(1)终结符(2)非终结符(3)开始符(4)产生式
假定G是一个文法,S是它的开始符。如果S=>a,则称a是一个句型。仅含终结符的句型是一个句子。文法G产生的所有句子的集合称为语言记为L(G)。
最左推导:每一步推导都是将最左侧非终结符先进行替换。
最右推导:每一步推导都是将最右侧非终结符先进行替换。
语法树:将一张图表示一个句型的推导。例:第8题。
第三章:
正规集:字母表里的某些字符的集合。
正规式:表示正规集的方式。(例3.1)
正规式的特殊关系:交换律,结合律
2,分配律,空字与。
确定有限自动机:五个元素构成的五元式(状态集合,输入字符表,映射状态表,唯一初态,终态集)确定意味着当你输入一个字符时,对于它现在的状态只有唯一的状态与他对应。例P47.
非确定有限自动机:五个元素构成的五元式(状态集合,输入字符表,状态集合经过输入字符表的闭包后到达S的子集(区别:到达S的子集可含有多个状态),非空初态,终态集)。
区别:
(1)DFA没有输入空串的转化动作。
(2)DFA输入一个特定符号,有且只能得到一个状态。NFA对于输入的特定符号或者特定符号集,可以得到一个状态集。
状态转换图:每个确定有限自动机代表一个状态转换图(终态含有两个圆)
非确定有穷自动机的确定化:将非确定性消除,只留下确定性因素
(1)确定开始状态。
(2)后继状态分析。
(3)后继状态取并集。
(4)将未分析过的状态进行分析。
(5)定义开始状态。
(6)将各状态重命名。
正规文法与正规式的转化:
(1)A->xB,B->y A=xy
(2)A->xA,A->y A=x*y
(3)A->x,A->y A=x|y
左线性文法:非终结符在左边的线性文法。(从初始符画起)
右线性文法:非终结符在右边的线性文法。(从终结符画起)
正规文法与有限自动机等价
正规式转化为NFA再化为DFA再最小化(题型)
(1)先写出初始状态X和终止状态Y;
(2)将总正规式分解为各子正规式;
(3)将各子正规式由三种形式表示;
(4)得出NFA;
(5)将NFA转化为DFA;
(6)得到DFA将其先划分为终结状态组和非终结状态组,区别在于包不包含Y;
(7)将各组里查看是否与其他组有交集,有则移出;
(8)将新的到的各组重命名;
(9)作出化简后的DFA。
第四章:
消除直接左递归:循环的半部分在下一行的开头,不循环的一部分在上一行。
消除间接左递归:将其转化为直接左递归再运用直接左递归化简的方法。
Frist集的求法:
(1)求谁的FIRST集,要找谁在左侧的产生式
(2)直接以终结符开头的,直接把终结符写入
(3)以非终结符开头的,将其的Frist集写入,若存在空集就把下一个非终结符的Frist集写入,直到找到非终结符。
Follow集的求法:
(1)求谁的Follow集,要找谁在右侧的产生式
(2)右侧有终结符的,直接将终结符加入Follow集中;
(3)右侧有非终结符的,将该非终结符的Frist集加入到Follow集中,若该非终结符的Frist集中含有空集,则将其后的终结符的Frist集加入知道非终极符或结尾;
(4)右侧无元素时,将产生式左边的Follow加入到Follow中。
(5)所有Follow集均含有#。
构建预测分析表:
(1)求出Frist集和Follow集;
(2)画表格,行表示为非终结符,列表示为终结符;
(3)若非终结符Frist集中不含空字,则将Frist集中含有的终结符对应的地方写上下一步执行的语句;(Frist集中的终结符是哪个加上的就执行哪步)
(4)若非终结符Follow集中含空字,先将Frist集中含有的终结符对应的地方写上下一步执行的语句,再将Follow集中对应的终结符对应的地方写上该非终结符指向空字。
预测分析:
(1)根据预测分析表先写下四列:步骤,符号栈,输入串,所用产生式。
(2)先将初始状态入栈和输入串的开头查阅预测分析表得到下一步;
(3)产生式的下一步是按逆序入栈,比如产生了TE,则T在栈顶;
(4)符号栈有终结符即弹栈;
(5)逐步分析直到输入串全弹出后按输入串为#操作;
(6)所有符号栈弹出后结束。
第五章:
短语:抽象语法树以及其子树的叶子节点构成的字符串。
直接短语:子树下无分支的短语。
句柄:最左直接短语。
规范推导:最右推导。
规范规约:最左规约。(写出规范推导后反过来写就行)
算符优先分析:定义算符之间(终结符之间)的优先关系,借助优先关系进行规约。(加减乘除就是规约的一种)
算符文法:任一产生式的右部都不含两个相继的非终结符。
算符优先级:
(1)若产生式右部出现aRb情况说明a的优先级等于b。
(2)若产生式右部出现aR,而R->bQ,则a的优先级小于b。(类比加减乘除)
(3)若产生式右部出现Rb,而R->aQ,则b的优先级小于a。
求FRISTVT集:
(1)当该非终结符在产生式左边时,若右边第一个字符为终结符,则直接将该终结符加入。
(2)看产生式右边若右边第一个字符为非终结符,则将该非终结符的FRISTVT加入到集合中。
(3)若右边第一各字符为非终结符,且下一个为终结符,将该终结符加入集合。
求LASTVT集:
(1)当该非终结符在产生式左边时,若右边最后一个字符为终结符,则直接将该终结符加入。
(2)看产生式右边若右边最后一个字符为非终结符,则将该非终结符的LASTVT集加入到集合中。
(3)若右边最后一个字符为非终结符,且上一个为终结符,将该终结符加入集合。
算符优先表:
(0)当表达式右部只有一个非终结符时将其前后加上#,不计入FRIST集和LASTVT集。
(1)找出所有的终结符画出表结构
(2)从文法中找出形为aQb(终结符+非终结符+终结符)和ab(终结符+终结符)的部分,然后在相应的表格填=。
(3)从文法中找出形为aQ(终结符+非终结符)的部分,a与Q的FIRSTVT集合中每一个元素在表格中的交叉点填小于号。(a为行)
(4)从文法中找出形为Qa(非终结符+终结符)的部分, Q的LASTVT集合中每一个元素与a在表格中的交叉点填大于号,此题中可以找到 T) 与 ,S还有S#(此时填的方式是以列为主的看,即我确定列 ),再即将LASTVT填入)
优先函数的优点:节省空间,便于比较运算。
优先函数的缺点:将本身不能比较的算符也变得能比较了。
优先函数的求法:
(1)将行和列分别列出
(2)根据算符优先表画出箭头
(3)将其指向的节点数写出
(4)列表格写出他的F()和G()。
LR文法转DFA做法:
(1)先写出文法的所有项目:(将·左移若·左侧为终结符则继续右移若为非终结符则将该非终结符的下一步展开)
(2)0框写出·在最左侧的项目。
(3)·右移过哪个元素则为输入哪个元素。
(4)·右移到最终则为终结符

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机科学中非常重要的一门课程,涉及到编译器的设计、实现和优化等方面。编译原理知识点主要包括词法分析、语法分析、语义分析、中间代码生成、代码优化和代码生成等。 词法分析是编译过程中的第一步,主要将源代码分解为一个个词法单元,例如关键字、标识符、常量和运算符等,对应到编译器中的Token。语法分析是将词法单元按照语法规则进行组织和分析,生成语法树或抽象语法树。语义分析是对语法树进行类型检查和语义检查,确保编译器生成的代码符合语言的规范和语义要求。 中间代码生成是将源代码转化为中间表示形式,比如三地址码或者虚拟机指令,方便进行后续的代码优化和生成。代码优化是对中间代码进行分析和优化,以提高程序的执行效率和性能。代码生成是将优化后的中间代码转化为目标代码,可以是机器码或者虚拟机指令,用于最终执行。 编译原理知识点涉及到了编程语言的语法和语义,程序的分析和优化技术,以及目标平台的特性和限制等。掌握了编译原理知识点,可以帮助我们更好地理解和设计编译器,提高代码的执行效率和质量。 总的来说,编译原理知识点包括词法分析、语法分析、语义分析、中间代码生成、代码优化和代码生成等,这些知识点是理解和应用编译器的基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值