我正在定义Xtext语法规则以解析诸如YYYY-MM-DDTHH-MM-SS之类的简单时间戳,但是,当我发送诸如2019-01-01T08:12:14
之类的内容时,解析器不会进行解析,但是当我发送2019-01-01 T 08:12:14
。
我已经尝试删除规则定义的标记之间的每个空格,但这无济于事(可能也无济于事)
规则是:
Timestamp
:
year=INT '-' month=INT '-' day=INT 'T' hour=INT ':' minute=INT (':' second=INT)?
;
答案 0 :(得分:1)
在您的情况下,利用hidden()
子句应该可以解决问题
Timestamp hidden()
:
year=INT '-' month=INT '-' day=INT 'T' hour=INT ':' minute=INT (':' second=INT)?
;
但是还有另一个问题:
'T' hour=INT
,它需要T
周围有空格,否则将解析ID。
您可以使用片段来克服这个问题
Timestamp
:
Date 'T' Time
;
fragment Date hidden():
year=INT '-' month=INT '-' day=INT
;
fragment Time hidden():
hour=INT ':' minute=INT (':' second=INT)?
;
但是仍然存在需要空格的问题
=>我建议为整个事件引入终止规则(不确定是否有冲突的规则)
Timestamp
:
ts=TS
;
terminal TS: INT'-'INT'-'INT'T'INT':'INT(':'INT)?;