我想设计一个小的DSL检查变量的约束。我此刻的语法如下:生成用于评估Xtext中Xbase表达式的类?
Start:
varDeclarations += XVariableDeclaration*
rules+=Constraint*;
Constraint:
{Constraint}
'FOR' 'PAYLOAD' payload=PAYLOAD 'ELEMENT' element=ID 'CONSTRAINED BY' constraint=XExpression;
PAYLOAD:
"SimulationSessionEvents"
|"stacons"
|"any"
;
我要生成一个只包含一个方法,需要输入一个数值,它映射到包含在约束中的唯一变量(这也是一个类的实例只声明变量),并检查约束是否满足。
这些实例将被另一个类使用,它将一个值传递给每个实例,检查它是否满足约束条件。
正如我看到它,我有2种选择:
显式生成用于约束类代码,在这种情况下,我可以只使用
XBaseCompiler
以产生表达式求值的代码。然而,如果有直接在内存对象中创建的方法,我将不得不以某种方式加载这些类,这看起来很不雅观。使用
ModelInferrer
直接在内存中生成可传递给其他类的对象,因此不需要类加载。在这种情况下,我不确定如何生成xbase表达式评估代码。
阅读完所有的XTEXT文档/教程,并用实例玩弄后,我留下了以下问题:
这是在可伸缩性方面的“最佳”的做法(我以后可能想要扩展语法,和/或他生成的类的功能)? 如果我遵循ModelInferrer方法,我会如何处理事情? 有没有其他方法可以做到这一点?
任何帮助,将不胜感激
好吧,听起来不错,但是如何访问生成的类?例如,如果我希望在将解析DSL模型文件时创建的所有实例添加到矢量中,那么我该如何以及在哪里执行此操作?这是我在xtext教程中找不到的东西,因为一旦创建了这些类型可以访问的类型,就不会澄清它。 –
我已经提出了上面的评论一个问题,以便它更清楚我的意思:http://stackoverflow.com/questions/11260216/how-to-use-xtext-inferred-jvm-model-outside-of-xtext-项目 –