我有自定义脚本语言,我试图使用XTEXT进行语法检查。它归结为格式为
的单行命令COMMAND:PARAMETERS
在大多数情况下,xtext工作得很好。我目前遇到的唯一问题是如何处理想要的(或不需要的)空格。该语言没有空格来开始一行,并且冒号后面不能有空格。同样,我需要在参数中允许空格,因为它可能是一串文本或类似的东西。
我使用数据类型在参数中允许空格:
UNQUOTED_STRING:
(ID | INT | WS | '.' )+
;
这样做有效,但是在整个生产线上都有空间。
有没有人知道限制允许使用空格的方法?
提前感谢任何建议!
答案 0 :(得分:3)
您可以使用一组空的隐藏令牌来全局禁止使用空格,例如。
grammar org.xyz.MyDsl with org.eclipse.xtext.common.Terminals hidden()
然后您可以根据特定规则启用它,例如
XParameter hidden(WS):
'x' '=' value=ID
;
请注意,这也允许换行。如果您不想要,可以传递自定义终端规则或覆盖默认的WS
规则。
这是一个更完整的例子(不完美):
grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals hidden()
generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"
Model:
(commands+=Command '\r'? '\n')+
;
Command:
SampleCommand
;
SampleCommand:
command='get' ':' parameter=Parameter
;
Parameter:
'{' x=XParameter '}'
;
XParameter hidden(WS):
'x' '=' value=ID
;
这将解析命令,例如:
get:{x=TEST}
get:{ x = TEST}
但是会拒绝:
get:{x=TEST}
get: {x=TEST}
希望能给你一个想法。您也可以通过仅限于某些规则限制空白来反过来执行此操作,例如
CommandList hidden():
(commands+=Command '\r'? '\n')+
;
如果这对你的语法更有效。