文本文件解析-使用mwe2(Xtext)进行Javabean实例化
我有要解析的文本文件(即转换为JavaBean实例) 形成所需的XText语法 我的XText语法:文本文件解析-使用mwe2(Xtext)进行Javabean实例化,java,parsing,xtext,mwe,Java,Parsing,Xtext,Mwe,我有要解析的文本文件(即转换为JavaBean实例) 形成所需的XText语法 我的XText语法: grammar org.eclipse.xtext.example.Domainmodel with org.eclipse.xtext.common.Terminals generate domainmodel "http://www.eclipse.org/xtext/example/Domainmodel" Model: greetings+=Greeting*; Greet
grammar org.eclipse.xtext.example.Domainmodel with org.eclipse.xtext.common.Terminals
generate domainmodel "http://www.eclipse.org/xtext/example/Domainmodel"
Model:
greetings+=Greeting*;
Greeting:
'Hello' name =ID '!' ;
能够通过运行生成XText工件来生成问候语和模型javabean类生成的Bean类如下所示
Greeting.java
package org.eclipse.xtext.example.domainmodel;
import org.eclipse.emf.ecore.EObject;
public interface Greeting extends EObject
{
String getName();
void setName(String value);
}
package org.eclipse.xtext.example.domainmodel;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
public interface Model extends EObject
{
EList<Greeting> getGreetings();
}
Model.java
package org.eclipse.xtext.example.domainmodel;
import org.eclipse.emf.ecore.EObject;
public interface Greeting extends EObject
{
String getName();
void setName(String value);
}
package org.eclipse.xtext.example.domainmodel;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
public interface Model extends EObject
{
EList<Greeting> getGreetings();
}
完成所有这些之后,如何使用下面的
文本输入文件
Hello Ramasamy !
Hello Govinda Govinda !
Hello Kuppusamy !
Hello Karuppusamy !
我需要模型实例,它包含4个问候语实例,名称为以下值
或者还有其他方法可以实现吗?这是一个这样的主系统的示例
import java.io.IOException;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.xtext.example.mydsl.myDsl.Greeting;
import org.xtext.example.mydsl.myDsl.Model;
import com.google.inject.Injector;
public class Main {
public static void main(String[] args) throws IOException {
Injector i = new MyDslStandaloneSetup().createInjectorAndDoEMFRegistration();
ResourceSet rs = i.getInstance(ResourceSet.class);
Resource r = rs.getResource(URI.createFileURI("./test.mydsl"), true);
r.load(null);
Model m = (Model) r.getContents().get(0);
for (Greeting g : m.getGreetings()) {
System.out.println(g.getName());
}
}
}
更新到您的代码,看起来像
import java.io.IOException;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.xtext.example.DomainmodelStandaloneSetup;
import org.eclipse.xtext.example.domainmodel.Greeting;
import org.eclipse.xtext.example.domainmodel.Model;
import com.google.inject.Injector;
public class Main {
public static void main(String[] args) throws IOException {
Injector i = new DomainmodelStandaloneSetup().createInjectorAndDoEMFRegistration();
ResourceSet rs = i.getInstance(ResourceSet.class);
Resource r = rs.getResource(URI.createFileURI("./src/mydsl.dmodel"), true);
r.load(null);
Model m = (Model) r.getContents().get(0);
for (Greeting g : m.getGreetings()) {
System.out.println(g.getNamee());
}
}
}
您好,谢谢您的回答,在线程“main”中获取模型实例异常的同时获取以下异常java.lang.ClassCastException:org.eclipse.emf.codegen.ecore.genmodel.impl.genmodelinpl不能转换为org.eclipse.xtext.example.domainmodel.Model,位于org.eclipse.xtext.example.MainStack001.main(MainStack001.java:75)你能帮忙吗?不,我需要更多上下文/一个可复制的例子,你能在我的问题中引用main方法吗,从那里我创建了资源实例,并使用下面的语句r.load(null);Model m=(Model)r.getContents().get(0);当从r获取模型实例时,在这个例子中为(Greeting g:m.getGreetings()){System.out.println(g.getName());}设置一个异常