如何在一个特定规则中不允许使用空格 - 否则语法会正确地跳过空格
How to not allow whitespace in one particular rule - grammar skips whitespace correctly otherwise
我们的语法允许用户通过 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)令牌,但这也意味着用户可以输入spaces 在每个标记之间,因为我们的语法跳过白色 space。
我们需要的是 'tagindex' 不接受任何 space 以便用户被迫输入例如:
$$TAGINDEX=123$$
实现该目标的最佳方法是什么?
由于 tagindex
不是递归的并且不使用任何非终端规则,您可以将其设为终端规则。假设它不与任何其他规则重叠,那应该不会导致任何问题。
我们的语法允许用户通过 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)令牌,但这也意味着用户可以输入spaces 在每个标记之间,因为我们的语法跳过白色 space。
我们需要的是 'tagindex' 不接受任何 space 以便用户被迫输入例如:
$$TAGINDEX=123$$
实现该目标的最佳方法是什么?
由于 tagindex
不是递归的并且不使用任何非终端规则,您可以将其设为终端规则。假设它不与任何其他规则重叠,那应该不会导致任何问题。