繁体   English   中英

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

[英]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) ,则可以应用类似的推理:我们在语法结构中进行编码,即添加ab需要添加c

S ::= aSc | T | <empty string>
T ::= bTc | <empty string>

同样,由于每一个生产保持我们所期望的性质(即数量c s是数a小号加的数b S),这将保持我们在语法产生的任何一句话。

您可以应用类似的推理来找出语法,这些语法将保留您在OP中提到的其他数学属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM