对于软件工程学生,应该能够给出一个文法的写法,就能准确判断他是属于哪一类型。
下面是知识内容
文法一共分为4种类型
0型,1型,2型,3型
他们之间是一个包含关系:
这意味从0->3型文法,要求越来越苛刻。
文法形如:G=(VN,VT,P,S)
其中P是规则(产生式),形如:α->β
-
0型文法(短语文法):每个文法的规则的左边必须含有一个非终结符,意思就是α必须含有一个非终结符。
-
1型文法(上下文有关文法):若文法的每一个产生式α->β,都满足|β|≥|α|,仅仅S->ε除外。
意义:这样保证经过产生式定义出来的符号串能够不至于越来越短
(他的每一个产生式也可以描述为 α1Aα2->α1βα2,其中α1,α2和β都在(VN∪VT)*中,β≠ε,A在VN中) -
2型文法(上下文无关文法):每个产生式的左部(α)只能是一个非终结符,β∈V*。
还是同上,文法形如:G=(VN,VT,P,S)
其中P是规则(产生式),形如:α->β -
3型文法(正规文法):文法的每一个产生式都形如A->aB或A->a,其中A和B都是非终结符,其中a∈VT*。
注意: A->aB代表了,右边开始只能先是一个终结符,然后是一个非终结符。(强调一个,而不是先终结符然后非终结符,但是数量任意)
判断练习:
其中(打√的满足三型文法,打×的则不满足三型文法)
思考小问题:
程序语言最少是符合几型?
答:
最少也要满足二型。