我一直在使用Xtext将DSL作为eclipse插件开发,到目前为止,我可以达到运行时Eclipse应用程序在按Ctrl + space时提供建议列表的程度。但是,建议仅显示在文件的第一行。此后,无论我按Ctrl +空格多少次,都不会出现建议。以下是我的Xtext语法:
Domainmodel:
(elements+=MainElement)
;
MainElement:
ProjectionName | ProjectionComponent | LayerSpecification |
Description | Capability | Category | ServiceGroup |
IncludeFragment | {MainElement} Override | {MainElement} Overtake
;
ProjectionName:
'projection' modelName=ID ';'
;
ProjectionComponent:
'component' componentName=ID ';'
;
LayerSpecification:
'layer' layerName=ID ';'
;
Description:
'description' string=STRING ';'
;
Capability:
'capability' type=('Online' | 'Offline') ';'
;
Category:
'category' type=('Integration' | 'ExternalB2B' | 'Users') ';'
;
ServiceGroup:
'servicegroup' type=('Mobility' | 'Reporting') ';'
;
IncludeFragment:
('@Dynamic_Component_Dependency' componentName=ID) 'include' 'fragment' fragmentToIncludeName=ID ';'
;
Override:
'@Override'
;
Overtake:
'@Overtake'
;
我还尝试了另一个更简单的示例(如下所述),它没有此问题:-
Domainmodel: (elements+=MainElement)* ;
MainElement: FileName | Type ;
Type: Component | Layer | Description | Category | Entity | Comment ;
FileName: 'projection' name=ID ';' ;
Component: 'component' name=ID ';' ;
Layer: 'layer' name=ID ';' ;
Description: 'description' string=STRING ';' ;
List: Users | Developers ;
Users: 'Users' ;
Developers: 'Developers' ;
Category: 'category' lists=List ';' ;
Entity: 'entityset' name=ID 'for' name2=ID ';' ;
Comment: '----------' comment=ID '----------' ;
有人可以帮助我理解为什么提到的问题发生在第一个代码而不是第二个代码上吗?
谢谢!
答案 0 :(得分:1)
您的第二个语法在规则Domainmodel: (elements+=MainElement)* ;
中使用从零到多的基数,而您的第一个语法似乎缺少*
符号Domainmodel: (elements+=MainElement);
。
将其中一个固定为Domainmodel: (elements+=MainElement)*;
会有所帮助。