① 一个编译原理问题
首先写出指定句型的规范推导:
S→(L)→(L,S)→(L,(L))→(L,(S))→(L,(a))→(S,(a))
然后画出分析树如下图
根据分析树的叶子结点可以找出该句型的所有短语:
aS(a)S,(a)(S,(a))
直接短语,就是经过一次非终结符替换得到的短语:
aS没了
句柄就是最左直接短语,要进行规约的部分,根据分析树我们找到最左直接短语为:
S
② 编译原理,设文法G[E]如下,句型T+T * F+a的素短语是__
试给出句型T-T/F+a和T+T*F-F↑a的短语、句柄、素短语:
句型1:短语TT/F+a, T-T/F, T, T/F, a
句型T
素短语: T/F,a
句型2:短语E+T*F_F↑a, E+T*F, T*F,F↑a, a
句型T*F
素短语: T*F,a
(2)编译原理句柄可以为空串吗扩展阅读
文法:以有穷的集合描述无穷的计划的工具。
字母表:元素的非空有穷集合,其中的元素称为符号,因此也叫符号集。
符号串:由字母表中的元素组成的任何有穷序列,串中的元素个数叫做符号串的长度,空符号串ε,长度为0。
符号串的运算:
连接-符号串x = ab,y=cd, xy = abcd
方幂-z=xn,当n = 0, z = ε,当 n = 2, z = xx
集合的闭包-∑* = ∑0 ∪∑1 ∪∑2 ∪…∪∑n
∑+ 为正闭包 = ∑1 ∪∑2 ∪…∪∑n
③ 编译原理 空串为什么可以区分终态和非终态
follow集合是针对非终结符而言的;follow(U)所表达的是句型中非终结符U的所有可能的后随终结符号的集合,特别注意一点:“#”是识别符号的后随附。
直接收取:形如“……Ua”的组合,直接把啊收入到follow(U)中
直接收取:形如“……UP……”的组合,(P是非终态符);把firth(P)除去ε直接收入到follow(U)中。
反复传递:形如“P-……U”的产生式,
follow(P)的全部内容传递到follow(U)中,或者说是P-……UB且first(B)包含ε,则把first(B)除去ε直接收入到follow(U)中,同时吧follow(P)的全部内容传送到follow(U)中...
④ 求解编译原理的一道题:设有文法如下
首先要做这题你要知道判别文法类型
包括四个层次:
0-型文法(无限制文法或短语结构文法)包括所有的文法。该类型的文法能够产生所有可被图灵机识别的语言。可被图灵机识别的语言是指能够使图灵机停机的字串,这类语言又被称为递归可枚举语言。注意递归可枚举语言与递归语言的区别,后者是前者的一个真子集,是能够被一个总停机的图灵机判定的语言。
1-型文法(上下文相关文法)生成上下文相关语言。这种文法的产生式规则取如 αAβ -> αγβ 一样的形式。这里的A 是非终结符号,而 α, β 和 γ 是包含非终结符号与终结符号的字串;α, β 可以是空串,但 γ 必须不能是空串;这种文法也可以包含规则 S->ε ,但此时文法的任何产生式规则都不能在右侧包含 S 。这种文法规定的语言可以被线性有界非确定图灵机接受。
2-型文法生成上下文无关语言。这种文法的产生式规则取如 A -> γ 一样的形式。这里的A 是非终结符号,γ 是包含非终结符号与终结符号的字串。这种文法规定的语言可以被非确定下推自动机接受。上下文无关语言为大多数程序设计语言的语法提供了理论基础。
3-型文法(正规文法)生成正规语言。这种文法要求产生式的左侧只能包含一个非终结符号,产生式的右侧只能是空串、一个终结符号或者一个非终结符号后随一个终结符号;如果所有产生式的右侧都不含初始符号 S ,规则 S -> ε 也允许出现。这种文法规定的语言可以被有限状态自动机接受,也可以通过正则表达式来获得。正规语言通常用来定义检索模式或者程序设计语言中的词法结构。
正规语言类包含于上下文无关语言类,上下文无关语言类包含于上下文相关语言类,上下文相关语言类包含于递归可枚举语言类。这里的包含都是集合的真包含关系,也就是说:存在递归可枚举语言不属于上下文相关语言类,存在上下文相关语言不属于上下文无关语言类,存在上下文无关语言不属于正规语言类。
1)本题应该是--上下文无关文法
句子是产生式在推导时“仅仅有终结符”的任何一步
2)%mm%nn 是一个句子
由于下面一题的图我等级不够 不能贴图 发你邮箱
⑤ 句柄的编译原理
一个句型的最左直接短语称为该句型的句柄,句型的句柄是和某产生式右部匹配的子串,并且,把它规约成该产生式左部的非终结符,代表了最右推导过程的逆过程的一步。
如右图,在推导过程中,S→aABe→aAde→aAbcde→abbcde,此四步的句柄分别为aABe,d,Abc,b
句柄的特征:
1. 它是直接短语,即某规则右部。
2. 它具有最左性。
注意:短语、直接短语和句柄都是针对某一句型的,特指句型中的哪些符号子串能构成短语和直接短语,离开具体的句型来谈短语、直接短语和句柄是无意义的。另外句柄的右边仅含终结符如果文法二义,那么句柄可能不唯一。
⑥ 编译原理:空字符串可以是短语吗
ε可以是短语
⑦ 编译原理中的句柄是什么意思
是操作系统用来管理不同的对象,给他们一个编号而已
比如窗口、线程、图标等都会对应一个句柄,这样可以方便标识与管理
句柄其实也就是一个整数值,而且是唯一的
⑧ 编译原理文法
编译原理文法的概念为:每一种自然语言或者是编程语言都需要文法来描述,文法相当于语言学的语义分析,即分析每一句话所表示的含义,编译器需要利用文法来完成其语法分析和语义分析。
字母表是元素的非空有穷集合,字母表中的元素称之为符号,因此,字母表也称之为符号集。例如C语言中的字母表由字母、数字、关键字等组成。
符号串,就是由符号集中的元素组成的序列。例如,给定符号集a、b、c,那么abc、abb、ac就是由该符号集组成的符号串。一个文法中,含有一个,或多个产生式,产生式,描述了将终结符集合和非终结符集合组合成串的方法。
⑨ 编译原理-句型、句子、短语、直接短语、句柄、素短语、最左素短语
在进行语法分析的时候,有时候会对这些词语的概念不清晰,这里我们就详细归纳总结一下。
可以看出这个里面,最需要理解的概念就是短语,其他大部分概念都是在短语基础上延伸的,从概念上可以看出:
假设有一个文法
针对文法的一个特定句型 (Sd(T)db) , 其推导过程如下:
这个句型 (Sd(T)db) 对应的 CFG 分析树如下:
那个这个句型 (Sd(T)db) 有多少个短语呢?
还记得短语的定义么, S ⇒* αβδ , αβδ 代表句型就是这里的 (Sd(T)db) 。
因此这个句型 (Sd(T)db) :
算法非常简单,就是通过分析树的后序遍历,先将子树的叶节点从左到右排合并成字符串(即一个短语),然后用它代表子树的根节点的值,再和与子树根节点同一层节点值合并,得到新的短语。就这样从分析树的最底层,一路合并到分析树的根节点,就能得到所有的短语了。
通过递归的方法,获取短语列表 phraseList , 直接短语列表 directPhraseList 和 素短语列表 plainPhraseList 。
运行结果: