[MWE2] [Xtend] mismatched input '<EOF>' expecting RULE_ID [message #557656] |
Wed, 08 September 2010 12:58 |
Thomas Delissen Messages: 11 Registered: September 2010 Location: Eindhoven |
Junior Member |
|
|
I'm not sure if this is the right forum to post my question, because I'm doing a project in which I generate an Ecore model with Xtext, create another Ecore model directly in EMF and creating a M2M mapping from the Xtext ecore model to the EMF model using Xtend.
However, my current issue is related to MWE2 and Xtend which seems to be the area of expertise of the people on this forum.
The thing I am trying to do is the following:
- Reading a file called 'example2.act' which is written in my Xtext grammar format
- Applying a M2M transformation by invoking a transform function in my model2model.ext
- Writing to a file outputfile.xmi
I am getting an error when running my MWE2 workflow which looks as follows:
2 ERROR Mwe2Launcher - Problems running workflow model2model2: Validation problems:
1 error:
1: mismatched input '<EOF>' expecting RULE_ID
java.lang.RuntimeException: Problems running workflow model2model2: Validation problems:
1 error:
1: mismatched input '<EOF>' expecting RULE_ID
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:82)
Now, I think it is either related to the invoke-function in my workflow, or my Xtend file. At first I thought it was an issue with my example2.act file, but I am sure it is correct and I do not get any errors from the Reader function in the workflow (like 'model-slot is empty').
My workflow file looks as follows:
module model2model2
import org.eclipse.emf.mwe.utils.*
var OutputFile = "../outputfile.xmi"
Workflow {
component = org.eclipse.xtext.mwe.Reader {
// lookup all resources on the classpath
// useJavaClassPath = true
// or define search scope explicitly
path = "../"
// this class will be generated by the xtext generator
register = iterative.ActivitydiagramXtextStandaloneSetup {}
load = {
firstOnly = true
name = "example2"
slot = "model"
type = "ActivitydiagramXtext::Model"
}
}
component = org.eclipse.xtend.XtendComponent {
metaModel = org.eclipse.xtend.typesystem.emf.EmfMetaModel {
metaModelPackage = "iterative.activitydiagramXtext.ActivitydiagramXtextPackage"
}
metaModel = org.eclipse.xtend.typesystem.emf.EmfMetaModel {
metaModelPackage = "activitydiagram.ActivitydiagramPackage"
}
invoke = "src/template/model2model::transform(model)"
outputSlot = "transformed_model"
}
component = org.eclipse.emf.mwe.utils.Writer {
modelSlot = "transformed_model"
uri = OutputFile
}
}
And, my (simplified) Xtend template:
import activitydiagramXtext;
import activitydiagram;
import ecore;
create activitydiagram::Model transform(activitydiagramXtext::Model InputModel) :
this.setName(InputModel.name)
->
this.setProcess(new activitydiagram::Process)
// ->
// this.setTasks(null)
;
I hope someone is able to give me some indication on what the issue could be; I'll continue debugging myself, but I'm not sure whether I should focus on my Xtend file, my MWE2 file or something completely different.
Thanks in advance for any advice.
Thomas
Kind regards,
Thomas
|
|
|
Re: [MWE2] [Xtend] mismatched input '<EOF>' expecting RULE_ID [message #557963 is a reply to message #557656] |
Thu, 09 September 2010 15:55 |
|
Hi Thomas,
the error would point me first to the Xtext model file(s). It is expecting more content when finding the end of file.
A little bit strange is the value for 'invoke' of the XtendComponent. Normally you just qualify names relative to the classpath root. Assuming that src/templates is a source folder you could and should omit this. But this has nothing to do with your problem.
Regards,
~Karsten
Need professional support for Xtext, EMF, Eclipse IDE?
Go to: http://devhub.karakun.com
Twitter : @kthoms
Blog : www.karsten-thoms.de
|
|
|
Re: [MWE2] [Xtend] mismatched input '<EOF>' expecting RULE_ID [message #558146 is a reply to message #557963] |
Fri, 10 September 2010 10:47 |
Thomas Delissen Messages: 11 Registered: September 2010 Location: Eindhoven |
Junior Member |
|
|
Solved: I have experimented a bit and I recreated my projects and folders and created a fresh workspace. I thought it had something to do with classpaths, NS uris and dependencies in my Manifest file. As Karsten pointed out with my strange Path-value, this is something that is still confusing me. As a test I've created a file in the old workflow style (MWE), and somehow I've got it working. Maybe I will try to fix the MWE2 file sometime, but for now I will work with the old style.
However, I think the main issue was in the Reader of my original workflow and in my examplefile. The name-attribute of the Model slot of my examplefile was 'example', while the file was called 'example2.act' : It seems to matter that the name-ID of the Model is the same as the filename. My theory right now is that since I did not have this, the reader took a different inputfile, which was empty: example.act . Which explains why it found an EOF instead of a Rule-ID. Maybe.
Anyway, thanks for the advice and for completeness sake I've added my revised MWE file. It might be useful as an example for other people who are trying to do a M2M transformation from Xtext grammar file to XMI file.
<workflow>
<bean class="org.eclipse.emf.mwe.utils.StandaloneSetup" >
<platformUri value=".."/>
</bean>
<component id="read" class="org.eclipse.xtext.mwe.Reader">
<path value="../iter2.Model2Model/inputmodel"/>
<register class="iter2.LanguageStandaloneSetup"/>
<load>
<name value="example"/>
<slot value="model"/>
<type value="Model"/>
<firstOnly value="true"/>
</load>
</component>
<component id="translate" class="org.eclipse.xtend.XtendComponent">
<metaModel id="input" class="org.eclipse.xtend.typesystem.emf.EmfMetaModel">
<metaModelPackage value="iter2.language.LanguagePackage"/>
</metaModel>
<metaModel id="output" class="org.eclipse.xtend.typesystem.emf.EmfMetaModel">
<metaModelPackage value="targetLang.TargetLangPackage"/>
</metaModel>
<invoke value="model2model::transform(model)"/>
<outputSlot value="EcoreModel"/>
</component>
<component class="org.eclipse.xtend.typesystem.emf.XmiWriter">
<modelFile value="src-gen/output.xmi"/>
<inputSlot value="EcoreModel"/>
</component>
</workflow>
Kind regards,
Thomas
|
|
|
Powered by
FUDForum. Page generated in 0.03894 seconds