2

在 Antlr 中,如果我有一个规则,例如:

someRule : TOKENA TOKENB;

它会接受:“tokena tokenb”

如果我希望 TOKENA 是可选的,我可以说,

someRule : TOKENA* TOKENB;

那么我可以拥有:“tokena tokenb”或“tokenb”或“tokena tokena tokenb”

但这也意味着它可以重复多次。无论如何我可以说这个令牌可以出现1次或更少但不超过一次?所以它会接受:

“tokena tokenb”或“tokenb”但不是“tokena tokena tokenb”?

非常感谢

4

1 回答 1

6

...无论如何我可以说这个令牌可以出现1次或更少次但不能超过一次?...

就是这样:

someRule 
  :  TOKENA? TOKENB
  ;

或者:

someRule 
  :  TOKENA TOKENB
  |  TOKENB
  ;
于 2010-06-15T18:22:35.607 回答