代码之家  ›  专栏  ›  技术社区  ›  Kvass

这两条上下文无关的语法规则是一样的吗?

  •  1
  • Kvass  · 技术社区  · 11 年前

    这两种语法定义之间有区别吗(其中 | 表示OR和 ; 只是一个普通字符)?

    1. <foo> ::= <bar> | <foo> ; <bar>
    2. <foo> ::= <bar> | <bar> ; <foo>
    

    在我看来,foo会匹配一个看起来像 <bar> ; <bar> ; <bar> ; .... 无论使用哪种定义。我是在这里遗漏了什么,还是它们在功能上是一样的?

    1 回复  |  直到 11 年前
        1
  •  0
  •   musical_coder    11 年前

    我同意它们是等价的,因为两者的最终结果都是一个或多个 <bar> 的。但如果有任何新规则被添加到 <foo> (此类规则涉及除 <酒吧> ),它们可能不再等效。