XTEXT:控制何时允许空格

XTEXT: Controlling when whitespace is allowed

我有一种自定义脚本语言,我正在尝试使用 XTEXT 进行语法检查。它归结为格式为

的单行命令
COMMAND:PARAMETERS

在大多数情况下,xtext 运行良好。我目前 运行 遇到的唯一问题是如何处理想要的(或不需要的)白色 space。该语言不能有 space 来开始一行,并且冒号后面不能有 space。同样,我需要在参数中允许白色 space,因为它可能是一串文本或类似的东西。

我在参数中使用了允许白色space的数据类型:

UNQUOTED_STRING:
    (ID | INT | WS | '.' )+
;

这行得通,但副作用是整行允许 space。

有谁知道限制允许白色 space 的地方的方法吗?

提前感谢您的任何建议!

您可以使用一组空的隐藏标记,例如

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')+
;

如果这对你的语法更有效。