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')+
;
如果这对你的语法更有效。
我有一种自定义脚本语言,我正在尝试使用 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')+
;
如果这对你的语法更有效。