as 数量多于 bs 的语言的上下文无关文法

nin*_*ino 5 lexical-analysis context-free-grammar

问题是为包含所有字符串的语言开发上下文无关文法,这些字符串的 As 数量多于 Bs。

我想不出合乎逻辑的解决方案。有没有办法解决此类问题,什么可以帮助我更好地解决此类问题?有人可以提出一种逻辑方法来分析此类语法问题吗?

bla*_*azs 8

下面的语法生成所有比'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