习题六作业中发现的问题:
6.2:由FA构造正则文法时,如果FA有多个接受状态的时候,简单按照书上的方法会有多个‘识别符号’。要解决这个问题,可以引入一个新的符号Z作为识别符号,然后对于每个接受状态X,添加规则Z::=X。此时得到的文法不是正则的。可以使用消单规则的方法从这个文法得到正则的文法。
6.6由NFA 构造DFA的时候,不必要枚举出所有的NFA的状态的子集对应的状态。因为这样得到的DFA状态中有很多是不可以达到的。可以按照书上后一个例子的方法,由开始符号集合出发,得到DFA的状态集合。是用该方法得到的集合比较小。
6.11 在最小化一个DFA的时候,注意每次划分出更小的子集的时候,两个状态在同一个子集中当且仅当他们对于所有的标记的弧,其目标状态也在(当前的划分下)的同一个子集中。有同学理解为其目标状态相同是不对的。另外,这一次没有将这两个状态分开,后面仍然可能将它们分开。
6.12 由FA构造正则文法的时候,如果开始状态A中有弧进入,那么A也必须对应一个非终结符号。对于一个由A到X的标记为a弧,对应了两个规则:X::=Aa和X::=a。由Y
到A的标记为b的弧对应的规则就是A::=Yb。有些同学通过加入A::=ε来代替X::=a,
虽然语言是正确的,但是这个规则不是正则的。
还有一些要注意的问题:
1:写出(或画出)FA的时候,必须指明开始状态(集合)和接受状态集合。
2:DFA不仅仅是每个状态的出边的标记两两不同,而且起开始状态只能有一个。