我正在尝试使用xtext为ninja build定义语法。
我无法回答三个棘手的问题。
如何处理缩进。忍者构建文件中的规则可能有多个变量定义,前面的制表符间距(类似于make文件)。当语言具有SL注释时,这会成为问题,忽略空格并通过制表符缩进(python,make,...)
cflags = -g
rule cc
command = gcc $cflags -c $in -o $out
存在一组保留变量。自动完成应该能够引用保留变量和用户定义的变量集。
command = gcc $cflags -c $in -o $out
org.eclipse.xtext.common.Terminals隐藏了WS令牌。 ID令牌由空格分隔。但是在忍者脚本(类似于make文件)中,解析应该使用最长的匹配变量名来完成。
some_var = some_value
command = $some_var.h
任何想法都表示赞赏。感谢。
答案 0 :(得分:1)
查看Xtext 2.8.0版本:https://www.eclipse.org/Xtext/releasenotes.html
Whitespace-Aware Languages
部分声明:
Xtext 2.8支持使用空格指定的语言 结构,例如使用缩进来分隔代码块,如 蟒蛇。这是通过语法中定义的合成标记完成的:
terminal BEGIN: 'synthetic:BEGIN'; terminal END: 'synthetic:END';
这些令牌可以像语法规则中的其他终端一样使用:
WhitespaceAwareBlock: BEGIN ... END;
Eclipse示例中提供的新示例语言Home Automation(文件→新建→示例→Xtext示例)演示了此概念。它允许以下代码:
Rule 'Report error' when Heater.error then var String report do Thread.sleep(500) report = HeaterDiagnostic.readError while (report == null) println(report)
更多详细信息可在文档中找到。