离散数学
四色定理的内容?解决方法? 四色定理又称四色猜想、四色问题,是世界三大数学猜想之一。四色定理是一个著名数学定理,通俗称:每个平面地图都可以只用四种颜色来染色,而且没有两个邻接区域颜色相同。/在平面内任意分割区块,只用四种颜色就能保证所有相邻的区块不同色。 1976 年借助电子计算机证明了四色问题,问题也终于成为定理,这是第一个借助计算 机证明的定理。四色定理的本质就是在平面或者球面无法构造五个或者五个以上两两相连 的区域。
离散里面的图怎么去掉环
如果月亮是方的,那 2+2=4 正确吗 正确,因为前提与结论不相关
离散中闭包原理
- 离散数学中,一个关系R的闭包是指加上最小数目的有序偶而形成的具有自反性、对称性或传递性的新的有序偶集,此集就是关系R的闭包。 关系的闭包运算时关系上的一元运算,它把给出的关系R扩充成一新关系R’,使R’具有一定的性质,且所进行的扩充又是最“节约”的。 比如自反闭包,相当于把关系R对角线上的元素全改成1,其他元素不变,这样得到的R’是自反的,且是改动次数最少的,即是最“节约”的。
- JS中的闭包:能够读取其它函数内部变量的函数。如javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数”。本质上是将函数内部和函数外部链接起来的桥梁
图形中的矢量和标量 概念区别:标量只用数字表示量的大小,矢量还要用方向表示 运算法则区别:矢量用平行四边形法则或者 三角形法则 正负号区别:矢量表示方向的正反性 表达式区别:比如里的表达式要考虑矢量方向,正负号加进表达式中
永真式和永假式 若A在所有赋值下取值均为真,称A为重言式或永真式 若A在所有赋值下取值均为假,称A为矛盾式或永假式 若A至少存在一组成真赋值,则称A为可满足式 永真式一定是可满足式,可满足式未必是永真式 设A为任一命题公式,若A在它的各种赋值下取值均为假,则称A是永假式。又称矛盾式。
-
p当且仅当q称作p与q的等价是。
-
设A、B为两个命题公式,若等价式A↔B是重言式,则称A与B是等值的。记作A<=>B。
-
仅由有限个命题变项或其否定构成的析取式成为简单析取式
-
仅由有限个命题变项或其否定构成的合取式成为简单合取式
- 一个简单析取式是重言式,当且仅当它同时含一个命题变项及其否定
- 一个简单合取式是矛盾式,当且仅当它同时含一个命题变项及其否定
-
仅由有限个简单合取式构成的析取式是析取范式
-
仅由有限个简单析取式构成的合取式是合取范式
-
(范式存在定理) 任一命题公式都存在与之等值的析取范式和合取范式 不过不唯一
-
设有n个命题变项,若在中每个命题变项与其否定有且仅有一个出现一次,则这样的简单合取式成为极小项
-
如果公式A的吸取范式中的简单合取式全是极小项,则称该析取范式为A的主析取范式
-
任何命题公式都有唯一的主析取范式
-
设有n个命题变项,若在中每个命题变项与其否定有且仅有一个出现一次,则这样的简单析取式成为极大项
-
如果公式A的合取范式中的简单析取式全是极大项,则称该析取范式为A的主合取范式
-
任何命题公式都有唯一的主析取范式
-
任何命题公式都有唯一的主析取范式
-
构造证明方法技巧
- 附加前提证明法
- 归谬法
- 等价关系和划分 设R为非空集合A上的关系,如果R是、和,则称R为A上的等价关系。
- A上等价关系R的所有不交的等价类的集合称为A在R下的商集,记作A/R。
- 设A是非空集合,如果存在一个A的子集族π(π包含于P(A)),满足以下条件
- 偏序关系:设R为非空集合A上的关系,如果R是、和,则称R为A上的偏序关系,简称偏序,记作≤。集合A和A上的偏序关系一起叫作偏序集,记作<A,≤>
- x与y是可比 设<A,≤>为偏序集,对于任意的x,y∈A,如果x≤y或y≤x成立
- y盖住x 如果x<y(x≤y∧x≠y),且不存在z∈A,使得x<z<y
图
- 零图 只有顶点没有变的图
- 平凡图 只有一个顶点的零图
- 既不含平行边也不含环的图,称为简单图。(平行边:关联一对顶点的方向相同的边多于一条,平行边的条数称为重数)
- 完全图 设G为n阶(n个顶点)无向简单图,若G中任何两个顶点均相邻,则称G为n阶完全图,记作Kn。 设D为n阶(n个顶点)有向简单图,若D中任何两个顶点之间均有两条方向相反的边,则称D为n阶有向完全图
- n阶无向简单图,若G中每个顶点的度数均为k,则G为k正则图 若图的节点可以任意挪动位置,而边是完全弹性的,只要在不拉断的条件下,一个图可以变形为另一个图,那么这两个图是同构的。 图同构的必要条件结点数目相同,边数相同,度数相同的结点数相同
- 握手定理 任何图(无向图或有向图)中所有顶点的度数之和等于边数的两倍,任何有向图中所有顶点的入度之和等于所有顶点的出度之和等于边数。 任何图中奇度顶点的个数为偶数。
- G的连通分支数记作p(G)
- 弱连通图 若略去有向图D中各边的方向所得无向图是连通图
- 单向连通图 若D中任何两顶点至少一个可达另一个
- 强连通图 若D中任何两顶点都是相互可大的
- 强连通图一定是单向连通图,单向连通一定是弱连通图
点割集: V是一些顶点的集合,如果删除V中的所有顶点之后,G不在连通,但是对于V的任何真子集V1,删除V1后G仍然连通,则称V是点割集。 割点:如果点割集里只有一个顶点,那么这个顶点叫做割点。点连通度:最小的点割集的大小。 边割集:E是一些边的集合,如果删除E里的所有边之后G不在连通,但是对于E的任何真子集E1,删除E1之后G仍然连通,则称E是边割集。 桥:如果边割集里只有一条边,该边称为桥。 边连通度:最小的边割集的大小. 双连通:如果一个图没有割点,那么这个图称为2-连通的,或者双连通的.一个图的极大双连通子图称为双连通分量注意是极大而不是最大,即意味双连通子图不一定只有一个.
设V’包含V且V’不为空集,使得在无向图中去掉V’中的点之后,图的连通分支增加,则V’称为无向图中的一个点割集。 当删除V’的任何一个真子集中的点后,不会增加图的连通分支,当集合V’中只含有一个元素时,该元素可称为图的一个割点。 着色 给无环的无向图的每一个顶点涂一种颜色,使得相邻的顶点涂不同的颜色,称作图的点着色,简称着色。图的着色问题是如何用尽可能少的颜色给图着色。
二部图把一个图的顶点划分为两个不相交集和 ,并且同一集合中不同的两点没有边相连
匹配:一个匹配是一个边的集合,其中任意两条边都没有公共顶点 完美匹配:如果一个图的某个匹配中,所有的顶点都是匹配点,那么他就是一个完美匹配 无向图G为二部图当且仅当G中无奇数长度的回路 Hall定理(霍尔定理) 欧拉图(边)
- 欧拉回路与欧拉通路 经过图中且并且的回路(通路),称为欧拉回路(通路),有欧拉回路的图称为欧拉图。
- 无向图G有欧拉回路当且仅当G连通且无奇度顶点.
- 无向图 G有欧拉通路但无欧拉回路当且仅当G连通且恰好有两个奇度顶点。这两个奇度顶点是每条欧拉通路的两个端点
- 有向图D有欧拉回路当且仅当D连通且每个顶点的人度等于出度:
- A有向图D有欧拉通路、但无欧拉回路当且仅当D连通,且除两个顶点外,其余顶点的入度等于出度,这两个例外的顶点中,一个的入度比出度大1,另一个的人度比出度小1.
哈密顿图(顶点) 哈密顿回路与哈密顿通路 经过图中且的回路(通路)称为哈密顿回路(通路)。有哈密顿回路的图称为哈密顿图 平面图 如果能将无向图G 画在平面上,使其除在顶点处外没有边相交,则称G为平面图.画出的无边相交的图称为G的平面嵌入。 平面图的面与次数 平面图 G的平面嵌人中的边将平面分成若千个区域,每个区域称为G的一个面,其中有一个面积无限的面称为无限面或外部面,其余面积有限的面称为有限面或内部面,包围一个面的所有边构成的回路称为该面的边界,边界的长度称为面的次数,面R的次数记作deg®. 面 设G是个平面图,图中边围成的区域,其内部不含有结点,也不含有边 围成一个面r的所有边构成的回路,称之为这个r面的边界。此回路中的边数,称之为r面的次数,记作deg®。面的面积有限称为有限面,反之称为无限面
极大平面图 如果在简单平面图G的任意两个不相邻的顶点之间再加一条边,所得图为非平面图,则称G为极大平面图 极小非平面图若在非平面图 G中任意删除一条边,所得图为平面图,则称G为极小非平面图.
- 平面图的所有面的次数之和等于边数的两倍
- 极大平面图是连通的
- 设G是n(n>=3)阶简单的连通平面图,则G为极大平面图当且仅当G的每个面的次数均为3。
非平面图K5和K3,3:
地图着色地图是连通的无桥平面图的平面嵌入,每出个面是-一个国家.对地图的每个国家涂一种颜色,使相邻的国家涂不同的颜色,称为地图着色,地图着色问题就是要用尽可能少的颜色给地图着色,地图着色可以转化成平面图的点着色。
欧拉公式 设G为连通的平面图,则有顶点数-边数+面数=2,其中n、m、r分别为G的顶点数、边数和面数。 欧拉公式的推广 设平面图G有p个连通分支,则有顶点数-边数+面数=连通分支数+1 同胚 如果两个图G1和G2同构,或经过反复插入或消去2度顶点后同构,则称G1和G2同胚 库拉图斯基定理 图G为平面图当且仅当G中没有可以收缩成K5或K3,3的子图 库拉图斯基定理图G为平面图当且仅当G中没有与K5或K3,3同胚的. 子图, 四色定理任何平面图都是4-可着色的.
无向树 连通不含回路的无向图 生成树若无向图G的生成子图T是一棵树,则称T为G的生成树,G在T中的边称为T的树枝,GT中的边称为T的弦. T的全体弦组成的集合的导出子图称为T的余树.注意,T的余树不一定是树,它可能不连通,也可能含回路. 基本割集与基本割集系统 对T的每一条树枝a,G中有唯一一个由a和T的弦构成的割集,称为对应树枝a的基本割集,G中所有基本割集的集合称为对应T的基本割集系统 阿贝尔(Abel)群若群G中的二元运算是可交换的,如整数集Z、有理数集Q、实数集R和复数集C关于数的加法构成群 阶对有限群G,G 中元素的个数叫作G的阶 只含幺元e的群称为平凡群,是1阶群 是否构成代数系统——封闭
确定性有限DFA的非确定性NFA定义与区别 有限自动机是一种数据模型,就像函数、数列是一种数学模型一样。有限自动机 通过状态转换图来实现功能,给它一个初始状态和一个输入符号,它能根据你输入的符号将原状态转换到另一个状态,模拟计算机的识别过程。
NFA初态可有多个,转换函数为多值映射
联系:NFA和DFA都是有限自动机,都用于接收、识别一定的字符串。确定有限自动机是非确定有限自动机的特殊形式,非确定有限自动机是对确定有限自动机的扩展。
区别:
- NFA多值函数,DFA单值函数
- NFA可以有多个初态,DFA只有一个初态
- NFA的每条弧允许用∑*上的一个字作标记,DFA的每条弧只允许用∑上的一个字符作标记。
一个能实现状态转移的自动机。对于一个给定的属于该自动机的状态和一个属于该自动机字母表求和的字符,它能根据实现给定的转移函数转移到下一个状态(这个状态可以是先前那个状态)。
对每个状态和输入符号对可以有多个可能的下一个状态的有限状态自动机。
- 确定有限自动机用来识别一定类别的单词符号,它。:开始时,自动机处于初始状态,每一时刻根据自动机所处的状态和当前的输入符号来决定自动机要转移的状态(并读入当前的输入符号)。如果一个符号串被自动机读到结尾时正好处于自动机的终止状态,则认为这个符号串能被相应的自动机接受或识别。
- 非确定有限自动机可以用来识别符号串。
DFA 跟NFA之间的关系,NFA怎么确定化为DFA 确定定:与某一NFA等价的DFA不唯一 最小化:消除多余状态和合并等价状态 1.如果有一个不确定的有限自动机,则可以转化为图的方式。此处不详述怎样转图的方式。 2.先将初态确定,然后根据输入的每个元素可以得到哪些状态,依次列表。 3.这些状态集合可以称为这个有限状态集合n个子集。按0,1,2……的顺序编号。 4.因为这些子集之间的关系是输入一个确定值确定的,所以这些子集之间存在一些关系,即把这些子集的关系写出来完成NFA向DFA的转换。
- 区别 确定有限自动机的函数是单值映射函数,非确定有限自动机的函数是多值映射函数 确定有限自动机由唯一的一开始状态,非确定有限自动机的函数开始状态不唯一。
确定的有限状态自动机和不确定的有限状态自动机哪个可容纳度更高 不确定的 DFA的识别功能 对于 ∑*(西格玛)中任何字a,如果存在一条从初态结点到某个终态结点的道路,这条路上所有的标识符连成的字等于a, 则a可被DFA M所识别(接受,读出) 若M的某些结点既是初态结点又是终态结点,或者存在一条从某初态结点到某个终态结点的ε通路,那么空字ε可为M所识别
闭包运算(*) 闭包运算是一目运算。对于符号串集合A,其闭包运算A结果是一个新的符号串集合,该集合中每个元素是由A中的符号串之间经过有限次(0次或者多次)连接得到的符号串, 例如,A={a}, 则A= {e,a, aa, aa,…其中:表示空串,是由A中的元素经过0次自连 接得到的。
正规式 对于词法分析来说,不是任意符号串的集合,而是程序设计语言所有合法单词符号构成的集合,这些集合中的元素在构成上是由规律的,如标识符的集合是由所有合法标识符构成的,即其中每个元素以字母开始的字母数字串,这些规律可以用正规式来描述。单词符号的集合,用正规式来描述,或正规式代表相应的单词符号集合。
利用正规式描述单词符号的构成规则,如字母( 字母数字) 描述多数程序设计语言标识符的构成规律:以字母开始的字母数字串,根据前面的定义容易看出,该正规式所代表的正规集为所有以字母开始后跟0个或多个字母或者数字构成的符号串的集合,显然是标识符的集合。再如,整数类型的常数用正规式描述为: (±le)(数字)(数字) 。
简述正规式和有限自动机的关系
- 用正规式描述出单词符号的构成规则后,下一步是构造识别程序,该程序应能对任意输入的字符串,判断是否属于正规式所表达的正规集,或者说是否符合正规式所描述的构成规律。需要用有限自动机来描述。
- 任何有限自动机识别的符号串集合都是正规集,可以认为正规式、确定有限自动机、非确定有限自动机从描述能力上讲是等价的。任意的正规式都存在等价的确定或非确定的有限自动机,该自动机识别的符号串的集合就是相应的正规式所代表的的正规集。
- 正规式适合描述单词符号的规则,确定有限自动机适合描述识别单词符号的算法
如何构造与任意给定的正规式等价的确定有限自动机 自动机识别的符号串集合是给定正规式所代表的的正规集。如果能做到这一点,并且由正规式构造确定有限自动机的过程自动化,在设计词法分析器时,设计者只需用正规式描述给类单词符号的构成规则, 然后用正规式到确定有限自动机的自动转换算法生成确定有限自动机,用该自动机识别所描述的各类单词符号。由正规式到确定有限自动机的转化过程分为两步: (1)由正规式构造非确定有限自动机;
(2)对非确定有限自动机进行确定化,得到确定有限自动机。. 在非确定有限自动机中,从初始状态出发,如果接受相同的符号串,停止于不同的状态,从单词符号识别的角度来看,不同的状态是等价的。 子集法确定化:需要找出所有等价的状态子集,将每个状态子集合并成一个状态。
(3)化简 多余的状态需要进行化简。基本思想: 把确定有限自动机的状态集划分成不相交的等价类,等价类中的每个状态子集中的状态之间是等价的,而属于不同状态子集的状态是可以区分的,然后每个状态自己中选一个母个状念于集中的状念之间是等价的,而属于个同状态子集的状态是可以区分的,然后每个状态子集中选一个状态作 为代表,删除其他状态。首先介绍状态等价和可区分的概念。 对于两个状态X和Y,如果从X出发能够接受任意符号串w而停止于终止状态,并.且从Y出发也可以读取相同的符号串w而停止终止状态,则认为X与Y是等价的,否则认为X与Y是可区分的。
正则文法跟上下文无关文法以及两者的关系
利用上下文无关文法描述语言的语法规则 设计语法分析器,首先需要对语言的语法进行描述。
什么是上下文无关文法,由几部分组成的 上下文无关文法所定义的语法范畴,是完全独立于这种范畴可能出现的环境的。由四部分组成: 一组:组成语言的不可再分的基本符号,在程序语言中是单词符号(基本字、标识符、常数、算符和界符) 一组(语法变量):代表语法范畴(算术表达式、布尔表达式、赋值句、分程序、过程)。 一个:特殊的非终结符 一组(产生规则或简称规则):定义语法范畴的一种书写规则
编译原理正则式和上下文无关文法分别能表示什么语言?简述一下编译原理 上下文无关文法的产生式规则具有A→β形式,其中A∈VN, β为由终结符和非终结符构成的符号串,包括空串。 正则文法的产生式规则具有A >aB或者A→a的形式,其中A和B都是文法非终结符, a是由文法终结符构成的符号串。
-
c语言,php,java的语法规则都涉及到上下无关文法,大部分程序设计语言的语法规则。
-
正规文法产生的语言都可以用上下文无关文法来描述
-
上下文无关文法比正规文法具有更强的描述能力
-
正则文法用来识别单词
区别:正则定义中不允许递归定义
何为递归下降分析法。 答:在不含左递归和每个非终结符的所有的首符集都两两不想交的条件下。我们就可以构造-一个不带回溯的的自,上而下的分析程序。该程序是由一组递归过程组成的。每个过程对应文法的–个非终结符。这种语法分析的方法称为文法递归下降分析法。 什么叫做递归下降分析器? 答:当一个文法满足LL (1)条件时,我们就可以为它构造一个不带回溯的自上而下分析程序,这个分析程序是由一组递归过程组成的,每个过程对应文法的一个非终结符,这样的一个分析程序称为递归下降分析器。
编译执行过程? 词法分析, 语法分析, 语义分析和中间代码生成, 优化, 目标代码生成 对于 c 语言:源程序文件,预编译处理(cpp),编译程序本身,优化程序,汇编程序,链接程序,可执行文件 缓存模块举例:hibernate spring3 有缓存模块
优化 优化的目的是为了产生更高效的代码 优化遵循的原则:等价原则,有效原则、合算原则 常用的优化技术:删除公共子表达式,复写传播,删除无用代码 以下三种涉及循环:代码外提、强度削弱、删除归纳变量
- 局部优化 基本块入口语句:
- 程序的第一个语句
- 能由条件语句或者无条件语句转到的语句
- 紧跟在条件转移语句后面的语句
- 循环优化 活跃变量,指A的值要从P开始的某通路上被引用。
语法分析方法 自上而下分析法与自下而上分析法 自上而下面对的主要问题是:如何消除文法的左递归,以及在由文法的开始符号出发推导句子的过程如何避免回溯 自下而上:在由输入串出发向文法的开始符规约的过程中,如何确定可归约子串(句柄或最左素短语)
说明消除文法二义性的方法有那些
- 改写二义文法为非二义文法
- 为文法中的符号规定优先级与结合性
语法分析器在编译器中应完成什么任务?
- 语法分析器根据语法规则是被出记号流中的结构,并构造一课能够正确反映该结构的语法树
- 检查输入中的错误,调用出错处理器进行适当处理
语法制导 简要说明在编译过程中引入中间代码的好处,以及中间代码应具有的特点 好处主要有两点: 一是便于编译程序的开发和移植; 二是便于对代码进行优化处理。 特点: 便于语法制导翻译; 既与机器指令的结构相近, 又与具体机器无关。
语法制导翻译过程中使用的拉链-回填技术 拉链-回填技术是语法制导翻译过程中使用的一种基本技术,其基本思想是当三地址码中的转向不确定时,将所有转向同一地址的三地址码拉成一个链;而一旦所转向的地址被确定,则为此链上所有的三地址码回填入此地址。
中间语言 中间语言是一种面向语法、复杂性介于高级语言书写的源程序和用机器语言表示的目标程序之间,是一种易于翻译成目标代码的代码形式 作用:利用它作为中间环节,不仅可以较快地实现源程序翻译过程,而且可在此基础上应用优化方法, 将源程序翻译成为运行时间短、占用内存少的目标程序。
以·c和.h文件编译成了执行文件过程是什么,要用编译原理知识去解释 3个.c文件和3个.h文件如何编译成一个可执行文件,运用编译原理的知识回答 编译器的最终目的是将源代码转化为机器能够识别运行的二进制机器码。 步骤 1.头文件的预编译,预处理
编译器在编译源代码时,会先编译头文件,保证每个头文件只被编译一次。
在预处理阶段,编译器将c文件中引用的头文件中的内容全部写到c文件中。
2.词法和语法分析(查错)
3.编译(汇编代码,.obj文件)
转化为汇编码,这种文件称为目标文件。后缀为.obj。
4.链接(二进制机器码,.exe文件)
将汇编代码转换为机器码,生成可执行文件。
预编译 首先是源代码文件hello.c和相关头文件,如 stdio.h 被编译器 cpp预编译到一个 .i 文件。预编译过程主要是处理那些源代码文件中以 # 开始的预编译指令。比如#include 、#include 等。经预编译后的 .i 文件不包含任何宏定义,因为所有的宏已经被展开,并且包含的文件已经被插入到 .i 文件中 编译 编译过程就是把预处理的文件经过一系列的后生产相应的汇编文件代码。 编译器以中间代码为界限,可分为前端和后端。
前端主要负责预处理、词法分析、语法分析,最终生成语言无关的中间代码。后端主要负责目标代码的生成和优化。
- 编译器就是将高级语言翻译成机器语言的一个工具。
汇编 汇编器件汇编代码转变成机器可以执行的指令,每一个汇编语句几乎都对应一条机器指令。得到。输入源是汇编代码,输出二进制机器码(后缀.o的目标文件)。输出的二进制机器码可以直接被CPU识别和执行。 链接 在一个目标文件中,不可能所有白娘和函数都定义在同一个文件内部。不同文件之间要做相应的连接处理,包括:
-
地址和空间分配(Address and storage)
-
符号决议(Symbol Resolution)决议更倾向于静态链接,绑定更倾向于动态链接
-
重定位(Relocation)
词法分析器的概念和特点 词法分析器,又称扫描器。词法分析是将字符或字符序列转化为记号,分析得到的记号以供后序语法分析使用。 关系代数 关系代数是一种抽象的查询语言,用对关系的运算来表达查询,作为研究关系数据语言的数学工具。关系代数的运算对象是关系,运算结果也是关系。专门的关系运算包括:选择,投影、连接、除等。
编译器与解释器的区别
面向大数据 编译器的组成? 如果有一个类型数组,大小超过内存大小,用什么算法产生中间代码进行优化? 编译器的哪些部分可以进行面向大数据的优化?
第一章 编译原理概述
编译过程
- 词法分析 识别程序中单词符号(标识符、运算符、保留字、各种类型的常量)
第四章 自上而下语法分析
递归下降
编译方式与解释方式的区别 是否生产目标代码,编译方式生成目标代码。 编译程序总框架 词法分析
- 状态转换图的功能:识别(接收)一定的字符串
闭包的概念
第二章 文法和语言的形式定义
上下文无关文法的定义 文法:描述语言的语法结构的形式语言(或称语法规则) 上下文无关文法: 它所定义的语法范畴(或语法单位)是完全独立于这种范畴可能出现的环境(与它所在的上下文无关)
文法分类 0型文法(短语结构文法):左侧至少含有一个非终结符 1型文法(上下文有关文法):左侧长度<=右侧长度 S->ε 除外,S不能出现在右侧 2型文法(上下文无关文法):左侧只能有一个非终结符( 语法分析) 3型文法(正规文法): A-> aB A->a 右线性; (词法分析) A->Ba或A->a左线性(看非终结符位置)
句型、句子 句型:符号串x是从识别符号S推导出来的,x称为一个句型 句子: x仅由终结符号组成,仅含终结符号的句型是一个句子 短语:子树的末端(叶子)从左至右连成的串( 包括整棵语法树) 简单子树:只含有单层分枝的子树 直接短语(简单短语):由简单子树的叶子组成 句柄:最左边的直接短语(不一定含终结符) 素短语:至少含有一个终结符的短语,并且除它自身之外不再含任何更小的素短语 最左素短语:最左边的素短语 短语: P (相对于T、E)、p+T (相对于E)、i (相对于P、F)、P+T+i (相对于E) 直接短语: P、i 句柄: P (最左边的 直接短语) 素短语: P+T、i (至少含有一个终结符的短语) 最左素短语: p+T
:一个句型的语法树中任一子树的叶节点所组成的符号串都是该句型的短语 :一个句型的语法树中任一最小子树的叶节点所组成的符号串都是该句型的短语 :句柄是最左边的直接短语 :有后往前对短语进行判断,如果短语中至少含有一个终结符,而且除它自身之外不再含任何更小的素短语,那么称该短语为素短语
文法和语言的对应关系: 一个文法G所产生的句子的全体就是一个语言。给定一个文法,就能从结构上确定其语言;给定一种语言,能找到其文法,但该文法不是唯一的。 语法分析树与二义性 用一棵树来表示句型的推导,简称语法树。若一个文法的一个句子对应两棵不同语法树,则称该句子是二义性句子如果一个文法含有二义性的句子,则称该文法是二义性文法
二义性文法:有两个不同的最左推导或有两个不同的最右推导或能产生两棵语法树
正规式与正规集 正规集:把具有相同特征的字放在一起组成一个集合 正规式:然后使用一种形式化的方法来表示正规集 正规式是描述单词结构的一种形式,正规集是该类单词的全集 递归下降分析法的概念,应满足什么条件? 预测分析表的构造
构造预测分析表,步骤
- 消除文法左递归
- 构造每个产生式左部(即->符号左边的非终结符)的First集、Follow集.
- 构造每个产生式的每个侯选式的first集
- 证明文法是一个LL(1)文法
- 构造出预测分析表。
自底向上:算符优先、LR(0)、SLR(1)、LR(1)、LALR(1)
规范归约最右推导的逆过程(最左规约)
- 最右推导是规范推导右句型(最右推导 可得的句型)是规范句型
- 规范句型的特点:句柄后(右边)不会出现非终结符
- 规范归约的中心问题是:如何寻找或确定一一个句型的句柄。
- 可归约串:
- 最左素短语算符优先分析法)
- 句柄(R分析法)
由规范推导推出的句型成为规范句型 由于规范句型是由规范推导推出的句型,故该句型的句柄右边只含有终结符号(因为他是最右推导,右边的非终结符一定被推导成终结符了) 规范归约的关键问题是寻找句柄 在规范归约中,可归约串必出现在栈顶
算符优先分析法不是规范归约方法。 LR分析法的归约过程是规范推导的逆过程,所有LR分析过程是一种规范归约过程。 符号栈中的符号是规范句型的前缀,且不含句柄以后的任何符号(活前缀) ACTION 移进 归约 接受 出错 ACTION[i,a]=空白 出错. ACTION[i,a]=acc 符号栈中仅有#和文法开始符号S,输入串仅为#,分析结束。 一个句型的某个前缀的后缀是该句型的句柄,则这个前缀称为该句型的可归前缀。 一个规范句型的一个前缀,若句柄之后的任何符号,则称它为该句型的一个活前缀。 s->aAc.B项目中.之前aAc为活前缀 从文法出发构造LR(0)分析表
- 构造文法G的拓广文法G’
- 构造LR(0)项目
- 构造G’的项目集规范族
- 后遭分析表
LR(0)项目集规范族(识别G的活前缀的DFA) 如果不存在移进归约冲突,归约-归约冲突,则称它是LR(0)文法。 拓展文法的目的:使文法只有一个以识别符号作为左部的产生式,从而使构造出来的分析器有唯一的接受状态。
对给定的文法,利用LR(0)方法判断符号串是否为该文法的句子: 1.扩充文法为拓广文法; 2.构造识别此文法的全部活前缀的DFA,即构造LR(0)项目集规范族; 3.判断是否为LR(0)文法; 4.是构造LR(0)分析表 利用LR 分析算法分析符号串。 5.否,做其他处理。 SLR (1) 对所有非终结符都求出其FOLLOW集合 发生冲突时,归约项目左部终结符FOLLOW集与移进项目.后的终结符交集为空时,才能按此规约项目的产生式进行归约。
- LR(0)分析对所有终结符均采用归约动作
- SLR(1)分析参考FOLLOW集,以确定归约动作。
Follow集无法解决移进-归约冲突或归约-归约冲突,考虑后继符
归约动作的选择: a)LR(0)分析考虑所有终结符 b)SLR(1)分析参考FOLLow集,为了确定归约 c)LR(1)分析仅考虑LR(1)项目中的后继符(归约展望集,向前搜索符) 拓展文法的后继符为#,即[ S->S , #为初态集的初始项目,S后first(ε, #)= {#} LR (1)项目集规范族中,每个状态中添加新的产生式时,需求产生式左部字母后面的First集作为新产生式的后继符;否则后继符照抄前一个状态的 I : A->a.Bβ B->.e ,需求出First (β )作为B->.e的后继符
任何二义文法决不是一个LR文法 LL(k)文法都是LR(k)文法
a=bc+bd 逆波兰式: abcbd+= ( 算符优先的-一个应用) 无括号;运算对象顺序不变;运算符号的位置反映运算顺序。 ◆三元式运算结果用三元式编号表示 bc (,b,c) ◆四元式运算结果用临时变量表示 bc (, b,c,t) 四元式直观写法: t1:=bc t2:=bd t3:=tq+t2 a:=b 中间代码优化处理时,四元式比三元式方便的多
终结符只有综合属性,由词法程序提供; 非终结符可有综合也可由继承属性,但文法开始符号无继承属性
- 综合属性 用于“自上而下”传递信息 在语法树中,一个结点的综合属性的值由其子节点的属性确定。 因此,通常使用自底向上的方法在每一个节点处使用语义规则计算综合属性的值。 仅仅使用综合属性的属性文法称s-属性文法五、中间代码生成
- 继承属性 用于“自上而下”传递信息。 在语法树中,一个结点的继承属性由此结点的父结点和/或兄弟结点的某些属性确定。 用继承属性来表示程序语言结构中的上下文依赖关系很方便。
中间代码 是一种面向语法,易于翻译成目标代码的代码. 中间语言的形式有三种:后缀式、图表示法(包括抽象语法树和有向无环图(DAG两种)、 三地址代码 后缀式(逆波兰式)的概念 把运算量(操作数)写在前面,把算符写在后面 运算法出现的顺序和实际运算顺序一致 后缀式与抽象语法树(表达式树)的关系 后缀式其实是抽象语法书的线性表示形式,并且是按后根序遍历得到的。
将赋值语句表示成后缀式和四元式
第6章 语法制导翻译和中间代码生成
第7章 运行阶段的存储组织与分配
第8章 代码优化
代码优化的基本概念
代码优化指对(中间)代码进行等价变换,以便从这样的代码出发,能生成更有效的目标代码。优化时遵循的原则:
- 等价原则,即变换前后的代码在逻辑上必须是等价的,变化不能改变程序的运行结果
- 有效原则,即变换后的代码必须具有更高的效率,运行的时间较短,占用的存储空间较小。
- 合算原则,合算原则,即花费在代码变换上的时间和空间必须足够小,以较低的代价达到比较好的优化效果。
在进行代码优化时,需要对代码进行各种等价变换。 从变换所涉及的范围来看,划分为局部优化,循环优化和全局优化,其中局部优化涉及一个基本块内的优化, 循环优化涉及几个基本块(构成循环)内的优化, 而全局优化涉及整个程序的优化。
基本块,怎样把一个中间代码序列划分为基本块 所谓基本块,是指具有单一入口和单一出口的中间代码(后面称其为语句,如四元式)序列,其中第一个语句是其入口,最后一个语句是其出口。 划分基本块的方法如下: (1)首先按照下列原则确定每个基本块的入口语句。 入口语句是满足下列任意条件的语句:程序的第一个语句;由条件或无条件转移语句可以转移到的语句;紧跟在条件转移语句后的语句。 (2)针对每个入口语句,按下列原则构造其所属的基本块。 对每个入口语句,其所属的基本块是从该入口语句出发(包括该入口语句),到出现下列任意语句为止的语句序列:
- 下一个入口语句(不包括该语句);
- 转移语句(包括该转移语句);
- 停语句(包括该停语句)
凡是不属于任何基本块的语句,都是程序流程无法到达的语句,因此,可以山道
按优化所涉及的程序范围可分为三个级别:局部优化、循环优化、全局优化 局部优化指在只有一个入口一个出口的基本快内进行的优化。
判定入口语句的规则: (a)代码序列的第1个语句。 (b)条件或无条件转移语句的转移目标语句。If… goto Goto ©紧跟在无条件转移语句或条件转移语句后面的语句。
简述代码优化的原则与优化的级别,并列举三种常用的优化技术 三个原则:
- 等价原则:经过优化后不应改变程序运行的结果;
- 有效原则:使优化后所产生的目标代码运行时间较短,占用的存储空间较小;
- 合算原则:应尽可能以较低的代价取得较好的优化效果
优化级别:
- 局部优化
- 循环优化
- 全局优化
常用的优化技术:
- 删除公用子表达式
- 代码外提
- 强度消弱
基本块、流图的概念,如何画、节点对应基本块、要求进行局部和循环优化 一:首先要了解两种语句的概念和特征 1.转移语句:如果某个句子中含有goto…语句,那么他就是一个转移语句 转移语句又分为两种:
- 条件转移语句:形如if"goto"""的语句
- 无条件转移语句:只有goto,没有if的语句
2.停语句: halt 这样的语句被称为是停语句。 . 二:接着要知道入口语句的求法:有三种语句是入口语句 1)程序的第一一个语句, 2)能由条件转移语句或无条件转移语句转移到的语句(就是GOTO后面指向的语句,例如(3)号语句里有GOTO (8),那么(8)就是入口语句) 3)紧跟在条件转移语后面的一个语句。
三:划分四元式程序为基本快的方法: 对求出的每个入口语句,确定其所属的基本块。它是由 A一个入口语句到下一入口语句(不包括该入口语句)之间的语句序列 B一个入口语句到一转移语句(包括该转移语句)之间的语句序列 C一个入口语句到一停语包(包括该停语包之间的语句序列组成的 四:流图的画法: 每个流图以基本块为结点。如果- -个结点的基本块的入口语句是程序的第一条语句, 则称此结点为首结点。如果在某个执行顺序中,有B1和B2两个基本块,如果存在以下两种情况中的任意一种 1.有一个条件或无条件转移语句从B1的最后–条语句转移到B2的第一条语句;. 2.在程序的序列中,B2紧接在B1的后面,并且B1的最后一条语句不是-一个无条件转移语旬。 我们就说B1是B2的前驱,B2 是B1的后继,并从B1画一条有向边到B2
第一步是找出入口语句: (1)为程序的第一句; (4) 为(7)的GOTO得来; (6) 为(5)的后一句; (8)为(5)的GOTO得来 第二步画基本块: (1) (2) (3)为一基本块(对应三种A的方法) (4) (5)为一基本块(对应B) (6) (7) 为- .基本块(对应B) (8) (9)为一-基本块(对应C) 第三步画流图:
局部优化的方法 DAG是对基本块进行优化的有效工具 利用DAG可以实现局部优化 (1)合并已知量 (2)删除多余运算 (3)删除无用赋值 不变运算的代码外提的条件 不变运算所在的结点是循环L所有出口结点的必经结点. 对于循环不变运算A:=B op C只有A在循环中其他地方未再定值,才能把A:=B op外提; 循环中所有A的引用点只有S中的A的定值才能到达。
本文地址:http://sicmodule.glev.cn/quote/9437.html 歌乐夫 http://sicmodule.glev.cn/ , 查看更多