如何为特定情况制作无上下文语法

时间:2015-04-14 23:08:14

标签: context-free-grammar

问题就像这样

创建一个生成{a ^ i b ^ j:2i< j + 2< 3I}。  我的问题是这里有很多案例。例如,这对于j = 1,2,4不起作用。同样对于j = 5,6,7,8,9,我们需要i = 3,3,4,4,4。所以我如何处理这样的事情,做这样的事情是否有任何技巧,或者我使它看起来更难。

1 个答案:

答案 0 :(得分:0)

你让它变得更难。

使用语法是一种经典的递归分析技术。对于递归,您总是需要提出两个问题:如何进入下一步?我怎么知道我什么时候完成的?

第二个问题很简单:您已经发现基本案例是aabbb(即i=2, j=3)。没有简短的单词可以成为语法的一部分。

现在,假设我们有一个更长的单词,这意味着i必须大于2.我们如何进入下一步?换句话说,我们如何找到一个较短的有效单词?我们可以删除a(减量i),但我们还需要修复j。从不等式中可以清楚地看出,j可以减少两个或三个(两者都可能有效,但两个中的一个必须有效)。

这将导致语法模糊,但问题并不是说语法需要明确。然而,如果两个答案都是可能的话,基于总是在相同方向上解决决策(两个或三个)的策略,很容易得出一个明确的语法。