2012-06-26 2 views
1

Я пишу простой небольшой DSL для указания ограничений на сообщения и некоторое время пытались внедрить выражения XBase в язык.Как вставлять выражения XBase в Xtext DSL

Грамматика выглядит следующим образом:

grammar org.xtext.businessrules.BusinessRules with org.eclipse.xtext.xbase.Xbase 
//import "http://www.eclipse.org/xtext/xbase/Xbase" as xbase 
import "http://www.eclipse.org/xtext/common/JavaVMTypes" as jvmTypes 
generate businessRules "http://www.xtext.org/businessrules/BusinessRules" 

Start: 
    rules+=Constraint*; 

Constraint: 
    {Constraint} 
    'FOR' 'PAYLOAD' payload=PAYLOAD 'ELEMENT' element=ID 'CONSTRAINED BY' constraint=XExpression; 



PAYLOAD: 
    "SimulationSessionEvents" 
    |"stacons" 
    |"any" 
; 



Range: 
    'above' min=INT ('below' max=INT)? 
    |'below' max=INT ('above' min=INT)? 
; 

При попытке разобрать файл, такие как:

ДЛЯ PAYLOAD SimulationSessionEvents ELEMENT матрицы сдерживаются ...

Я не могу получить его работать для ... = любое выражение арифметики, хотя оно работает для ... = цикла или выражения или даже просто числа. Как только я делаю что-то вроде «-5» или «4-5», это говорит о Couldn't resolve reference to JvmIdentifiableElement '-', хотя Xbase.xtext Grammar выглядит так, будто позволяет эти выражения.

Я не думаю, что у меня отсутствуют какие-либо банки, так как он не жалуется, когда я запускаю рабочий процесс mwe, но только при попытке разобрать входной файл.

Любая помощь будет высоко оценена.

редактировать: buildpath для проекта заключается в следующем:

C:\Program Files\eclipse\plugins\org.eclipse.xtext_2.2.1.v201112130541.jar 
C:\Program Files\eclipse\plugins\org.eclipse.emf.ecore.xmi_2.7.0.v20120127-1122.jar 
C:\Program Files\eclipse\plugins\org.eclipse.emf.ecore_2.7.0.v20120127-1122.jar 
C:\Program Files\eclipse\plugins\org.eclipse.emf.common_2.7.0.v20120127-1122.jar 
C:\Program Files\eclipse\plugins\org.eclipse.xtext.util_2.2.1.v201112130541.jar 
C:\Program Files\eclipse\plugins\com.google.guava_10.0.1.1.jar 
C:\Program Files\eclipse\plugins\com.google.inject_3.0.0.no_aop.jar 
C:\Program Files\eclipse\plugins\javax.inject_1.0.0.v20091030.jar 
C:\Program Files\eclipse\plugins\org.antlr.runtime_3.2.0.v201101311130.jar 
C:\Program Files\eclipse\plugins\org.eclipse.emf.mwe.core_1.2.1.v201112070431.jar 
C:\Program Files\eclipse\plugins\org.apache.commons.cli_1.2.0.v201105210650.jar 
C:\Program Files\eclipse\plugins\org.eclipse.emf.mwe2.runtime_2.2.0.v201112070431.jar 
C:\Program Files\eclipse\plugins\org.eclipse.emf.mwe.utils_1.2.1.v201112070431.jar 
C:\Program Files\eclipse\plugins\org.eclipse.xtext.xbase_2.2.1.v201112130541.jar 
C:\Program Files\eclipse\plugins\org.eclipse.xtext.common.types_2.2.1.v201112130541.jar 
C:\Program Files\eclipse\plugins\org.apache.log4j_1.2.15.v201012070815.jar 
C:\Program Files\eclipse\plugins\org.apache.commons.logging_1.0.4.v201101211617.jar 
C:\Program Files\eclipse\plugins\org.eclipse.xtext.generator_2.2.1.v201112130541.jar 
C:\Program Files\eclipse\plugins\org.eclipse.xtend_1.1.0.v201108020519.jar 
C:\Program Files\eclipse\plugins\com.ibm.icu_4.4.2.v20110823.jar 
C:\Program Files\eclipse\plugins\org.eclipse.xpand_1.1.0.v201108020519.jar 
C:\Program Files\eclipse\plugins\org.eclipse.xtend.typesystem.emf_1.0.1.v201108020519.jar 
C:\Program Files\eclipse\plugins\org.eclipse.emf.codegen.ecore_2.7.0.v20120130-0943.jar 
C:\Program Files\eclipse\plugins\org.eclipse.emf.codegen_2.6.0.v20120130-0943.jar 
C:\Program Files\eclipse\plugins\de.itemis.xtext.antlr_2.0.0.v201108011202.jar 
C:\Program Files\eclipse\plugins\org.antlr.generator_3.2.0.v201108011202.jar 
C:\Program Files\eclipse\plugins\org.eclipse.emf.mwe2.lib_2.2.0.v201112070431.jar 
C:\Program Files\eclipse\plugins\org.eclipse.xtext.xbase.lib_2.2.1.v201112130541.jar 
C:\Program Files\eclipse\plugins\org.eclipse.xtend2.lib_2.2.1.v201112130541.jar 
C:\Program Files\eclipse\plugins\org.eclipse.emf.mwe2.launch_2.2.0.v201112071250.jar 
C:\Program Files\eclipse\plugins\org.eclipse.emf.mwe2.language_2.2.0.v201112071250.jar 

ответ

0

Проблема устранена, вам нужно включить баннер xbase.lib в путь сборки проекта, который фактически объявляет модели вашего DSL.

+0

«Проект, который фактически объявляет модели вашего DSL» означает проект, который использует вас DSL? Итак, проект с файлами * .mydsl? – alopix

+0

@alopix Точно –

1

Вы должны поместить библиотеку Xtend на пути к классам проекта, который содержит файл DSL.

Выберите «Путь сборки» в контекстном меню и выберите «Добавить библиотеки». Выберите библиотеку Xtend, и она будет работать для вас.

+0

Эй, Себастьян, я редактировал вопрос, чтобы включить все библиотеки в путь построения проекта Xtext, похоже, что Xtend один есть –

+0

. Также по DSL-файлу я предполагаю, что вы имеете в виду файл .xtext, в отличие от файлов в котором у меня действительно есть модели моего DSL (*. brules)? Итак, вы имеете в виду папку проекта Xtext –

+0

. Себастьян благодарит за вашу помощь. Оказывается, он нуждается в банке xbase.lib на пути сборки, см. Мой ответ ниже –

Смежные вопросы