XText - 如何检查下一行的语法冲突

XText - How to check syntax violation in next line

我对 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 高一级。 但是只有结构允许进入下一个级别。

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

谢谢

您要实现的语法是一种类似于 python 的语法,即允许根据文本缩进定义块作用域的语法。 Here 您可以通过一些有趣的链接找到有关此主题的讨论。

如果您点击链接,您会找到 xtextadd, which is a draft implementation of this kinds of specifications, including a great (really, very complete) tutorial explaining every detail you should be aware of if you plan to implement the indentation-based-blocks feature. You can also find very helpful classes such as PythonTerminals.xtext and PythonesqueTokenSource.java。这是您项目的一个很好的起点。

这些贡献的作者是 martinbaker

在最新的 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 提供的家庭自动化示例。