1.什么是文法
文法是用于描述语言的语法结构的形式规则。任何一种语言都有它自己的文法,不管它是机器语言还是自然语言。就像自然语言里有主谓宾这样的文法一样,机器语言也有描述它语言构成的特定文法
2.术语解释
终结符和非终结符在计算机科学和语言学的领域是用来指定推导规则的元素。在某个形式语法之中,终结符和非终结符是两个不交的集合。
通俗的说,终结符号就是语言中用到的基本元素,一般不能再被分解;
名词,动词,形容词,助词,等等基本语言单位.
非终结符则是"语法"中用到的元素,除非谈论"语法",一般交谈语言中并不会用到非终结符.
比如,主语,短语,词组,句子.
从形式语言中定义看,终结符(T)就是不可再分的字符或串.
而非终结符(N)是一个递归形式的定义:由终结符和至少一个非终结符号组成的串.
产生式:用终结符替代非终结符的规则。
3.文法类型
0型文法
0型文法也称短语文法,此文法对应于图灵机。设G=(VN,VT,P,S),如果它的每个产生式α→β是这样一种结构:α∈(VN∪VT)*且至少含有一个非终结符,而β∈(VN∪VT)*,则G是一个0型文法。简而言之,左边不能是单独的终结符,至少有一个非终结符。例如:
a→Bb,a→B,a→b都不是符合0型文法
A→a,Aa→B,Aa→Bb符合0型文法
A→a,BA→a,A→aB,A→Ba等都符合2型文法
Aa→B,Ab→a只符合1型文法,而不符合2型文法
A→aB,B→cD符合3型文法。
A→aB,B→Dc不符合3型文法。因为A→aB的右侧是:终结符+非终结符;而B→Dc的右侧是:非终结符+终结符,两者的右侧结构不相同,故而不符合3型文法。
扩展一下,如何判断是否属于3型文法:
第一点:左边必须只有一个字符,且必须是非终结符;第二点:其右边最多只能有两个字符,且当有两个字符时必须有一个为终结符而另一个为非终结符。当右边只有一个字符时,此字符必须为终结符。第三点:对于3型文法中的所有产生式,其右边有两个字符的产生式,这些产生式右边两个字符中终结符和非终结符的相对位置一定要固定,也就是说如果一个产生式右边的两个字符的排列是:终结符+非终结符,那么所有产生式右边只要有两个字符的,都必须前面是终结符而后面是非终结符。反之亦然,要么,就全是:非终结符+终结符。