文本文件解析 - 使用 mwe2 (Xtext) 的 Java Bean 实例化 [英] Text File Parsing - Java Bean Instantiation with mwe2 (Xtext)

查看:41
本文介绍了文本文件解析 - 使用 mwe2 (Xtext) 的 Java Bean 实例化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有文本文件要解析(即转换为 Java Bean 实例),

I have text files to be parsed (i.e., convert to Java Bean Instances),

形成了所需的 XText 语法.

Formed the required XText grammar.

我的 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 '!' ;

能够生成Greeting和Model Java Bean类,通过运行Generate XText Artifacts"下面给出生成的Bean类

Able to generate the Greeting and Model Java Bean Classes, By running " Generate XText Artifacts " Generated Bean classes are given below

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);

}

Model.java

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();
}

GenerateDomainmodel.mwe2 生成.

能够使用.genmodel生成资源,如下面的主要(部分)

Able to generate Resource using the .genmodel, as given in the below Main (Partial) class

package org.eclipse.xtext.example;

import java.io.File;
import java.util.List;
import java.util.Map;

import javax.tools.Diagnostic;

import org.eclipse.emf.codegen.ecore.genmodel.GenModel;
import org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage;
import org.eclipse.emf.codegen.ecore.genmodel.GenPackage;
import org.eclipse.emf.codegen.ecore.genmodel.impl.GenModelImpl;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.util.Diagnostician;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.xmi.impl.EcoreResourceFactoryImpl;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
import org.eclipse.emf.ecore.xmi.impl.XMLResourceFactoryImpl;
import org.eclipse.emf.mwe2.language.mwe2.Mwe2Package;
import org.eclipse.emf.mwe2.runtime.workflow.IWorkflow;
import org.eclipse.xtext.AbstractElement;
import org.eclipse.xtext.example.domainmodel.DomainmodelFactory;
import org.eclipse.xtext.example.domainmodel.Greeting;
import org.eclipse.xtext.example.domainmodel.Model;
import org.eclipse.xtext.example.domainmodel.impl.DomainmodelFactoryImpl;
import org.eclipse.xtext.example.domainmodel.impl.DomainmodelPackageImpl;
import org.eclipse.xtext.example.domainmodel.impl.GreetingImpl;

public class Main {

    public static void main(String args[]){

        new DomainmodelStandaloneSetup().createInjectorAndDoEMFRegistration();
        ResourceSet rs = new ResourceSetImpl();
        rs.getResourceFactoryRegistry().getExtensionToFactoryMap().put("genmodel", new XMIResourceFactoryImpl());

        EPackage.Registry.INSTANCE.put(GenModelPackage.eNS_URI, GenModelPackage.eINSTANCE);

        File f = new File("/data/TASKS/4. 2016-2017_PS1/XTEXT/ECLIPSE WORKSPACE 1/org.eclipse.xtext.example.domainmodel/model/generated/Domainmodel.genmodel");
        System.out.println(f.canRead());
        Resource resource = rs.getResource(URI.createURI(f.toURI().toString()), true);
    }
}

完成所有这些后,如何使用下面的方法生成 Greeting 类实例文本输入文件.

Having done all this, How to generate the Greeting class instances using the below text input file.

Hello Ramasamy !
Hello Govinda Govinda !
Hello Kuppusamy !
Hello Karuppusamy !

我需要模型实例,其中包含 4 个具有以下值作为名称的问候实例.

I am in need of Model Instance, which contains 4 No. of Greeting Instances with the following values as a name.

  1. 问候实例 1 -> 名字(Ramasamy")
  2. 问候实例 1 -> 姓名(Govinda Govinda")
  3. 问候实例 1 -> 名称(Kuppusamy")
  4. 问候实例1 -> 姓名("Karuppusamy ")

我的主程序必须使用上述文本输入文件生成 Greeting 实例,有人可以帮我解决这个问题

My Main program has to generate the Greeting instances using the above text input file, Can somebody help me out on this

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

Or is there any other way to achieve?

推荐答案

这里是这样一个主要的示例

Here is a sample for such a main

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());
        }
    }

}

更新您的代码,它看起来像

updated to your code it would look like

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());
        }
    }

}

这篇关于文本文件解析 - 使用 mwe2 (Xtext) 的 Java Bean 实例化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆