gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:11:48 25 4
gpt4 key购买 nike

我有一个描述状态机的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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com