0

JvmModelInferrer アプローチを使用して、入力ファイルからクラスを生成する単純で小さな DSL を実装しました。通常のJavaプロジェクトのコード内でパーサーとコードジェネレーターを呼び出す方法を見つけようとしています。したがって、Xtext 以外のプロジェクトのメイン クラスのある時点で、ファイルを作成し、それを DSL の Xtext パーサー/codeGenerator に渡すだけで、選択したフォルダーにクラス ファイルが生成されます (私のJavaプロジェクト内)。このケースはドキュメントではカバーされていません。

更新:これまでの私のコードは次のようになります。

    private  static IGenerator generator;

    /**
     * @param args
     */
    public static void main(String[] args) {

        // this line registers the EMF for our DSL
        Injector injector = new HyRuleStandaloneSetup().createInjectorAndDoEMFRegistration();
        ResourceSet rs = new ResourceSetImpl();
        File file = new File(
                "C:/Documents and Settings/chmamat2/runtime-EclipseXtext/hyrule.project/src/hyrule/project/main.hrule");
        Resource resource = rs.getResource(URI.createURI(file.toURI().toString()), true);

        //setup the generator
        generator = injector.getInstance(IGenerator.class);

        //setup the file system access
        final EclipseResourceFileSystemAccess2 fsa = new EclipseResourceFileSystemAccess2();


        generator.doGenerate(resource, fsa);
4

1 に答える 1

2

基本的に、DSL を EMF モデルとして開くことができます。EMF ResourceSet を作成し、次に ResourceSet API を使用してファイルを開き (ファイルまたはファイルを表すプラットフォーム uri を作成することによって)、その内容を開きます。

ただし、これは Xbase を使用しない場合にのみ機能します。Xbase を使用する場合は、Xtext API が提供する Guice インジェクターを使用して ResourceSet をインスタンス化する必要があります。ResourceSet が初期化されると、以前と同じように機能します。

インジェクターを使用するには、StandaloneSetup クラスを使用してインスタンス化します。Eclipse IDE のコードを独自のエディターと一緒に使用する場合は、これを行わないでください。または、Eclipse 拡張機能を Xtext ベースの実行ファクトリーに登録します。この例については、私のXtext Reflective Tree editor projectの登録済みエディターを参照してください。

コード ジェネレーターも呼び出すには、いくつかの方法があります。

  1. Xtext プロジェクトの性質を持つ Eclipse プロジェクトを使用できます。セットアップされている場合は、DSL ファイルを作成/変更するだけで、ビルダーは前述のすべてを魔法のように終了します。もう何もする必要はありません。
  2. コードに IGenerator を注入することもできるので (注入されたクラスがある場合)、元の EMF ベースの Xtext モデルを開いた後にプログラムで呼び出すことができます。
于 2012-07-05T14:03:19.190 に答える