概论
由语言构造文法的常用方法有4个:
- 对称法
- 逐步求精法(分解法)
- 等价法
- 电路状态转换法
还有第五种是混合法,是将上面四种方法综合使用的方法。
下面将配合例题依次讲解四种方法。
对称法
顾名思义,对称法适用于那些存在对称性的语言。
对称法构造的精髓在于:
- 找出对称轴
- 找出对称性
逐步求精法(分解法)
逐步求精法有两种:自上而下或者从左向右。
逐步求精法使用前提:语言中各成分之间没有关联。
等价法
产生式两边具有相同的特性
电路状态转换法
适用题型:语言中对元素的奇偶有要求的
首先理解一下电路状态的概念:0代表偶,1代表奇。
比如000代表语言中a,b,c的个数都是偶数。现在增加一个a,那么电路状态就转换成了100,同理增加b电路状态转换成010,增加c电路状态转换成001.
电路状态转换法解题步骤:
- 构造电路状态转换图
首先确定状态,如果有n个元素,则存在2^n个状态。
然后链接状态。
示例:三个元素下的所有状态转换:
- 确定开始状态和结束状态
开始状态和结束状态是相对的,视题目具体情况确定。
1)以全是0作为结束状态,以题目要求作为开始状态。
2)以题目要求作为结束状态,以全是0作为开始状态。
比如对于某种语言,以a或b开头,以c结尾,abc的数量皆是偶数,那么开始状态就不是唯一的,就不能用全是0作为开始状态。而结束状态是唯一的,所以可以拿全是0作为结束状态 - 命名各个状态
初始状态用S命名,其他状态用A、B、C…命名 - 写出相应的产生式
每条边上的变化都对应一条产生式
对结束状态要增加一条产生式:G->ε
严格来说,最后可以写出2^n (n+1) + 1条产生式。
混合法
多种方式的运用。
常见的如分解法+对称法、分解法+电路状态转换法等。