nin*_*ino 5 lexical-analysis context-free-grammar
问题是为包含所有字符串的语言开发上下文无关文法,这些字符串的 As 数量多于 Bs。
我想不出合乎逻辑的解决方案。有没有办法解决此类问题,什么可以帮助我更好地解决此类问题?有人可以提出一种逻辑方法来分析此类语法问题吗?
下面的语法生成所有比's{a,b}多a的字符串b。我用eps空字符串表示。
S -> Aa | RS | SRA
A -> Aa | eps
R -> RR | aRb | bRa | eps
Run Code Online (Sandbox Code Playgroud)
很明显,它生成的a's总是比b's 多。不太明显的是,它生成所有可能的字符串,{a,b}这些字符串的a's 比b's 多
生产R -> RR | aRb | bRa | eps生成所有平衡字符串(这是很容易看到),以及生产A -> Aa产生的语言a*(与零个或多个字符串,即a“S)。
这是语法背后的逻辑。请注意,如果w=c1,c2,c3,...,cn是一个字符串了{a,b}更多a的比b的话,可以随时分解成平衡串的连接(即数量相等a的和b的,其中包括空字符串)和形式的字符串a+。
例如,ababaaaba= abab(可由 生成R)、aaa(可由 生成A)、ba(可由 生成R)。
现在请注意,S -> Aa | RS | SRA产生式精确地生成了这种形式的字符串。
验证S涵盖以下情况就足够了(因为可以通过分解为此类子案例来涵盖所有其他案例,正如您应该验证的那样):
[a][balanced]: 使用S => SRA => AaR。[balanced][a]: 使用S => RS => RA => RAa。[balanced][a]balanced]: 使用S => SRA => RSRA => RAaR。