如何在Xtext中实现命令行变量

时间:2014-09-10 17:29:35

标签: parsing xtext

我希望我的域特定语言(DSL)接受命令行参数作为bash脚本中的变量。例如:用户可能会发出命令runMyDSL myDslFile.dsl -args 10 15runMyDSL myDslFile.dsl -nvargs arg1=10 arg2=15。我想将这些值捕获到变量$ 1,$ 2为第一个命令或$ arg1,$ arg2为第二个命令。然后可以将这些变量视为我的DSL中的任何其他只读变量:

val someVariable = $1

由于我是xtext / parser字段的新手,我正在寻找人们为处理这种情况而遵循的最佳做法。为简单起见,我们假设,我只处理添加的简化DSL(基于http://blog.efftinge.de/2010/08/parsing-expressions-with-xtext.html中描述的表达式语言):

Expression : Variable '+' Variable;
Variable: ('val' ID '=' INT) | CommandLineVariable;
CommandLineVariable: ??;

1 个答案:

答案 0 :(得分:0)

我的第一个想法是:

1。)解析DSL文件并访问AST,将refence存储在相应EClass的任何本地定义变量中。

2。)使用'MyDslFactory'类创建一个新的'Variable'实例,设置一个值,由命令行给出并放在AST的某个地方。

为此,您应该在“变量”分析器规则中定义属性名称:

Variable: 'val' name=ID '=' value=INT;

'变量'创建看起来像这样(或多或少):

Variable newVar = MyDslFactory.eINSTANCE.createVariable();
newVar.setName(args[2].split("=")[0]);
newVar.setValue(new Integer(args[2].split("=")[1]));

然后你将它放入AST并使用修改后的AST,你可以创建一个临时的DSL文件,然后像以前一样处理,或直接处理AST。