编译原理空串啥意思
⑴ 编译原理文法可以定义为四元集G(S)={Vn ,Vt,P,S},那么Vn* ,Vt*和Vn+ ,Vt+,即右上角加*或+是什么意思
右上角加*是集合的闭包,也称为克林闭包(Kleene Closure),右上角加+是集合的正闭包
Vn* 是非终结符集的闭包,Vn+是非终结符集的正闭包
Vt* 是终结符集的闭包,Vt+是终结符集的正闭包
⑵ !!编译原理DFA和NFA
DFA或NFA是对计算机程序的行为的抽象模型。你编写的程序其实就对应了一个自动机。简单举例来说,如果a,b可以取值0或1; 程序: if(a==1) b=1; 这个程序对应了一个自动机。
对应的自动机就有状态 (0,0), (0,1), (1,1), (1, 0)
比如你自动机的初始状态是 (1,0)即a=1,b=0时,运行程序的下一个状态就是(1,1)。
画图出来就是 这4个状态作为顶点,并且有下面几条边
(0,0) --> (0,0)(自环), (1,0)-->(1,1), (1,1)-->(1,1)(自环), (0,1)-->(0,1)自环
存在的意义就是一种理论模型,也可以认为是一种编程思想。 词法分析系也离不开 if else, 这一系列的if else和条件也就组成自动机。。。
最经典体现自动机思想的算法就是KMP算法,你肯定学过,字符串子串匹配的算法。 回忆这个算法的过程:算法第一步构造的next表(数据结构教材的说法)其实就是根据子串的内容构造了一个自动机! 算法第二步将原串作为自动机输入,自动机的输出就是匹配到的子串位置或者无匹配。
⑶ 编译原理中无符号整数/无符号偶数的文法是什么
无符号整数: 开头不能为 0 的任意长度的数字串
S->TE//S表示以[1-9]开头的任意长度的字符串,也就是无符号整数啦。
E->ED|ε//E表示任意长度数字串或空串
D->T|0//D表示[0-9]的终结符
T->1|...|9//T表示[1-9]的终结符
无符号偶数: 以0, 2, 4, 6, 8 结尾的任意长度的数字串。
S->ET//S表示以02468结尾的任意长度的数字串。
E->Ed|ε//E表示任意长度的数字串或空串。
D->0|1|2|...|9//D表示[0-9]中任意一个数字。
T->0|2|4|6|8//T表示偶数单个数字。
⑷ 编译原理空字符ε与空集区别
不知你说的空集是为何指?据我所猜应该是指某个文法所能推导的语句的集合为空,这里的空集意思是不存在匹配该文法的句子。而ε则是指某个包含非终结符号的文法符号串的推导为空,例如A->ε。咋看上去好像差不多,其实它们却有本质的区别,空集是面向结果的,即一个文法所有可能推导的最终语句;而ε则是面向定义的,即某个非终结符号可以推导为空,这样的定义可以在推导过程重复使用。
最后给你来点哲学的。为什么会存在ε?古代有句话叫,其大无外,其小无内,大小之间转化的奥秘在编译原理中真实的被呈现了出来,就看你有没有发现。可以肯定的说,ε的存在正是应了无穷的需要。例如:A->aA|ε,这里ε既可以A可以表达任意多的a串,又可以动态的将其终止,不至无休止的无限下去。
你终会明白,理解了ε,就是理解了形式语言的整个灵魂。
⑸ 编译原理这个符号表示什么 如图~~~~
剪头上加一个星号:S-*->aPb
表示从S可以推出含有非终结符P的形如aPb的句型。
剪头上加一个加号:S-+->a
表示从S可以推出终结符a。
⑹ 编译原理 空串为什么可以区分终态和非终态
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)中...
⑺ 正则表达式 空串
表达式 (UltraEdit Syntax):
% 匹配行首 - 表明要搜索的字符串一定在行首.
$ 匹配行尾 - 表明要搜索的字符串一定在行尾
? 匹配除换行符外的任一单个字符.
* 匹配任意个数的字符出现任意次数(不包括换行符)
+ 匹配前导字符或者表达式出现一次或者更多次(不包括换行符)
++ 匹配前导字符或者表达式不出现或者出现一次以上(不包括换行符)
^b 匹配页中断符
^p 匹配DOS文件的换行符
^r 匹配MAC文件的换行符(CR Only)
^n 匹配UNIX文件的换行符 (LF Only)
^t 匹配一个制表符
[ ] 匹配方括号中的单个的字符
删除空行: 替换 %[ ^t]++^p 为 空串
删除行尾空格: 替换 [ ^t]+$ 为 空串
删除行首空格: 替换 %[ ^t]+ 为 空串
每行设置为固定的4个空格开头: 替换 %[ ^t]++^([~ ^t^p]^) 为 " ^1"
每段设置为固定的4个空格开头: 替换 %[ ^t]+ 为 " "
(如果一行是以空格开始的,则视之为一段的开始行)
将一段合并为一行: 替换 [ ^t]++^p^([~ ^t^p]^) 为 ^1
(注意: 此处假定文本是以DOS方式回车换行 - CR/LF)
去掉HTML TAG: 替换 ^^ 为 空串
删除HTML中的所有<A>: 替换 <[ ]++a *[ ]++href[ ]++=*> 为 空串
删除文本中指定的前2列字符: 替换 %?? 为 空串
在第4列后插入2列空白字符: 替换 %^(????^)^(?^) 为 "^1 ^2"
查找所有的数字: [0-9]+[.]++[0-9]+
查找所有的单词: [a-z]+
⑻ 编译原理中V*是什么意思
V是一个符号集合,假设V指的是三个符号a, b, c的集合,记为 V = {a, b, c }
V* 读作“V的闭包”,它的数学定义是V自身的任意多次自身连接(乘法)运算的积,也是一个集合。
也就是说,用V中的任意符号进行任意多次(包括0次)连接,得到的符号串,都是V*这个集合中的元素。
0次连接的结果是不含任何符号的空串,记为 ε
1次连接就是只有一个符号的符号串,比如,a,b, c
2次连接是两个符号构成的符号串,比如,aa, ab, ac, ba, bb, bc,等等
……
n次连接是一个长度为n、由a、b、c三个符号构成的符号串,比如abaacbbac……
因此,V*包含一切由a,b,c三个符号连接而成的、任意长度的符号串(以及空串ε)
⑼ 在编译原理中,什么是上下文无关文法什么是语言
二型文法如下:S->AcS->ScA->abA->aAb三型文法如下:S->aSA->bAB->cBB->cA->BbA、2型文法是上下文无关文法,表现在产生式上就是产生式的左部只有一个非终结符;3型文法从广义上讲包括左线形文法、右线形文法和正规文法。B、左线形文法产生式的右部要么没有非终结符,如果有非终结符也只能有一个,且必须位于产生式右部的最左端。C、右线形文法产生式的右部要么没有非终结符,如果有非终结符也只能有一个,且必须位于产生式右部的最右端。D、正规文法是右线形文法的一个子集,其产生式右部只有三种情况:1)空串2)只有一个终结符3)只有一个终结符后接一个非终结符E、所有的3型文法都是2型文法。