文本文件解析 - Java Bean Instantiation with mwe2 (Xtext)
Text File Parsing - Java Bean Instantiation with mwe2 (Xtext)
我有要解析的文本文件(即转换为 Java Bean 实例),
形成了所需的 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 '!' ;
能够生成 Greeting 和模型 Java Bean 类,通过 运行 " Generate XText Artifacts " Generated Bean classes 如下
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 生成资源,如下所示 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 class 实例
文本输入文件。
Hello Ramasamy !
Hello Govinda Govinda !
Hello Kuppusamy !
Hello Karuppusamy !
我需要模型实例,其中包含 4 个问候语实例,名称如下。
- 问候实例 1 -> 名称(“Ramasamy”)
- 问候实例 1 -> 姓名(“Govinda Govinda”)
- 问候实例 1 -> 名称(“Kuppusamy”)
- 问候实例 1 -> 名称(“Karuppusamy”)
我的主程序必须使用上面的文本输入文件生成 Greeting 实例,有人可以帮我解决这个问题
或者有什么其他方法可以实现吗?
这是一个这样的主要例子
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());
}
}
}
我有要解析的文本文件(即转换为 Java Bean 实例),
形成了所需的 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 '!' ;
能够生成 Greeting 和模型 Java Bean 类,通过 运行 " Generate XText Artifacts " Generated Bean classes 如下
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 生成资源,如下所示 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 class 实例 文本输入文件。
Hello Ramasamy !
Hello Govinda Govinda !
Hello Kuppusamy !
Hello Karuppusamy !
我需要模型实例,其中包含 4 个问候语实例,名称如下。
- 问候实例 1 -> 名称(“Ramasamy”)
- 问候实例 1 -> 姓名(“Govinda Govinda”)
- 问候实例 1 -> 名称(“Kuppusamy”)
- 问候实例 1 -> 名称(“Karuppusamy”)
我的主程序必须使用上面的文本输入文件生成 Greeting 实例,有人可以帮我解决这个问题
或者有什么其他方法可以实现吗?
这是一个这样的主要例子
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());
}
}
}