Automata:CFG用于以下语言

时间:2016-04-03 18:53:01

标签: context-free-grammar automata context-free-language

请查看以下语言:

(a, b, c)* − {anbncn|n≥0}

我的问题是:我如何为它编写无上下文语法?

一般情况下,当某些东西被排除在外时我怎么能写一个语法(即有“ - ”符号)?

2 个答案:

答案 0 :(得分:1)

没有算法来确定某种语言是否无上下文。因此,对于你提出的问题没有通用解决方案就不足为奇了。

无上下文语言不会在互补,设置差异或交集下关闭。 (但是他们在连接,联盟和Kleene明星的情况下关闭。)无论如何

{anbncn|n≥0}

不是一种无上下文的语言,但它的补充(如你的问题)是无上下文的。这个事实的证明(通过构建补语的无上下文语法)是补充下非关闭CFG的标准示例。

概括地说,你的语言L可以由以下联合组成:

  • 字母{a,b,c}上字母不整齐的所有字符串。换句话说,包含子串bacbca的所有字符串。

  • {aibjck|i,j,k≥0∧i≠j}

  • {aibjck|i,j,k≥0∧j≠k}

答案 1 :(得分:0)

(a, b, c)* − {a^nb^nc^n|n≥0}

这表示您可以选择a,b或c中的任何一个,并重复其中任何一个,例如abccbaabaab或abca或bccc

对于*,您使用A->aA |eA->AA | a | e

使用该规则,您可以:

S -> A | B | C A->aA |e | AS B->bB |e | BS C->cC |e | CS

如果整个物体上有一个Kleene星(....)*,可以使用A,B和C中的S,并允许你回到起点并添加另一个符号

我不知道如何在符号被排除的情况下制作语法,但从逻辑上讲,如果-不是可用的终端符号,则您已将其排除在外。