如何检查ANTLR令牌仅在解析器中使用一次或更少

Sim*_*ard 1 parsing antlr rules antlr3

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

someRule : TOKENA TOKENB;
Run Code Online (Sandbox Code Playgroud)

它会接受:"tokena tokenb"

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

someRule : TOKENA* TOKENB;
Run Code Online (Sandbox Code Playgroud)

那么我可以:"tokena tokenb"或"tokenb"或"tokena tokena tokenb"

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

"tokena tokenb"或"tokenb"但不是"tokena tokena tokenb"?

非常感谢

Bar*_*ers 6

...无论如何,我可以说这个令牌可以有1次或更少但不超过1次吗?...

这是如何做:

someRule 
  :  TOKENA? TOKENB
  ;
Run Code Online (Sandbox Code Playgroud)

要么:

someRule 
  :  TOKENA TOKENB
  |  TOKENB
  ;
Run Code Online (Sandbox Code Playgroud)