gpt4 book ai didi

whitespace - XTEXT:控制何时允许空格

转载 作者:行者123 更新时间:2023-12-01 12:33:41 29 4
gpt4 key购买 nike

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

COMMAND:PARAMETERS

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

我使用了一种数据类型来允许参数中有空格:

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

这行得通,但有副作用,即在整行中留有空格。

有谁知道限制允许空格的方法吗?

提前感谢您的任何建议!

最佳答案

您可以通过使用一组空的隐藏标记来全局禁止您的语法使用空格,例如

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

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

关于whitespace - XTEXT:控制何时允许空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31277134/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com