grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals import "eclipse-org-site/xtext/common/JavaVMTypes" as jvmTypes generate myDsl "xtext-org-site/example/mydsl/MyDsl" Model: (greetings+=Greeting | imports+=Import | goodbyes+=Goodbye)*; Greeting: "Hello" name=ID; Import: "import" importURI=STRING; Goodbye: "Bye" ref=[Greeting] ;
public class MyDslGenerator implements IGenerator { @Override public void doGenerate(Resource resource, IFileSystemAccess fsa) { StringBuilder output = new StringBuilder(); Iterator<?> it = resource.getAllContents(); while (it.hasNext()) { Object o = it.next(); if (o instanceof Greeting) { output.append("Hello " + ((Greeting) o).getName() + "\n"); } else if (o instanceof Goodbye) { output.append("Goodbye " + ((Goodbye) o).getRef().getName() + "\n"); } } fsa.generateFile(resource.getURI().lastSegment() + ".output", output); } }
import "test2/test2.mydsl" Hello aek Bye aek Bye eak
protected void runGenerator(String string) { ResourceSet set = resourceSetProvider.get(); set.getResource(URI.createURI("src/test2/test2.mydsl"), true); Resource resource = set.getResource(URI.createURI(string), true); for (Resource r : set.getResources()) System.out.println("loaded " + r.getURI()); // validate the resource List<Issue> list = validator.validate(resource, CheckMode.ALL, CancelIndicator.NullImpl); if (!list.isEmpty()) { for (Issue issue : list) { System.err.println(issue); } System.exit(-1); } // configure and start the generator fileAccess.setOutputPath("src-gen/"); generator.doGenerate(resource, fileAccess); System.out.println("Code generation finished"); }
loaded src/test2/test2.mydsl loaded src/test3.mydsl ERROR:Couldn't resolve reference to Greeting 'eak'. (src/test3.mydsl line : 6)