grammar - 所有字符串 X2Y,其中 X 和 Y 由 0 和 1 组成,且 X ≠ Y

标签 grammar context-free-grammar context-free-language

此题摘自A. Shen的书《算法与编程。问题与解决方案》。这个问题本身是由 M. Sipser 传达的。

作者要求读者定义一个上下文无关语法,生成以下语言:

{X2Y | X ∈ {0, 1}*,Y ∈ {0, 1}*,X ≠ Y}

首先,我无法理解这样的语言如何能够是上下文无关的(从我的新手角度来看): XY 都可以是任意序列,但它们不能同时是一个序列。对我来说,这似乎是一个上下文相关的属性。 “上下文无关”和“上下文敏感”这两个术语背后的真正含义是什么,这与上面的上下文无关的语言并不矛盾?如何构建这样一种语法(我真的很感激一个提示而不是完整的解决方案)?

最佳答案

既然你要求提示,我会给你一个提示,而不是写出整个答案。这里的困难在于我们需要 X 和 Y 是不同的字符串。我们知道 X 和 Y 相同的 X2Y 不是上下文无关的。这是因为我们有 |X| =|Y|要检查的事情 - 第一个符号匹配,第二个符号匹配,等等。但是,如果 X 和 Y 必须不同,我们只需要保证它们至少在一个地方不同。如果我们能保证它们的符号数N不同,那么我们就保证X和Y不同。你能编写一个上下文无关语法来生成 (0+1)^n 0 (0+1)* 2 (0+1)^n 1 (0+1)* 吗?如果是这样,您的问题的答案就是该 CFG 的语言与交换了不匹配符号的语言的并集(因此 1 在前,然后是 0)。

关于grammar - 所有字符串 X2Y,其中 X 和 Y 由 0 和 1 组成,且 X ≠ Y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59165679/

相关文章:

grammar - 我的解决方案对于上下文无关语法是否正确?

python - 如何读取Python字典和元组

grammar - CFG : Why is this grammar ambiguous?

regex - 描述正则表达式的语言本身是正则的吗?

performance - Scala 解析器组合器、歧义语法和解析森林

grammar - 在 Picat 中使用定子句语法

c++ - C++ 的英语语法检查器库

java - AntLR4 : Build A function

parsing - 了解语法是否是 LR(1) 且没有解析表

regex - 可以使用正则表达式识别任何上下文无关语言吗?