2017-04-13 11 views
0

私はXtextで文法を作っています。ここでplugin.xmlからeclipseアプリケーションを起動し、文法をテストできます。今私は私のDSLの私のコードを起動するための通訳をする必要があります。Xtext文法のための独自のインタプリタを作る

クラスインタプリタでパッケージを作成しましたが、Eclipseエディタで開いたファイルにアクセスする方法はわかりません。 一方、私はインタプリタがエディタ内のファイルを行ごとに読み込んで文章を実行すると思いますが、そうですか?

私の最終的な質問は、Xtext文法のためのインタプリタを実装するためのチュートリアルやよりよい方法を知っていて、すべて一緒に動作することです。私はトータスの例を理解しようとするが、何も理解していない。

ありがとうございました!

答えて

1

これは一般的な回答を与えることは非常に難しい質問です。あなたの通訳が何をし、それがどのようにフィードバックを与えるかによって大きく左右されます。行単位で作業しても、モデルコンテンツを繰り返し処理するのではなく、意味をなさないかもしれません。ユーザーがファイルに入力すると "autoedit"でこれを行うと想像することができます。これはxtextに付属しているあなたの算術の例です。またはエディタでビューを切り替えることができます。つまり、カメの例では(https://github.com/xtext/seven-languages-xtext/blob/c04e8d56e362bfb8d6163f4b001b22ab878686ca/languages/org.xtext.tortoiseshell.lib/src/org/xtext/tortoiseshell/lib/view/TortoiseView.xtend)です。または、コンテキストメニュー(およびショートカット)から右クリックを使用して呼び出すeclipseコマンドを使用することもできます。ここでは、開いているファイルで動作するEclipse Command Handlerを構築する方法を簡単に解説します。あなたはXTEXTリソースにアクセスし、あなたがそれを扱うことができます与えXtextEditor.getDocument()。読み取り専用() を呼び出すためにダウン

public class InterpretCodeHandler extends AbstractHandler implements IHandler { 

    @Override 
    public Object execute(ExecutionEvent event) throws ExecutionException { 

     IEditorPart activeEditor = HandlerUtil.getActiveEditor(event); 
     IFile file = (IFile) activeEditor.getEditorInput().getAdapter(IFile.class); 
     if (file != null) { 
      IProject project = file.getProject(); 



      if (activeEditor instanceof XtextEditor) { 
       ((XtextEditor)activeEditor).getDocument().readOnly(new IUnitOfWork<Boolean, XtextResource>() { 

        @Override 
        public Boolean exec(XtextResource state) 
          throws Exception { 
         // TODO your code here 
         return Boolean.TRUE; 
        } 
       }); 

      } 
     } 
     return null; 
    } 

    @Override 
    public boolean isEnabled() { 
     return true; 
    } 

} 

それ基本的に釘を(https://christiandietrich.wordpress.com/2011/10/15/xtext-calling-the-generator-from-a-context-menu/から撮影)。ここ

及びその登録(S)

<extension point="org.eclipse.ui.menus"> 
    <menuContribution locationURI="popup:#TextEditorContext?after=additions"> 
     <command commandId="org.xtext.example.mydsl.ui.handler.InterpreterCommand" style="push"> 
      <visibleWhen checkEnabled="false"> 
        <reference definitionId="org.xtext.example.mydsl.MyDsl.Editor.opened"></reference> 
      </visibleWhen> 
     </command> 
    </menuContribution> 
</extension> 
<extension point="org.eclipse.ui.handlers"> 
    <handler class="org.xtext.example.mydsl.ui.MyDslExecutableExtensionFactory:org.xtext.example.mydsl.ui.handler.InterpretCodeHandler" commandId="org.xtext.example.mydsl.ui.handler.InterpreterCommand"> 
    </handler> 
</extension> 
<extension point="org.eclipse.ui.commands"> 
     <command name="Interpret Code" id="org.xtext.example.mydsl.ui.handler.InterpreterCommand"> 
     </command> 
</extension> 
関連する問題