[英]Context-free grammar for the language L = {a^(n)b^(m)c^(k): m = |i - k|}
我有这种语言L = {a^nb^mc^k: m = |n - k|}
。
我知道m = |n - k|
可以用两种方式表示1) m = n - k for n >= k or n = m + k 2) m = k - n for k >= n or k = m + n
因此,我得到两种语言
L1 = {a^nb^mc^k: n = m + k}
和L2 = {a^nb^mc^k: k = m + n}
。
然后我声称L
是两者的并集, L = L1 U L2
。
我不太了解如何生成语法,其中一个终端的一个指数是其他两个终端的总和。 即,在L1
您有n = m + k
。
L1
也可以进一步简化为
a^n => a^(m+k) => a^(m)a^(k)
因此L1
变为
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
B -> aBc|lambda
对于L1,您可以使用
S -> aSc
S -> T
T -> aTb
T ->
和L2类似。
a^nb^n
:
考虑一下CFG:
S ::= aSb | <empty string>
这将生成具有正确匹配指数的所有字符串a^nb^n
。 这个工作的原因是,加入a
使用该语法需要添加附加的b
为好; 通过确保每个产品都保留期望的属性( a
的数量与b
s的数量相同),我们已经确保(通过归纳,因为该属性最初是持有的,每个产品都保留了它)对于我们从语法生成的每个句子都将成立。
a^nb^mc^(n+m)
:
如果我们想制作一个语法以生成稍微复杂一点的a^nb^mc^(n+m)
,则可以应用类似的推理:我们在语法结构中进行编码,即添加a
或b
需要添加c
:
S ::= aSc | T | <empty string>
T ::= bTc | <empty string>
同样,由于每一个生产保持我们所期望的性质(即数量c
s是数a
小号加的数b
S),这将保持我们在语法产生的任何一句话。
您可以应用类似的推理来找出语法,这些语法将保留您在OP中提到的其他数学属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.