XText - 如何检查下一行中的语法违规

时间:2015-07-31 08:16:33

标签: xtext

我的xtext有问题。 基本上我尝试创建一个空格敏感的语言。 这是我的语法应该允许的:

Title
Message
   Signal 1
   Signal 2
   Struct
      Signal 3
   Signal 4

这不应该被允许。

    Title
Message
   Signal 1
      Signal 2
   Struct
      Signal 3
   Signal 4

所以问题是信号1比信号2高一级。 但是只允许结构化进入下一级别。

我没有计划如何检查下一行是否在同一水平。 你能给我一个提示或类似的代码片段吗?

由于

2 个答案:

答案 0 :(得分:1)

您尝试实现的语法是类似python的语法,即允许基于文本缩进定义块范围的语法。 Here您可以通过一些有趣的链接找到关于此主题的讨论。

如果您按照这些链接进行操作,您会发现xtextadd,这是此类规范的草稿实施,包括一个很棒的(非常完整的)tutorial解释您应该注意的每个细节如果您计划实现基于缩进的块功能。您还可以找到非常有用的课程,例如PythonTerminals.xtextPythonesqueTokenSource.java。这是您项目的一个非常好的起点。

这些贡献的作者是martinbaker

答案 1 :(得分:1)

在最新的xtext版本中,xtext支持空白敏感语言。

有两个合成代币,BEGIN和END可以增加或减少压痕。

    // The following synthetic tokens are used for the indentation-aware blocks
terminal BEGIN:
    'synthetic:BEGIN'; // increase indentation
terminal END:
    'synthetic:END'; // decrease indentation

例如,观看带有xtext的家庭自动化示例。