我用Xtext写过:
grammar org.xtext.example.dsl.Dsl with org.eclipse.xtext.common.Terminals
generate dsl "http://www.xtext.org/example/dsl/Dsl"
Dsl :
(elements += Type)*
;
Type:
System
;
System:
'The system' name = ID 'consists of the following:
;现在,我运行编辑器并输入系统名称。如何访问Eclipse文件中的系统名称?
发布于 2014-08-25 17:56:49
这就是解决方案。
在org.example.somthing.generator包的src文件夹中编写以下代码,类为Something.xtend (.xtend)
这是用于代码生成的,它是由xtext生成的。您将发现doGenerate(资源资源,IFileSystemAccess fsa)方法在该方法中编写以下代码。
类DomainmodelGenerator实现了IGenerator { @Inject extension IQualifiedNameProvider
覆盖无效doGenerate(资源资源,IFileSystemAccess fsa) { for(e: resource.allContents.toIterable.filter(DSL)) {
fsa.generateFile("abcd.txt",e.compile) }
定义编译(DSL% d)‘’«d.System.name»‘
}
现在您必须编写主类来调用上面类的方法。
这是代码。
公共类Main {
@Inject
private Provider<ResourceSet> resourceSetProvider;
@Inject
private IResourceValidator validator;
@Inject
private IGenerator generator;
@Inject
private JavaIoFileSystemAccess fileAccess;
public static void main(String[] args) {
Injector injector = new DomainmodelStandaloneSetupGenerated()
.createInjectorAndDoEMFRegistration();
Main main = injector.getInstance(Main.class);
main.runGenerator("sample.dmodel");
}
protected void runGenerator(String string) {
// load the resource
ResourceSet set = resourceSetProvider.get();
Resource resource = set.getResource(URI.createURI(string), true);
List<Issue> list = validator.validate(resource, CheckMode.ALL,
CancelIndicator.NullImpl);
if (!list.isEmpty()) {
for (Issue issue : list) {
System.err.println(issue);
}
return;
}
// configure and start the generator
fileAccess.setOutputPath("output/");
generator.doGenerate(resource, fileAccess);
System.out.println("Code generation finished.");
}}
https://stackoverflow.com/questions/25403744
复制相似问题