使用逗号的Xtext可选顺序

时间:2018-06-14 18:11:02

标签: xtext

我有一个看起来像JSON的DSL,我需要支持元素的可选排序。例如:

{
    'id': 'someid',
    'position' : 'someposition',
    'operand' : 'someoperand'
}

为了支持任何“ID'”,“'位置'”和'操作数'的排序。有效逗号的令牌,我必须做这样的事情:

Block returns Block:
    {Block}
    '{'
        members+=BlockMember (',' members+=BlockMember)*
    '}'
;

BlockMember returns BlockMember:
    blockId=BlockId | position=BlockPosition | operand=Operand
;

问题是每个元素(id,position,operand)都是强制性的,也只是一次。有了这个语法,我有一些问题:

  1. 您可以多次定义元素(这也会破坏LSP 内容协助以后)。
  2. 我无法执行强制性要求。
  3. 它创建了一个推断的EMF模型,其中一个块有一个'成员'集合而不是明确定义的属性。这意味着稍后解析一个Block,我必须迭代该成员。
  4. 因为它需要格式良好的JSON,最后一个属性不能有逗号
  5. 我知道如果我强制执行特定订单并查找逗号,我可以执行此操作。然而,我想要做的是在(不包括最后一个)之间使用逗号之间的可选顺序而不引入一个'成员'这会产生上面列出的问题。

    有没有技术可以做到这一点?

0 个答案:

没有答案
相关问题