软考之文法

来源:互联网 发布:js包装函数是什么 编辑:程序博客网 时间:2024/04/30 19:20

       要软考了,文法是一个考点,有的同学感觉这部分不太好理解,之所以不太好理解,很大的原因是教程里的叙述 ——云里雾里,可能是为了表明自己身为“教程”、具有不可动摇的地位,所以狐假虎威了一次吧;明天周四活动技术分享,本person自告奋勇地要讲关于这方面的东西,所以私下里做了一个PPT,感觉PPt不是很差,所以直接写成博客(*^__^*

【基础】  

终结符: 

不能单独出现在推导式左边,为最终状态;a/b/c/d……  

非终结符: 

推导过程中的占位符;一般大写A/B/C/D/…… 

α—>β 非终结符—>终极符


【0型文法】

      短语文法

    设G=(VN,VT,P,S),如果它的每个产生式α→β是这样一种结构:α∈(VN∪VT)*且至少含有一个非终结符,而β∈(VN∪VT)*,则G是一个0型文法;

    其实就一句话:α至少有一个大写字母

1型文法

     上下文有关文法

     对应于线性有界自动机。它是在0型文法的基础上每一个α→β,都有|β|>=|α|。这里的|β|表示的是β的长度。有一个特例α→ε也满足1型文法,这个很容易理解吧;

     也是一句话:|β|>=|α|

【2型文法】

   上下文无关文法

  它对应于下推自动机;在1型文法的基础上,再满足:每一个α→β有α是非终结符。

 what's   this‘s’“一句话”?


【3型文法】

  正规文法

     对应于有限状态自动机;在2型文法的基础上满足:A→α|αB(右线性)或A→α|Bα(左线性)

第一点:左边必须只有一个非终结符; 
第二点:右边最多只能有两个字符,且当有两个字符时必须有一个为终结符而另一个为非终结符;当右边只有一个字符时,此字符必须为终结符。 
第三点:右边有两个字符的产生式,两个字符中终结符和非终结符的相对位置一定要固定,也就是说如果一个产生式右边的两个字符的排列是:终结符+非终结符,那么所有产生式右边只要有两个字符的,都必须前面是终结符而后面是非终结符。反之亦然,要么,就全是:非终结符+终结符。


注意:

右线性 和 左线性

两套规则不能同时出现在一个语法中;

只能完全满足其中的一个,才能算 3型文法


小结:

0型:α 至少包含一非终结符

1型: |β|>=|α|

2型: α→β有α是非终结符

3型:A→α|αB(右线性)orA→α|Bα(左)


         有帮助吧,拿走不谢;我也就是说说,thanks for reading
0 0
原创粉丝点击