可选规则(myRule?)与规则和空替代项((myRule |))

时间:2018-12-01 10:57:35

标签: antlr antlr4

在可以在grammars-v4存储库(https://github.com/antlr/grammars-v4/blob/master/antlr4/ANTLRv4Parser.g4)中找到的ANTLRv4语法中,可选规则path('listing-form/<step>' , ListingWizard.as_view() , name='listing-form'),为:

  • 有时使用ebnfSuffix进行匹配,请参见ebnfSuffix?
  • 有时使用(ebnfSuffix |)进行匹配,请参见lexerElement

我的确是在问自己,在这里以及两者的含义是否略有不同。

grammars-v4存储库在https://github.com/antlr/grammars-v4/blob/master/cql3/CqlParser.g4中有另一个示例,关于使用的element规则,这两种模式相同,具有可选元素或带有空的替代项。

编辑:根据建议,我在此处添加了我所指的语法部分:

beginBatch

1 个答案:

答案 0 :(得分:1)

ebnfSuffix?(ebnfSuffix | )的行为完全相同:它们(贪婪地)可选地匹配ebnfSuffix

它们都在语法中使用的事实可能是因为它是从某些使用该表示法的规范(或其他语法)翻译而来的,并且该表示法没有?运算符,但这是只是猜测。

我个人只会使用ebnfSuffix?