Плагин Xtext DSL предоставляет только подсказки ключевых слов для первой строки файла - PullRequest
0 голосов
/ 11 декабря 2018

Я разрабатывал 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 '----------' ;

Может кто-нибудь помочь мне с пониманиемпочему упомянутая проблема возникает с первым кодом, а не со вторым?

Спасибо!

1 Ответ

0 голосов
/ 11 декабря 2018

Ваша вторая грамматика использует в правиле Domainmodel: (elements+=MainElement)* ; количество элементов от нуля до многих, тогда как в вашей первой грамматике отсутствует знак * Domainmodel: (elements+=MainElement);.

Исправление этой единицы к Domainmodel: (elements+=MainElement)*;поможет.

...