我有一种上下文无关的语言,我必须为其创建上下文无关的语法以及下推自动机(确定性或非确定性)。我尝试了不同的生产规则,并使用jflap模拟了它们,但不幸的是未成功。
任何一种指导方针,我们都会感激。
L = { s1@s2@s3@…@sk | k > 1
∧ si ∈ {0,1}*
∧ ∃i,j i≠j ∧ si=sjR
}
L中的字符串示例为:{01 @ 10、110 @ 11111 @ 011,...}
正式定义很难解析,但这是我从中得到的:
假设这是语言,我们的策略将是先执行第三个条件,然后执行第一个条件,然后执行第二个条件。为了执行第三,我们需要至少输入一对彼此相反的字符串:
S -> 0S0 | 1S1
这为我们提供了wSw ^ R形式的字符串。现在,我们希望能够将其他字符串添加到前面,中间或后面,并以@:
分隔S -> 0S0 | 1S1
S -> T@S | S@T | @T@ | @
最后,我们需要允许T生成0和1的字符串。
S -> 0S0 | 1S1
S -> T@S | S@T | @T@ | @
T -> 0T | 1T | e
要生成任何语言的字符串:
使用该语言的PDA可以执行以下操作:
您在这里做出两个不确定性的猜测:首先,您将猜测会有相反含义的字符串。其次,您猜您找到了它。如果这两个猜测都是正确的(并且对于该语言中的任何字符串,至少对于k(k + 1)/ 2个猜测中的一对),那么NPDA会接受。