我的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高一级。 但是只允许结构化进入下一级别。
我没有计划如何检查下一行是否在同一水平。 你能给我一个提示或类似的代码片段吗?
由于
答案 0 :(得分:1)
您尝试实现的语法是类似python的语法,即允许基于文本缩进定义块范围的语法。 Here您可以通过一些有趣的链接找到关于此主题的讨论。
如果您按照这些链接进行操作,您会发现xtextadd,这是此类规范的草稿实施,包括一个很棒的(非常完整的)tutorial解释您应该注意的每个细节如果您计划实现基于缩进的块功能。您还可以找到非常有用的课程,例如PythonTerminals.xtext和PythonesqueTokenSource.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的家庭自动化示例。