上下文自由语法方程

时间:2014-09-22 02:46:16

标签: context-free-grammar

对CFG问题感到困惑。

此语法允许以下哪一项

S -> aS | bA
A -> c  | cA


A: a*bc*
B: a*b*c*
C: a*b*c
D: a*bc+

我的困惑在于*,我理解为0次或更多次。

对于A,我认为这不起作用,因为你可以有多个a(aS重复),然后是b(bA),然后是c。但是c不能有*,好像你叫b(bA),A总是给c。并且*表示你可能有零。

对于B,我认为这不起作用同样的规则最终适用,因为c有*。

对于C,我认为这可能有效,因为你可以有多个a(重复aS),然后是可能的b,然后是c。我很困惑,因为b *。这是否意味着它可能有多个b?如果是这样,这将是不正确的,因为'b'只能在上面定义的语法上下文中出现一次。

对于D,我认为这完全可以工作多次(aS重复),b将发生ONCE,c将发生1次或更多次。

所以A不,B不,可能吗?,是的。

这种想法是对还是错? *让我失望。

1 个答案:

答案 0 :(得分:1)

选项D完全代表语法,其他语言总是在某些时候失败,所以你得到了它的正确性。选项A将失败,因为' c'语法不允许为零,选项B和C将失败,因为只有一个' b'是允许的。