2012-05-10 47 views
2

我想用xtext定义ninja build的文法。忍者建立在xText

有三个棘手的问题,我无法回答。

  • 缩进由制表:

如何处理压痕。在忍者构建文件中的规则可能具有多个具有前面的制表符间隔的变量定义(类似于制作文件)。这将成为当语言具有SL评论的问题,忽略的空格和制表符不缩进(蟒蛇,使...)

cflags = -g 
rule cc 
    command = gcc $cflags -c $in -o $out 
  • 交叉引用组预留的变量名称:

存在一组保留变量。自动完成应该能够引用保留和用户定义的一组变量。

command = gcc $cflags -c $in -o $out 
  • 自动填充交叉引用

org.eclipse.xtext.common.Terminals隐藏WS令牌,其不与WS分隔变量名。 ID令牌由空格隔开。但是在忍者脚本中(类似于make文件),解析应该用最长的匹配变量名来完成。

some_var = some_value 
command = $some_var.h 

任何想法表示赞赏。谢谢。

+0

仍然需要此帮助? –

+1

看到这个相关的问题:http://stackoverflow.com/questions/7167834/xtext-grammar-for-language-with-significant-semantic-whitespace –

+0

不积极,但答案会很好。 –

回答

1

检查出的Xtext 2.8.0释放:https://www.eclipse.org/Xtext/releasenotes.html

Whitespace-Aware Languages部的状态:

的Xtext 2.8支持在其中的空白用于指定 结构语言,例如使用缩进来划分代码块,如Python中的 。

terminal BEGIN: 'synthetic:BEGIN'; 
terminal END: 'synthetic:END'; 

这些令牌可在语法规则中使用像其他终端:

WhitespaceAwareBlock: 
    BEGIN 
     ... 
    END; 

新的示例语言首页在Eclipse实例可用自动化(文件这是通过在语法定义合成令牌完成→新建→示例→Xtext示例)演示了这个概念。它允许如下代码:

Rule 'Report error' when Heater.error then 
    var String report 
    do 
     Thread.sleep(500) 
     report = HeaterDiagnostic.readError 
    while (report == null) 
    println(report) 

更多详细信息可在文档中找到。