文本文件解析-使用mwe2(Xtext)进行Javabean实例化

文本文件解析-使用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

我有要解析的文本文件(即转换为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*;

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个问候语实例,名称为以下值

  • 问候语实例1->name(“Ramasamy”)
  • 问候语实例1->name(“Govinda Govinda”)
  • 问候语实例1->name(“Kuppusamy”)
  • 问候语实例1->name(“卡鲁普萨米”)
  • 我的主程序必须使用上面的文本输入文件生成问候语实例,有人能帮我吗


    或者还有其他方法可以实现吗?

    这是一个这样的主系统的示例

    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());}设置一个异常