已知4变量解法,能否用少于4个含S变量构造语言L的正则文法?
结论:不存在使用少于4个变量(含起始符S)的可行解法
要构造语言 ( L = {a^n b^m : n,m \geq 0, n+m \text{ 为奇数}} ) 的正则文法,首先明确该语言的核心约束:
- 所有字符串必须是若干a(可0个)后跟若干b(可0个),不能出现b之后再跟a的情况;
- 字符串总长度 ( n+m ) 为奇数,即要么「a的个数为奇数且b的个数为偶数」,要么「a的个数为偶数且b的个数为奇数」。
分析最小状态需求
正则文法的变量对应有限自动机(DFA)的状态,而该语言的最小DFA需要4个状态,分别对应:
- ( S )(起始状态):未输出b,已输出a的个数为偶数(总长度偶数);
- ( A ):未输出b,已输出a的个数为奇数(总长度奇数,属于接受状态);
- ( B ):已输出b,总长度为奇数(属于接受状态);
- ( C ):已输出b,总长度为偶数。
这4个状态无法合并,原因如下:
- ( S ) 和 ( C ):( S ) 可继续输出a进入 ( A ),但 ( C ) 已进入b输出阶段,不能再输出a,转移行为不同;
- ( A ) 和 ( B ):( A ) 可继续输出a回到 ( S ),但 ( B ) 已进入b输出阶段,不能再输出a,转移行为不同;
- 接受状态(( A )、( B ))与非接受状态(( S )、( C ))可通过是否能直接结束区分。
对应的4变量正则文法
右线性文法规则示例:
- ( S \rightarrow aA \mid bB )
- ( A \rightarrow aS \mid \varepsilon \mid bC )
- ( B \rightarrow bC \mid \varepsilon )
- ( C \rightarrow bB )
该文法完整覆盖了语言 ( L ) 的所有合法字符串,且由于最小DFA的状态数为4,不存在状态合并的可能,因此无法用少于4个变量构造符合要求的正则文法。
内容的提问来源于stack exchange,提问作者Flash-KIM142
相关产品推荐
相关产品推荐

