需要帮助找到这些语言的上下文无关语法

时间:2017-04-02 23:24:10

标签: algorithm parsing context-free-grammar automata

我需要帮助找到这些语言的语法。 我觉得我无法使用这些解决方案

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)}

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

我假设您正在寻找无上下文的语法。我将使用S是根生产规则的惯例,而大写字是规则(例如SABA等。 ,空作品写成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"在那个选择的描述中。

这里的语法都不是明确的,尽管删除歧义只是稍微复杂一点。