如何在一个特定规则中不允许空格 - 否则语法会正确跳过空格

时间:2018-05-15 18:46:55

标签: antlr4

我们的语法允许用户通过ID(友好名称)或INDEX通过编辑器指定标签。语法片段如下所示:

tagindex
 : DOLLARDOLLAR 'TAGINDEX' ASSIGN tagid=INT DOLLARDOLLAR
 ;

// A tag is either an ID or an INDEX
tag
: ID                            
| tagindex                          
;

我们使用'tagindex'规则,因为这样我们可以轻松访问Listener(EnterTagindex)和Visitor(VisitTagindex)中的tagid(或yeah INT)令牌,但这也意味着用户可以在每个令牌之间输入空格令牌,因为我们的语法会跳过空格。

我们需要的是'tagindex'不接受任何空格,以便用户被迫输入例如:

$$TAGINDEX=123$$

实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

由于tagindex不是递归的,并且不使用任何非终端规则,因此您可以将其作为终端规则。假设它不与任何其他规则重叠,那不应该导致任何问题。