我希望我的域特定语言(DSL)接受命令行参数作为bash脚本中的变量。例如:用户可能会发出命令runMyDSL myDslFile.dsl -args 10 15
或runMyDSL 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: ??;
答案 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。