其实软考中的大部分内容我们专业课都学过,只不过那个。。。啊哈哈。。。
画了一个小时的图,发现根本不会画什么东西出来,除了文法有点懂了之外,别的基本上没什么深入的认识了。
那就先说说文法?
文法是一个这玩意:G = {VT,VN,S,P}。至于他是干什么的嘛,看师哥师姐的博客的大概意思就是可以定义一些编程语言的语法结构,比如把输入string计算机自动当做字符类型。
VN表示非终结符的集合,VT表示终结符的集合,在形式语法的推导规则的输入或输出字符串存在中,终结符不能在继续推导下去,并且不能分解,一条语法推到这就完了。
顺便,终结符写成小写字母,abc这样;非终结符写成大写字母,ABC。
S表示开始符,看到是大写没,所以开始符是非终结符,不然就别往下推了。P是产生式集合,产生式就是α→β这种东西,大家应该见过吧。
哎,写个定义还挺费劲,我就说不想写这些东西嘛,我看这东西就是一个迷宫。非终结符是路口,能各种左右转向直走,终结符是死胡同,S是迷宫入口,P是路口的能通向哪的集合,α→β是我从这个路口走向下个路口或是死胡同。
果然脑补成游戏就简单了。
文法分为了4种,0123型,不愧是计算机知识,就要从0开始。
0型文法范围最大,我把它当做基类来看,定义是设G={VT,VN,S,P},如果它的每个产生式α→β是这样一种结构:α∈(VT∪VN)*且至少含有一个非终结符,而β∈(VT∪VN)*,则G是一个0型文法。0型文法也称短语文法。一个非常重要的理论结果是:0型文法的能力相当于图灵机(Turing)或者说,任何0型文语言都是递归可枚举的,反之,递归可枚举集必定是一个0型语言。0型文法是这几类文法中限制最少的一个,所以一般见到的至少是0型文法。
恩,果然看不懂啊。仔细对了几遍,原来左边有大写的就是0型文法。。。
1型文法继承0型文法,定义就不写了,省的自己看不懂。A->Ba,这种就是1型文法,判断方法就是左边的字母不多于右边,这样简单吧。
2型文法继承1型文法。这个也简单,左边的全是大写就行了。Aa->BbC,这种就不是了。
3型文法继承2型文法。3型文法多了个属性,叫左尿性。。。呃,左线性右线性。说着麻烦,举个例子:A->a,这个是0型,对吧?A->a,A->Ba这个的意思是A能推出a,还能推出Ba,可以合在一起写成A->a|Ba。好,判断的方法就是这个合写,写成Ba是左线性,如果写成aB就是右线性,还是看大写在哪边。
软考视频讲的文法部分就这样了,其他的基本上就没看懂,转换正规式和自动机那还懂一点点,下次再说吧。
顺便贴一下文法部分的图,不能白画啊- -
【软了个考——其实一开始总结编译原理我是拒绝的】
文章图片
文章图片
??