eclipse - 是否可以通过Xtext/Xpand中的相同元素名称访问引用或终端?

标签 eclipse grammar modeling xtext xpand

我有一个描述状态机的Xtext语法,并且我一直在使用对先前声明的事件和状态的引用来描述过渡:

Event:
 'event' name=ID
 ;

State:
 'state' name=ID
 ;

Transition:
 event=[Event] '=>' state=[State]
    ;

当我使用MWE生成编辑器时,它将验证引用项的存在。例如写
init => idle

将需要这些:
event init
state idle

出现在代码中的其他位置(顺便说一句,我为每个状态机使用一个文件,因此它必须位于同一文件中)。在我的Xpand代码模板中,我可以将事件和状态作为过渡元素进行访问:
«FOREACH statemachine.transitions.event AS event-» // you get the idea

这真的很好,并且我已经使用了一段时间了。

但是,由于我所有状态机都有许多事件是通用的(initshowhidefinish等),因此,我希望能够引用一种事件,即上面的事件名称,而不必在每个文件中声明该事件。

但是我不能这样做:
Transition:
 event=( [Event] | ('init'|'show'|'hide'|'finish') ) '=>' state=[State]
    ;

因此,我决定定义一个终端EventID,它是上述两个关键字之一:
terminal EventID:
     'init'|'show'|'hide'|'finish'
     ;

但是我也不能这样做:
Transition:
 event=( [Event] | EventID ) '=>' state=[State]
    ;

然后,我尝试将事件组合为规则:
CustomEvent:
    'event' name=ID
    ;

BaseEvent:
    name=EventID
    ;

Event:
    CustomEvent | BaseEvent
    ;

Transition:
    event=[Event] '=>' state=[State]
    ;

这也不起作用。

现在,我决定解决一个变通方法:
Transition:
    ( event=[Event] | baseevent=EventID ) '=>' state=[State]
    ;

这可行,但是我必须更改所有模板以查找事件和基本事件。

我意识到,这是很多文本...所以最后,这是我的问题:

我有什么办法可以为使用相同的元素名称,或者是引用,还是是EventID?

最佳答案

您最初的问题是:您不想在多个文件中重复自己。
我建议另一种解决此问题的方法:
我们不是制作标准文件,而是在其中定义常用状态并使用此处描述的import语句导入这些状态:
http://www.eclipse.org/Xtext/documentation/1_0_1/xtext.html#syntax

关于eclipse - 是否可以通过Xtext/Xpand中的相同元素名称访问引用或终端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4724662/

相关文章:

parsing - 可组合语法

process - 将场景转换为 BPMN 有哪些步骤?

java - Eclipse ant 任务使用自定义 WIX 配置文件 (wxs) 文件代替默认 wxs 文件

java - 测试时无法让 Maven(和 Eclipse)使用测试资源

eclipse - m2eclipse eclipse europa 3.3.2安装错误

Android studio 调试器无法打开选定的 VM 调试端口 (8700)

c# - Microsoft Speech SDK 11 中的语法过多

javascript - 提取 PostgreSQL 语法规则

php - CakePHP 中同一张表上的 HABTM 关系

oop - 有哪些最佳的面向对象设计实践?