我有以下语法。 我的语法需要接受这些陈述:
X IN(10,20,30)
X IN(10 20 30)
expr
: expr IN '(' constant_list ')' #InExp
;
constant_list
: constant ((',') constant)*
;
constant
: numeric_constant
| character_constant
;
SPACE
: [ \t\r\n] -> skip
;
我只是尝试将规则constant_list编辑为:
constant_list
: constant ((','|SPACE) constant)*
;
但这些空间被忽略了。我该如何处理这种情况?我需要使用隐藏频道吗?
谢谢!
答案 0 :(得分:3)
不,您不能在解析器规则中使用SPACE
令牌:它们被跳过(从词法分析器中丢弃)。
你能做的是:
constant_list
: constant (','? constant)*
;
答案 1 :(得分:0)
我解决了编辑规则的问题:
constant_list
: constant (',' constant)*
| constant ( constant)*
;