㈠ 编译原理-句型、句子、短语、直接短语、句柄、素短语、最左素短语
在进行语法分析的时候,有时候会对这些词语的概念不清晰,这里我们就详细归纳总结一下。
可以看出这个里面,最需要理解的概念就是短语,其他大部分概念都是在短语基础上延伸的,从概念上可以看出:
假设有一个文法
针对文法的一个特定句型 (Sd(T)db) , 其推导过程如下:
这个句型 (Sd(T)db) 对应的 CFG 分析树如下:
那个这个句型 (Sd(T)db) 有多少个短语呢?
还记得短语的定义么, S ⇒* αβδ , αβδ 代表句型就是这里的 (Sd(T)db) 。
因此这个句型 (Sd(T)db) :
算法非常简单,就是通过分析树的后序遍历,先将子树的叶节点从左到右排合并成字符串(即一个短语),然后用它代表子树的根节点的值,再和与子树根节点同一层节点值合并,得到新的短语。就这样从分析树的最底层,一路合并到分析树的根节点,就能得到所有的短语了。
通过递归的方法,获取短语列表 phraseList , 直接短语列表 directPhraseList 和 素短语列表 plainPhraseList 。
运行结果:
㈡ 编译原理中的短语、直接短语、句柄
如果给出短语等名词的形式化的定义,便较难理解,不好求。我们通过构造语法树来求解。首先你应该会根据文法将所给句型构造成语法树的形式,即根据文法怎样推导出句型E+T*F。如果你有数据结构二叉树基础的话这很简单就构造出来了。构造出语法树后,求短语看根节点,有T,和E。则短语为:E+T*F,T*F,而直接短语是指能直接推出叶子节点的根所对应的短语,可知该节点为T,直接短语为:T*F。句柄是最左直接短语,可知为:T*F。
㈢ 编译原理什么是素短语
编译原理中,素短语是至少含义一个终结符,并且自身不包含任何更小素短语的一种短语。
素短语是一种特殊的短语,它是一个递归的定义,至少含有一个终结符,并且除它自身之外不再含任何更小的素短语,所谓最左素短语就是处于句型最左边的素短语的短语。
一个算符优先文法G的任何句型的最左素短语是满足以下条件的最左子串NaNb…NcNdN(N是非终结符,a,b,c,d是终结符)。例如:句型T+T*F+id,T*F是最左素短语,id是素短语。
(3)编译原理句柄和最左素短语的区别扩展阅读:
通过语法树可以得知素短语:
1、每个句型对应一棵语法树
2、每棵语法树的叶子结点从左到右排列构成一个句型
3、每棵语法树的子树的叶子结点从左到右排列构成一个短语
4、每棵语法树的简单子树(只有父子两层结点)的叶子结点从左到右排列构成一个简单(直接)短语。
5、素短语是至少包含一个终结符的短语,但它不能包含其它素短语。
㈣ 编译原理中的句柄是什么意思
是操作系统用来管理不同的对象,给他们一个编号而已
比如窗口、线程、图标等都会对应一个句柄,这样可以方便标识与管理
句柄其实也就是一个整数值,而且是唯一的
㈤ 句柄的编译原理
一个句型的最左直接短语称为该句型的句柄,句型的句柄是和某产生式右部匹配的子串,并且,把它规约成该产生式左部的非终结符,代表了最右推导过程的逆过程的一步。
如右图,在推导过程中,S→aABe→aAde→aAbcde→abbcde,此四步的句柄分别为aABe,d,Abc,b
句柄的特征:
1. 它是直接短语,即某规则右部。
2. 它具有最左性。
注意:短语、直接短语和句柄都是针对某一句型的,特指句型中的哪些符号子串能构成短语和直接短语,离开具体的句型来谈短语、直接短语和句柄是无意义的。另外句柄的右边仅含终结符如果文法二义,那么句柄可能不唯一。
㈥ 什么是句柄什么是最左素短语
句柄(Handle)是一个是用来标识对象或者项目的标识符,可以用来描述窗体、文件等,值得注意的是句柄不能是常量。
Windows之所以要设立句柄,根本上源于内存管理机制的问题,即虚拟地址。简而言之数据的地址需要变动,变动以后就需要有人来记录、管理变动,因此系统用句柄来记载数据地址的变更。
最左素短语就是处于句型最左边的素短语的短语。素短语是一个递归的定义,至少含有一个终结符,并且除它自身之外不再含任何更小的素短语。
(6)编译原理句柄和最左素短语的区别扩展阅读:
句柄的使用
句柄在Windows编程中是一个很重要的概念,在 Windows程序中并不是用物理地址来标识一个内存块、文件、任务或动态装入模块的。相反地,Windows API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。
应该明白的是,句柄是一个标识符,是用来标识对象或者项目的。从数据类型上来看它只是一个16位的无符号整数。
应用程序几乎总是通过调用一个Windows函数来获得一个句柄,之后其他的Windows函数就可以使用该句柄,以引用相应的对象。在 Windows编程中会用到大量的句柄。