2016-11-01 5 views
0

В моем DSL, я хочу, чтобы иметь код, который выглядит следующим образом:XText: Ссылка класс Java от MyDsl

SomeType varName; 

Где SomeType это класс Java.

Позже, если позволяет говорить SomeType это перечисление Java-класс, а кто-то пишет

varName=SOME_VALUE 

Я хочу сделать проверку, чтобы увидеть, если SomeType.java на самом деле имеет SOME_VALUE как значение в его перечислении. Я видел этот учебник https://eclipse.org/Xtext/documentation/305_xbase.html

, но я не уверен, что это то, что мне нужно (мне нужно импортировать .mydsl файлы, а не только JVM). Любая помощь будет оценена по достоинству. Спасибо.

+0

хорошо этот вопрос довольно неспецифичен. как насчет просто экспериментов с xbase? –

ответ

1

Если вы хотите ссылки на типы Java, используйте org.eclipse.xtext.xbase.Xtype как суперграмматику. Тогда вы можете написать правило, подобное

VariableDeclaration: 
    type=JvmTypeReference name=ValidID ';'; 

, чтобы выразить свой образец кода.

Если вы хотите выразить назначение, я предлагаю использовать org.eclipse.xtext.xbase.Xbase как суперграмматику (которая наследуется от Xtype) и использовать правило XExpression везде, где вы хотите ссылаться на элементы из Java, например.

VariableAssignment: 
    variable=[VariableDeclaration|ValidId] '=' expression=XExpression; 

Чтобы сделать вещи проще, вы можете также использовать XExpression для объявления переменных (XVariableDeclaration специальная XExpression) и для выполнения заданий (XAssignment еще один специальный XExpression). Это позволило бы писать такие вещи, как

{ 
    var SomeType varName 
    varName = SomeType.SOME_VALUE 
} 

с одним вызовом XBlockExpression (композитное выражением в фигурных скобках):

MyFunkyRule: 
    ... 
    expressionBlock=XBlockExpression 
    ... 
+0

Спасибо, Миро! –