Eclipse Xtext:带有有效/语义空白的语言的语法

Eclipse Xtext:带有有效/语义空白的语言的语法,eclipse,parsing,grammar,coffeescript,xtext,Eclipse,Parsing,Grammar,Coffeescript,Xtext,如何使用Xtext解析带有语义空白的语言?我正在为CoffeeScript编写语法,但我找不到任何关于这方面的好文档。好吧,你找不到 在解析类似Python的语言时,需要lexer发出INDENT和DEDENT标记。要实现这一点,您需要在lexer规则(Xtext的终端规则)中支持语义谓词,该规则首先检查输入的下一个字符在行中的当前位置是否等于0(行的开头)并且是'或'\t' 但是在浏览时,我看不到Xtext目前支持这一点。自XTEXT2.0以来,在产生式规则中增加了对语义谓词的支持(参见:6.

如何使用Xtext解析带有语义空白的语言?我正在为CoffeeScript编写语法,但我找不到任何关于这方面的好文档。

好吧,你找不到

在解析类似Python的语言时,需要lexer发出
INDENT
DEDENT
标记。要实现这一点,您需要在lexer规则(Xtext的
终端
规则)中支持语义谓词,该规则首先检查输入的下一个字符在行中的当前位置是否等于0(行的开头)并且是
'
'\t'

但是在浏览时,我看不到Xtext目前支持这一点。自XTEXT2.0以来,在产生式规则中增加了对语义谓词的支持(参见:6.2.8.语法谓词),但在终端规则中没有

使用Xtext实现这一点的唯一方法是让lexer生成终端空格和换行符,但这会使生成规则变得一团糟


如果您想使用Java(以及面向Java的解析器生成器)解析这样的语言,我建议使用ANTLR,在ANTLR中,您可以非常轻松地发出这样的
INDENT
DEDENT
标记。但是,如果您对Eclipse集成感兴趣,那么我不知道如何使用Xtext来实现这一点,对不起。

下面是Xtext中的一个示例,对于对CoffeeScript感兴趣的人来说,Adam Schmideg有一个

对于那些对在XText中解析Python(如DSL)感兴趣的人来说,上面提到的Ralf Ebert的Todotext代码在Github中不再可用,但您可以在中找到它。请参阅关于这项工作的介绍以及关于这项工作提出的建议

我今天一直在使用这段代码,我的结论是它在当前版本的XText中不再有效。在Eclipse中使用XText时,我认为它会进行“部分解析”。这与处理缩进敏感语言所需的有状态词法分析器不兼容。因此,我怀疑即使您修补lexer,Eclipse编辑器也无法工作。在本期中,Ralf似乎提出了解决这些问题的补丁,但在XText源代码中,这些更改似乎早已过时了?如果我错了,有人可以让它工作,我会非常感兴趣吗

有一个不同的实现,但我也不能让它与当前版本的XText一起工作


相反,我已经切换到支持开箱即用的模式

Xtext的2.8版支持。此版本附带了“家庭自动化示例”,您可以将其用作模板。

很酷(我必须深入研究一下XText,这是一个尚未回答此标签中的问题…:)!我不能删除我的答案,因为它是公认的答案@nicolaskruchten需要接受您的,然后我才能删除我的。现在似乎托管在github上。不幸的是,我在任何地方都找不到此示例。其他遇到相同问题的人: