具有更多bs数的语言的上下文无关语法

时间:2016-04-01 15:47:16

标签: context-free-grammar lexical-analysis

问题是为语言开发一个无上下文语法,其中包含所有字符串,其中包含的字符串数比B字数多。

我无法想到一个合乎逻辑的解决方案。有没有办法解决这些问题,有什么可以帮助我更好地处理这些问题?有人可以提出一种合理的方法来分析这些语法问题吗?

3 个答案:

答案 0 :(得分:2)

以下语法生成{a,b}以上ab更多的所有字符串。我用eps表示空字符串。

S -> Aa | RS | SRA
A -> Aa | eps
R -> RR | aRb | bRa | eps

很明显,它总是比a生成更多b。它不太明显,它会生成{a,b}以上a以上b以上的所有可能字符串

制作R -> RR | aRb | bRa | eps生成所有平衡字符串(这很容易看到),制作A -> Aa生成语言a*(即字符串为零或更多a的)。

这是语法背后的逻辑。请注意,如果w=c1,c2,c3,...,cn是超过{a,b}的字符串,ab更多,那么我们总是可以将其分解为平衡字符串的串联(即相等数字) ab的,包括空字符串)和a+形式的字符串。

例如,ababaaaba = abab(可由R生成),aaa(可由A生成),{{1} }(可以由ba生成)。

现在请注意,制作R会精确生成此形式的字符串。

验证S -> Aa | RS | SRA是否涵盖以下情况就足够了(因为可以通过打破这些子句来涵盖所有其他情况,因为您应该验证):

  • S:使用[a][balanced]
  • S => SRA => AaR:使用[balanced][a]
  • S => RS => RA => RAa:使用[balanced][a]balanced]

答案 1 :(得分:0)

另一种可能更简单的解决方案:

S->A|AAB|BAA|e A->AA | a B->AB | BA | b

答案 2 :(得分:0)

S→TaT

T→ATb | bTA | TT | ɛ

A→aA |一个

T生成#a> = #b的任何字符串(包括空字符串)。 S确保在任何位置都比b多至少一个'a'。