- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将XText与EMF的ATL模型结合起来进行模型转换。我正在读取我的 DSL,将其转储到 EMF 的 XMI 资源中,然后将其放入 ATL api 中:ATL 不会给我任何错误并且运行正确:
Number of instructions executed: 38
无论我做什么,我的 OutModel (palData) 都保持为空 (null)。如果我从这里获取所有文件(hdl.ecore、pal.ecore、hdl.xmi)并将它们放入示例 ATL 项目中,我会得到正确的输出。
那么我需要将任何神奇参数扔到 EMFVM 启动器上吗?
我的触发ATL的代码:
// create stuff
EMFModelFactory emfFactory = new EMFModelFactory();
XMIResourceFactoryImpl xmiFactory = new XMIResourceFactoryImpl();
EMFExtractor extractor = new EMFExtractor();
EMFInjector emfInjector = new EMFInjector();
ResourceSet resourceSet = new ResourceSetImpl();
// load model
EMFReferenceModel hdlMetaModel = (EMFReferenceModel) emfFactory.newReferenceModel();
emfInjector.inject(hdlMetaModel, resourceSet.getResource(URI.createFileURI("org.xtext.hal/model/generated/Hdl.ecore"), true));
EMFModel hdlData = (EMFModel) emfFactory.newModel(hdlMetaModel);
EMFReferenceModel palMetaModel = (EMFReferenceModel) emfFactory.newReferenceModel();
emfInjector.inject(palMetaModel, resourceSet.getResource(URI.createFileURI("org.xtext.hal/model/Pal.ecore"), true));
EMFModel palData = (EMFModel) emfFactory.newModel(palMetaModel);
palData.setIsTarget(true);
// load xtext content, convert to xmi
Resource xmiResource = xmiFactory.createResource(URI.createURI("org.xtext.hal/model/generated/Hdl.xmi"));
xmiResource.getContents().addAll(hdlModel.getContents());
emfInjector.inject(hdlData, xmiResource);
// ATL transformation
InputStream asm = new FileInputStream("org.xtext.hal/model/Pal.asm");
EMFVMLauncher launcher = new EMFVMLauncher();
HashMap<String,Object> options = new HashMap<String,Object>();
options.put("showSummary", "true");
options.put("step", "true");
launcher.initialize(Collections.<String, Object> emptyMap());
launcher.addInModel(hdlData, "IN", "hdl");
launcher.addOutModel(palData, "OUT", "pal");
launcher.launch(ILauncher.DEBUG_MODE, new NullProgressMonitor(), options, asm);
// get output
Resource t_palData = palData.getResource();
t_palData.setURI(URI.createURI("palData.xmi")); // Exception in thread "main" java.lang.NullPointerException
t_palData.save(null);
我在这里 ATL:
-- @path hdl=/org.xtext.hal/model/generated/Hdl.ecore
-- @path pal=/org.xtext.hal/model/Pal.ecore
module HDL2PAL;
create OUT : pal from IN : hdl;
rule Foobar
{
from
s : hdl!Model
to
t : pal!AddressSpace (
name <- s.name
)
}
HDL.ecore(输入元模型):
<?xml version="1.0" encoding="UTF-8"?>
<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="hdl" nsURI="http://www.xtext.org/hal/Hdl" nsPrefix="hdl">
<eClassifiers xsi:type="ecore:EClass" name="Model">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
</ecore:EPackage>
PAL.ecore(输出元模型):
<?xml version="1.0" encoding="UTF-8"?>
<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="pal" nsURI="http://www.xtext.org/hal/Pal" nsPrefix="pal">
<eClassifiers xsi:type="ecore:EClass" name="AddressSpace">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
</ecore:EPackage>
输入的模型数据:
<?xml version="1.0" encoding="ASCII"?>
<hdl:Model xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:hdl="http://www.xtext.org/hal/Hdl" name="bar"/>
ATL 示例项目的输出:
<?xml version="1.0" encoding="ISO-8859-1"?>
<pal:AddressSpace xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:pal="http://www.xtext.org/hal/Pal" name="bar"/>
ATL 汇编器的输出:
main:0 getasm
stack: HDL2PAL : ASMModule
locals: self=HDL2PAL : ASMModule
main:1 push OclParametrizedType
stack: HDL2PAL : ASMModule, 'OclParametrizedType'
locals: self=HDL2PAL : ASMModule
main:2 push #native
stack: HDL2PAL : ASMModule, 'OclParametrizedType', '#native'
locals: self=HDL2PAL : ASMModule
main:3 new
stack: HDL2PAL : ASMModule, <unnamed>(null)
locals: self=HDL2PAL : ASMModule
main:4 dup
stack: HDL2PAL : ASMModule, <unnamed>(null), <unnamed>(null)
locals: self=HDL2PAL : ASMModule
main:5 push Collection
stack: HDL2PAL : ASMModule, <unnamed>(null), <unnamed>(null), 'Collection'
locals: self=HDL2PAL : ASMModule
main:6 pcall J.setName(S):V
locals: self=HDL2PAL : ASMModule Calling <unnamed>(null).setName('Collection')
stack: HDL2PAL : ASMModule, Collection(null)
locals: self=HDL2PAL : ASMModule
main:7 dup
stack: HDL2PAL : ASMModule, Collection(null), Collection(null)
locals: self=HDL2PAL : ASMModule
main:8 push OclSimpleType
stack: HDL2PAL : ASMModule, Collection(null), Collection(null), 'OclSimpleType'
locals: self=HDL2PAL : ASMModule
main:9 push #native
stack: HDL2PAL : ASMModule, Collection(null), Collection(null), 'OclSimpleType', '#native'
locals: self=HDL2PAL : ASMModule
main:10 new
stack: HDL2PAL : ASMModule, Collection(null), Collection(null), <unnamed>
locals: self=HDL2PAL : ASMModule
main:11 dup
stack: HDL2PAL : ASMModule, Collection(null), Collection(null), <unnamed>, <unnamed>
locals: self=HDL2PAL : ASMModule
main:12 push OclAny
stack: HDL2PAL : ASMModule, Collection(null), Collection(null), <unnamed>, <unnamed>, 'OclAny'
locals: self=HDL2PAL : ASMModule
main:13 pcall J.setName(S):V
locals: self=HDL2PAL : ASMModule Calling <unnamed>.setName('OclAny')
stack: HDL2PAL : ASMModule, Collection(null), Collection(null), OclAny
locals: self=HDL2PAL : ASMModule
main:14 pcall J.setElementType(J):V
locals: self=HDL2PAL : ASMModule Calling Collection(null).setElementType(OclAny)
stack: HDL2PAL : ASMModule, Collection(OclAny)
locals: self=HDL2PAL : ASMModule
main:15 set col
stack:
locals: self=HDL2PAL : ASMModule
main:16 getasm
stack: HDL2PAL : ASMModule
locals: self=HDL2PAL : ASMModule
main:17 push TransientLinkSet
stack: HDL2PAL : ASMModule, 'TransientLinkSet'
locals: self=HDL2PAL : ASMModule
main:18 push #native
stack: HDL2PAL : ASMModule, 'TransientLinkSet', '#native'
locals: self=HDL2PAL : ASMModule
main:19 new
stack: HDL2PAL : ASMModule, TransientLinkSet {}
locals: self=HDL2PAL : ASMModule
main:20 set links
stack:
locals: self=HDL2PAL : ASMModule
main:21 getasm
stack: HDL2PAL : ASMModule
locals: self=HDL2PAL : ASMModule
main:22 pcall A.__matcher__():V
locals: self=HDL2PAL : ASMModule Calling HDL2PAL : ASMModule.__matcher__()
__matcher__:0 getasm
stack: HDL2PAL : ASMModule
locals: self=HDL2PAL : ASMModule
__matcher__:1 pcall A.__matchFoobar():V
locals: self=HDL2PAL : ASMModule Calling HDL2PAL : ASMModule.__matchFoobar()
__matchFoobar:0 push Model
stack: 'Model'
locals: self=HDL2PAL : ASMModule
__matchFoobar:1 push hdl
stack: 'Model', 'hdl'
locals: self=HDL2PAL : ASMModule
__matchFoobar:2 findme
stack: hdl!Model
locals: self=HDL2PAL : ASMModule
__matchFoobar:3 push IN
stack: hdl!Model, 'IN'
locals: self=HDL2PAL : ASMModule
__matchFoobar:4 call MMOF!Classifier;.allInstancesFrom(S):QJ
locals: self=HDL2PAL : ASMModule Calling hdl!Model.allInstancesFrom('IN')
stack: OrderedSet {}
locals: self=HDL2PAL : ASMModule
__matchFoobar:5 iterate
stack:
locals:
stack:
locals:
stack:
locals: self=HDL2PAL : ASMModule
main:23 getasm
stack: HDL2PAL : ASMModule
locals: self=HDL2PAL : ASMModule
main:24 pcall A.__exec__():V
locals: self=HDL2PAL : ASMModule Calling HDL2PAL : ASMModule.__exec__()
__exec__:0 getasm
stack: HDL2PAL : ASMModule
locals: self=HDL2PAL : ASMModule
__exec__:1 get links
stack: TransientLinkSet {}
locals: self=HDL2PAL : ASMModule
__exec__:2 push Foobar
stack: TransientLinkSet {}, 'Foobar'
locals: self=HDL2PAL : ASMModule
__exec__:3 call NTransientLinkSet;.getLinksByRule(S):QNTransientLink;
locals: self=HDL2PAL : ASMModule Calling TransientLinkSet {}.getLinksByRule('Foobar')
stack: []
locals: self=HDL2PAL : ASMModule
__exec__:4 iterate
stack:
locals:
stack:
locals:
最佳答案
您将在加载模型后从文件加载 HDL 元模型:
EMFReferenceModel hdlMetaModel = (EMFReferenceModel) emfFactory.newReferenceModel();emfInjector.inject(hdlMetaModel, resourceSet.getResource(URI.createFileURI("org.xtext.hal/model/generated/Hdl.ecore"), true));
现有的“hdlModel”将包含链接到其他 EClass 实例的 EObject,而不是您加载到“hdlMetaModel”中的实例。因此,如果 ATL 尝试确定“hdl!Model”的所有实例,它将找不到任何内容:真实实例引用“hdl!Model”的另一个版本。解决方案是获取 xText 加载的 HDL 元模型的预加载版本。
附注关于 ATL 的大多数支持讨论都在 the ATL forum 上进行。 。您可能想在那里继续讨论。
关于java - ATL 转换 - 空输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22841706/
我正在使用 OUTFILE 命令,但由于权限问题和安全风险,我想将 shell 的输出转储到文件中,但出现了一些错误。我试过的 #This is a simple shell to connect t
我刚刚开始学习 Java,我想克服在尝试为这个“问题”创建 Java 程序时出现的障碍。这是我必须创建一个程序来解决的问题: Tandy 喜欢分发糖果,但只有 n 颗糖果。对于她给第 i 个糖果的人,
你好,我想知道我是否可以得到一些帮助来解决我在 C++ 中打印出 vector 内容的问题 我试图以特定顺序在一个或两个函数调用中输出一个类的所有变量。但是我在遍历 vector 时收到一个奇怪的错误
我正在将 intellij (2019.1.1) 用于 java gradle (5.4.1) 项目,并使用 lombok (1.18.6) 来自动生成代码。 Intellij 将生成的源放在 out
编辑:在与 guest271314 交流后,我意识到问题的措辞(在我的问题正文中)可能具有误导性。我保留了旧版本并更好地改写了新版本 背景: 从远程服务器获取 JSON 时,响应 header 包含一
我的问题可能有点令人困惑。我遇到的问题是我正在使用来自 Java 的 StoredProcedureCall 调用过程,例如: StoredProcedureCall call = new Store
在我使用的一些IDL中,我注意到在方法中标记返回值有2个约定-[in, out]和[out, retval]。 当存在多个返回值时,似乎使用了[in, out],例如: HRESULT MyMetho
当我查看 gar -h 的帮助输出时,它告诉我: [...] gar: supported targets: elf64-x86-64 elf32-i386 a.out-i386-linux [...
我想循环遍历一个列表,并以 HTML 格式打印其中的一部分,以代码格式打印其中的一部分。所以更准确地说:我想产生与这相同的输出 1 is a great number 2 is a great
我有下面的tekton管道,并尝试在Google Cloud上运行。集群角色绑定。集群角色。该服务帐户具有以下权限。。例外。不确定需要为服务帐户设置什么权限。
当尝试从 make 过滤非常长的输出以获取特定警告或错误消息时,第一个想法是这样的: $ make | grep -i 'warning: someone set up us the bomb' 然而
我正在创建一个抽象工具类,该类对另一组外部类(不受我控制)进行操作。外部类在某些接口(interface)点概念上相似,但访问它们相似属性的语法不同。它们还具有不同的语法来应用工具操作的结果。我创建了
这个问题已经有答案了: What do numbers starting with 0 mean in python? (9 个回答) 已关闭 7 年前。 在我的代码中使用按位与运算符 (&) 时,我
我写了这段代码来解析输入文件中的行输入格式:电影 ID 可以有多个条目,所以我们应该计算平均值输出:**没有重复(这是问题所在) import re f = open("ratings2.txt",
我需要处理超过 1000 万个光谱数据集。数据结构如下:大约有 1000 个 .fits(.fits 是某种数据存储格式)文件,每个文件包含大约 600-1000 个光谱,其中每个光谱中有大约 450
我编写了一个简单的 C 程序,它读取一个文件并生成一个包含每个单词及其出现频率的表格。 该程序有效,我已经能够在 Linux 上运行的终端中获得显示的输出,但是,我不确定如何获得生成的显示以生成包含词
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
1.普通的输出: print(str)#str是任意一个字符串,数字··· 2.格式化输出: ?
我无法让 logstash 正常工作。 Basic logstash Example作品。但后来我与 Advanced Pipeline Example 作斗争.也许这也可能是 Elasticsear
这是我想要做的: 我想让用户给我的程序一些声音数据(通过麦克风输入),然后保持 250 毫秒,然后通过扬声器输出。 我已经使用 Java Sound API 做到了这一点。问题是它有点慢。从发出声音到
我是一名优秀的程序员,十分优秀!