Я разрабатывал DSL как плагин Eclipse, используя Xtext, и до сих пор я был в состоянии достичь точки, когда приложение eclipse во время выполнения предоставляет список предложений при нажатии Ctrl + пробел.Тем не менее, предложения отображаются только для первой строки файла.Впоследствии, независимо от того, сколько раз я нажал 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 '----------' ;
Может кто-нибудь помочь мне с пониманиемпочему упомянутая проблема возникает с первым кодом, а не со вторым?
Спасибо!