请查看以下语言:
(a, b, c)* − {anbncn|n≥0}
我的问题是:我如何为它编写无上下文语法?
一般情况下,当某些东西被排除在外时我怎么能写一个语法(即有“ - ”符号)?
答案 0 :(得分:1)
没有算法来确定某种语言是否无上下文。因此,对于你提出的问题没有通用解决方案就不足为奇了。
无上下文语言不会在互补,设置差异或交集下关闭。 (但是他们在连接,联盟和Kleene明星的情况下关闭。)无论如何
{anbncn|n≥0}
不是一种无上下文的语言,但它的补充(如你的问题)是无上下文的。这个事实的证明(通过构建补语的无上下文语法)是补充下非关闭CFG的标准示例。
概括地说,你的语言L可以由以下联合组成:
字母{a,b,c}
上字母不整齐的所有字符串。换句话说,包含子串ba
,cb
或ca
的所有字符串。
{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 |e
或A->AA | a | e
。
使用该规则,您可以:
S -> A | B | C
A->aA |e | AS
B->bB |e | BS
C->cC |e | CS
如果整个物体上有一个Kleene星(....)*
,可以使用A,B和C中的S,并允许你回到起点并添加另一个符号
我不知道如何在符号被排除的情况下制作语法,但从逻辑上讲,如果-
不是可用的终端符号,则您已将其排除在外。