在进行文法判断之前,我们先来了解一下文法定义。
文法G定义一个四元式
G=(VT,VN,S,P) 其中,VT为终结符的非空有限集合,VN为非终结符的非空有限集,S为文法的开始符,S属于VN,P为产生式的非空有限集合。
注:在编译原理当中,小写字母一般代表终结符,大写字符一般代表非终结符。
看了上面的文法的定义,是不是有点懵?那么小编就给大家举个例子吧。
看了上述,相信大家对文法的概念有了一定的了解,下面我来试试文法几型是怎么判断的吧!
首先,文法分成4类,0型,1型,2型,3型。0型强于1型,1型强于2型,2型强于3型。
(1)3型文法判断,左边只有一个终结符,右边最多包含两个字符(形如A→aorA→aB)。
1.当右边只有一个字符的时候,该字符必定是终结符(一般是小写)。
2.当右边有两个字符的时候,该字符的必定包含一个非终结符(一般大写字母)和一个终结符(一般小写字母)。
注:如果右边是两个字符的话,右边的两个字符的相对位置是固定的,也就是,如果其中一个产生式终结符+非终结符,那么,右边只要是两个字符的,一定是终结符+非终结符的形式。
(2)2型文法判断(上下文无关语言),左边只有一个字符,右边字符没有限定,有限个即可。
(3)1型文法判断(上下文有关语言),左边至少包括一个非终结符,右边字符没有限定,有限个即可。同时,右边串的长度必须大于等于左边串的长度。
(4)0型文法(短语文法) 先判断上面的,如果都不是,那就是0型文法。
注:判断文法,要先从3型文法开始,然后2型,以此类推到0型。如果判断是3型文法,那肯定也是2型1型0型。如果判断是2型文法,那肯定不是3型文法,肯定包括1型和0型。
看了上面这么多文字,我们来做道题热热身趴!
(大写字母是非终结符,小写终结符)
分析:
1.首先先分析是不是3型文法,左边只有一个终结符,右边最多包含两个字符。比如Bb→bB,左边就有两个字符了,显然是不满足条件的。
2.然后再分析是不是2型文法,左边只有一个字符,右边字符没有限定。比如Bb→bB,左边就有两个字符了,显然是不满足条件的。
3.然后再分析是不是1型文法,左边至少包括一个非终结符,右边字符没有限定,有限个即可。同时,右边串的长度必须大于等于左边串的长度。显然是满足条件的。0型文法就不用判断啦,是1型文法的话,那肯定也是0型文法。
以上,是1型文法。
创作不易,给小编点个关注趴!!