我需要帮助找到这些语言的语法。 我觉得我无法使用这些解决方案
1){a ^ h b ^ k a ^ m b ^ n | h + k = m + n}
2){a ^ i b ^ j a ^ k | (i = j和k≥0)或(i≥0且j> k)}
任何帮助将不胜感激
答案 0 :(得分:2)
我假设您正在寻找无上下文的语法。我将使用S
是根生产规则的惯例,而大写字是规则(例如S
,AB
,A
等。 ,空作品写成empty
,文字写成{{1}}和'a'
。
第一个语法是:
'b'
这里的诀窍是要意识到要保持两半长度相同,必须定义语法产生,在两侧添加一个符号。然后要注意我们首先添加' a'在左边,' b'在右边,我们从那里开始添加' a'对于双方,或者' b'双方,最后继续添加' b'在左边和' a'在右边。
第二个语法是:
S := AB
AB := 'a' AB 'b' | AA | BB
AA := 'a' AA 'a' | BA
BB := 'b' BB 'b' | BA
BA := 'b' BA 'a' | empty
这比第一个更容易:根生产已经作为两件事的选择给出了,因此在规则中表达它是很自然的。第一个选择是生成一定数量的'然后是相同数量的'然后是任意数量的' a' s。第二种选择是产生一些“a”,然后产生一些正数的'然后是相同数量的' && 39; s和& #39;一个'第这保证了" j> k"在那个选择的描述中。
这里的语法都不是明确的,尽管删除歧义只是稍微复杂一点。