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 提供的家庭自动化示例。
我对 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 提供的家庭自动化示例。