You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构造识别语言{a^i b^j c^k | i≠j且j=k}的上下文无关文法求助

解决你的上下文无关文法构造问题

看起来你想要构造一个上下文无关文法(CFG)来生成满足以下条件的字符串:

  1. 字符串由a、b、c组成(若你实际需要包含#、=、≠标记,我也提供了对应版本)
  2. a的数量 i ≠ b的数量 j
  3. b的数量 j = c的数量 k

你的原始文法问题在于,C 是独立生成任意数量的c,没有和Y中生成的b的数量绑定,所以无法保证j=k。我们只需要调整产生式,让b和c的生成同步起来,同时保留i≠j的约束即可。

修正后的CFG(纯字符场景)

S -> Y
Y -> aYbc | bBc | aA
A -> aA | ε
B -> bBc | ε

文法解释

  • aYbc:每生成一个a,就同步生成一个b和一个c。这条产生式可以推导出a^n (bc)^n(n≥1),如果后续继续推导bBc或aA,就能得到a^n b^{n+m} c^{n+m}(m≥1,此时i=n≠j=n+m)或a^{n+m} b^n c^n(m≥1,此时i=n+m≠j=n)。
  • bBc:生成b^m c^m(m≥1),此时a的数量i=0,自然满足i≠j(j=m≥1)。
  • aA:生成a^m(m≥1),此时b和c的数量j=k=0,自然满足i≠j(i=m≥1)。

如果你的目标字符串需要包含#、=、≠这些标记(比如形如#a^i = #b^j #c^j或#a^i ≠ #b^j #c^j),可以用下面的CFG:

带标记的CFG

S -> EqualExpr | NotEqualExpr

# 生成 #a^i = #b^j #c^j,i≠j
EqualExpr -> AMoreEqual | BMoreEqual | AOnlyEqual | BOnlyEqual
AMoreEqual -> #a a A = #b b BC c
BMoreEqual -> #a a AB = #b b BC c
AOnlyEqual -> #a a A = #b #c
BOnlyEqual -> #a = #b b BC c

# 生成 #a^i ≠ #b^j #c^j,i≠j
NotEqualExpr -> ANotEqualB | BNotEqualA | AOnlyNotEqual | BOnlyNotEqual
ANotEqualB -> #a a A ≠ #b b BC c
BNotEqualA -> #a a AB ≠ #b b BC c
AOnlyNotEqual -> #a a A ≠ #b #c
BOnlyNotEqual -> #a ≠ #b b BC c

# 辅助产生式
A -> a A | ε
AB -> a AB | ε
BC -> b BC c | ε

带标记文法的核心逻辑

  • BC产生式:通过b BC c同步生成b和c,严格保证j=k。
  • 拆分四种i≠j的场景:
    1. AMoreEqual/ANotEqualB:a的数量多于b/c的数量
    2. BMoreEqual/BNotEqualA:b/c的数量多于a的数量
    3. AOnlyEqual/AOnlyNotEqual:b/c数量为0,a数量≥1
    4. BOnlyEqual/BOnlyNotEqual:a数量为0,b/c数量≥1

这样就能完全满足你要求的i≠j且j=k的约束啦!

内容的提问来源于stack exchange,提问作者I_Love_Islam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:51:13