句柄编译原理
‘壹’ 编译原理中的句柄是什么意思举个简单的例子
语法树的最左子树
‘贰’ 句柄的编译原理
一个句型的最左直接短语称为该句型的句柄,句型的句柄是和某产生式右部匹配的子串,并且,把它规约成该产生式左部的非终结符,代表了最右推导过程的逆过程的一步。
如右图,在推导过程中,S→aABe→aAde→aAbcde→abbcde,此四步的句柄分别为aABe,d,Abc,b
句柄的特征:
1. 它是直接短语,即某规则右部。
2. 它具有最左性。
注意:短语、直接短语和句柄都是针对某一句型的,特指句型中的哪些符号子串能构成短语和直接短语,离开具体的句型来谈短语、直接短语和句柄是无意义的。另外句柄的右边仅含终结符如果文法二义,那么句柄可能不唯一。
‘叁’ 编译原理 - 移进归约分析中如何确定句柄的开始处与结束处
当然是根据文法来写的呀 没有文法无法确定 句柄的开始处和结束处 的 当然 还要看看匹配不匹配呀 ,要最后 这个句型和文法都匹配起来都行呀 总之 句柄肯定都是在产生式右端的 你可以一个个匹配过来
‘肆’ 什么叫活前缀,用通俗的话解答下,或者简单的例子。 这个题是编译原理的。
活前缀:右句型的前缀,而且其右端不会超过该句型的最右边句柄的末端。
右句型:最右推导可得到的句型。
最右推导:每步推导都替代最右非终结符的推导。
推导:我们说αBγ推导出αβγ,是说存在产生式B->β。
产生式:左边为非终结符,右边为终结符与非终结符组合成的串。
非终结符:是字符串的集合。
终结符:组成语言的词。如c语言中的2,a,int,if等。
句型:开始符经过若干步推导后得到的串。
前缀:如abc的前缀为a、ab、abc。
开始符:开始符是整个语言的集合。
句柄:非形式的,句柄是和某个产生式右部匹配的字符串,把句柄归约成产生式左部的非终结符,可以得到最右推导的逆过程的一步。形式的定义为:开始符s经过若干步最右推导得到αBγ,αBγ经过一步最右推导得到αβγ,若γ为终结符的集合,则β为句柄。举例:
E->E+E|E*E|-E|(E)|id,对于id+id*id,其中一个最右推导为E->E+E->E+E*E->E+E*id->E+id*id->id+id*id。在id+id*id归约成E+id*id的过程中,最左边的id是句柄。E+id*id归约成E+E*id时,最左边的id是句柄,把E+E*id归约成E+E*E时,id是句柄。把E+E*E归约成E+E时E*E是句柄。E+E归约成E时,E+E是句柄。
归约:可理解为把产生式右边的串用产生式左边的非终结符代替。
注1:再说一下活前缀,举个例子,比如E+E*E归约成E+E,句柄是E*E,那么它的活前缀就是E、E+、E+E、E+E*、E+E*E。又比如id+id*id归约成E+id*id,句柄是最左边的id,那么它的活前缀是id,因为不能超过句柄。
注2:至于为什么要给出活前缀的定义和如何用归约的方法实现语法分析,还要进一步学习。
‘伍’ 编译原理习题,下图为什么a为句柄, 而不是最左面的b为句柄怎样理解句柄定义中的最左简单子树中的简
baSb的最右推导为:S->AB->ASb->bBSb->baSb
根据句柄定义:
所以a为baSb的句柄。
只有单层分支的子树称为简单子树。最左简单子树末端结点组成的符号串为句柄。
‘陆’ 编译原理什么是素短语
编译原理中,素短语是至少含义一个终结符,并且自身不包含任何更小素短语的一种短语。
素短语是一种特殊的短语,它是一个递归的定义,至少含有一个终结符,并且除它自身之外不再含任何更小的素短语,所谓最左素短语就是处于句型最左边的素短语的短语。
一个算符优先文法G的任何句型的最左素短语是满足以下条件的最左子串NaNb…NcNdN(N是非终结符,a,b,c,d是终结符)。例如:句型T+T*F+id,T*F是最左素短语,id是素短语。
(6)句柄编译原理扩展阅读:
通过语法树可以得知素短语:
1、每个句型对应一棵语法树
2、每棵语法树的叶子结点从左到右排列构成一个句型
3、每棵语法树的子树的叶子结点从左到右排列构成一个短语
4、每棵语法树的简单子树(只有父子两层结点)的叶子结点从左到右排列构成一个简单(直接)短语。
5、素短语是至少包含一个终结符的短语,但它不能包含其它素短语。
‘柒’ 编译原理懂的进
唉,这个中文翻译的实在差啊,这些名词概念不需要搞清楚的,建议你看下编译原理的英文版
‘捌’ 编译原理 句型的句柄怎么求
句型aabbAb的句柄是D: bA;
S->aB->aaBB->aabSB->aabbAB->aabbAb
按照最左推导,其中的S->bA这步是最后的直接推导(即它推出的bA不再被继续往下推导),虽然B->b也是这样的,但不是最左的。
其实你根据句型画个语法树就一目了然了,句柄即是最左直接短语,首先要是直接短语(直接推导),再就是最左(按最左的话最先推出的)。
‘玖’ 编译原理中的短语、直接短语、句柄
如果给出短语等名词的形式化的定义,便较难理解,不好求。我们通过构造语法树来求解。首先你应该会根据文法将所给句型构造成语法树的形式,即根据文法怎样推导出句型E+T*F。如果你有数据结构二叉树基础的话这很简单就构造出来了。构造出语法树后,求短语看根节点,有T,和E。则短语为:E+T*F,T*F,而直接短语是指能直接推出叶子节点的根所对应的短语,可知该节点为T,直接短语为:T*F。句柄是最左直接短语,可知为:T*F。