Context free grammar 语言L={a^(n)b^(m)c^(k):m=|i-k}的上下文无关语法

Context free grammar 语言L={a^(n)b^(m)c^(k):m=|i-k}的上下文无关语法,context-free-grammar,regular-language,formal-languages,context-free-language,Context Free Grammar,Regular Language,Formal Languages,Context Free Language,我有这种语言L={a^nb^mc^k:m=|n-k} 我知道m=|n-k可以用两种方式表达 1) m=n-k表示n>=k或n=m+k 2) m=k-n表示k>=n或k=m+n 因此,我得到了两种语言, L1={a^nb^mc^k:n=m+k} L2={a^nb^mc^k:k=m+n} 然后我声称L是两者的并集,L=l1u-L2 我不太明白如何生成一个语法,其中一个终端的一个指数是其他两个终端的总和。i、 e,在L1中,您有n=m+k 此外,L1可以进一步简化为 a^n=>a^(m+k)=>a

我有这种语言
L={a^nb^mc^k:m=|n-k}


我知道
m=|n-k
可以用两种方式表达

1) m=n-k表示n>=k或n=m+k
2) m=k-n表示k>=n或k=m+n

因此,我得到了两种语言,
L1={a^nb^mc^k:n=m+k}
L2={a^nb^mc^k:k=m+n}

然后我声称
L
是两者的并集,
L=l1u-L2

我不太明白如何生成一个语法,其中一个终端的一个指数是其他两个终端的总和。i、 e,在
L1
中,您有
n=m+k

此外,
L1
可以进一步简化为
a^n=>a^(m+k)=>a^(m)a^(k)
L1={a^ma^kb^mc^k:m,k>=0}


试图回答
L1={a^ma^kb^mc^k:m,k>=0}

语法G1
S->A|B

A->aAb|lambda


对于L1,您可以使用

S -> aSc
S -> T
T -> aTb
T -> 

与L2类似。

a^n b^n

以CFG为例:

S ::= aSb | <empty string>
同样,由于每一个产品都保留了我们想要的属性(即
c
s的数量是
a
s的数量加上
b
s的数量),它将适用于我们在语法中生成的任何句子


你可以运用类似的推理来找出语法,从而保留你在作品中提到的其他数学属性。

我理解
S:=aSc
T:=bTc
部分,但是你能解释一下你第一部作品中的
S->T
是什么吗.
|
是显示
S
可能的不同右侧的简写。语法等价于:
S:=aSc;S::=T;S::=;T::=bTc;T::=
其中
S
是起始符号,
T
只是语法中的另一个非终结符号,就像原始帖子中的
A
B
。我们需要另一个非终结符的原因是确保在添加所有
b
s之前添加所有
a
s;如果我们只使用
S
,我们最终会生成像
bacc
这样的字符串,因此,非终端
T
用于将
S
T
连接在一起。我想你可以这么说。我投票结束这个问题,因为它与计算机编程无关。有没有办法将它移到另一个站点?可能在CS堆栈交换或数学中。
S ::= aSc | T | <empty string>
T ::= bTc | <empty string>