对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不,可能吗?,是的。
这种想法是对还是错? *让我失望。
答案 0 :(得分:1)
选项D完全代表语法,其他语言总是在某些时候失败,所以你得到了它的正确性。选项A将失败,因为' c'语法不允许为零,选项B和C将失败,因为只有一个' b'是允许的。