1. 编译原理文法可以定义为四元集G(S)={Vn ,Vt,P,S},那么Vn* ,Vt*和Vn+ ,Vt+,即右上角加*或+是什么意思
右上角加*是集合的闭包,也称为克林闭包(Kleene Closure),右上角加+是集合的正闭包
Vn* 是非终结符集的闭包,Vn+是非终结符集的正闭包
Vt* 是终结符集的闭包,Vt+是终结符集的正闭包
2. 编译原理 正则语言 二义文法 急~
这个没有一个好老师,自己咬文嚼字看懂是很累的
二义性文法
【定义】 若文法中存在这样的句型,它具有两棵不同的语法树,则称该文法是二义性文法。
二义性文法会引起歧义,应尽量避免之!
G(E):E -> E+E | E*E | (E) | i
这两种展开
E E
E + E E * E
i E * E E + E i
i i i i
都可以表示i+i*i
所以;文法具有二义性。
3. 《编译原理》文法变正规式
(01|10)*+
(01|10)的正闭包
4. 编译原理项目集规范族问题GO(I,X)中的X是安什么顺序进行测试的
这个问题本身不太准确。
GO(I,X)是一个转换函数,它的定义如下:
GO(I,X)中的X是一个文法符号,可以是终结符或非终结符,CLOSURE(J)是J的闭包函数,闭包函数的定义就不多说了。
问题“GO(I,X)中的X是按什么顺序进行测试”,是否可解释成“X是按出现在产生式中的顺序进行测试”
5. 关于C语言编译阶段的一些问题
呵呵,找一本好书吧。我不能完全给你写清楚,"sting.h"的拼写已经有人说了。
简单地说,要理解几种文件:
A:源文件:例如汇编(asm)、c语言、cpp
B:目标文件
C:库文件(lib)
D:可执行文件
A经过编译器得到B,若干个B可以经过库管理程序得到C,C也可以通过库管理程序得到B(提取)
若干个B通过链接器可以得到D,但是比如strcmp是出现在C中的,但实际上链接器会到C中提取出strcmp所在的B,然后将这个B放入到你的D中。整过过程是一个求闭包的过程,具体参见《Linker and Loader》。
最后说说.h,其实.h本身并不是必要的,但是它可以减少人们的错误,减少重复的代码。
比如printf,你完全可以不include<stdio.h>,你就自己写上一行:
int printf(...);
然后你后面就是直接使用就好了,但是这样会有很多缺陷,这些缺陷可能只有你深刻地理解C语言本身的缺陷后才能明白,不多说了。
6. 编译原理 根据正规式画出NFA 正规式分裂原则
这个是能画的最简单的,左边是开始状态。
原则是:
1)先连接运算,
2)再选择
3)再闭包
7. 编译原理中的闭包含义
这个是能画的最简单的,左边是开始状态。原则是:1)先连接运算,2)再选择3)再闭包
8. 编译原理这个DFA怎么画
这个是能画的最简单的,左边是开始状态。原则是:1)先连接运算,2)再选择3)再闭包
9. 计算机科学与技术《编译原理》求解题
1、错
2、对
3、错
4、对
5、错
6、对
7、对
8、对
9、对
10、错
10. 编译原理中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三个符号连接而成的、任意长度的符号串(以及空串ε)