2

我正在尝试使用 xtext为ninja build定义语法。

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

  • 按制表符缩进:

如何处理缩进。ninja 构建文件中的规则可能有几个变量定义,前面带有制表符间距(类似于 make 文件)。当语言有 SL 注释、忽略空格并通过制表符(python、make、...)进行缩进时,这会成为一个问题

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

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

command = gcc $cflags -c $in -o $out
  • 自动完成未与 WS 分隔的交叉引用变量名称

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

some_var = some_value
command  = $some_var.h

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

4

1 回答 1

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 示例)中提供的新示例语言 Home Automation 演示了这个概念。它允许如下代码:

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

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

于 2015-04-16T11:03:39.687 回答