XText: ML_COMMENT отменяет собственный письменный комментарий

Я новичок в xtext.

Я хочу добавить следующие комментарии.

  1. ML_COMMENT (из org.eclipse.xtext.common.Terminals)
  2. собственный комментарий

    /* @var var1 @property property1 */

Ниже приведен мой код попытки.

grammar org.xtext.example.mydemo.MyDemo with org.eclipse.xtext.common.Terminals

generate myDemo "http://www.xtext.org/example/mydemo/MyDemo"

Model:
   (elements+=DocComments)*
;

DocComments hidden(WS, OTHER):
   start=StartComment name=VarComment? property=PropertyComment* end=EndComment
;

StartComment: '/**';
EndComment:'*/';
VarComment: key='@var' name=ID;
PropertyComment: key='@property' name=ID;

terminal OTHER: '*';

Вроде ML_COMMENT работает, а собственный комментарий не работает.

Как решить эту проблему? Пожалуйста помоги.


person user7377306    schedule 05.01.2017    source источник
comment
В качестве примечания: ваш StartComment /** не /*, что означает, что вы сопоставляетесь с /** ... */   -  person Har    schedule 23.01.2017


Ответы (1)


вы можете переопределить ML_COMMENT на что-то «другое»

e.g.

ML_COMMENT: '%'->'%';

или вы не наследуете от терминалов, а копируете правила (кроме ML_COMMENT)

grammar org.xtext.example.demodsl.DemoDsl hidden(WS, SL_COMMENT)

generate demoDsl "http://www.xtext.org/example/demodsl/DemoDsl"

import "http://www.eclipse.org/emf/2002/Ecore" as ecore
Model:
    greetings+=Greeting*;

Greeting:
    'Hello' name=ID '!';


terminal ID         : '^'?('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
terminal INT returns ecore::EInt: ('0'..'9')+;
terminal STRING : 
            '"' ( '\\' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\' */ | !('\\'|'"') )* '"' |
            "'" ( '\\' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\' */ | !('\\'|"'") )* "'"
        ; 
terminal SL_COMMENT     : '//' !('\n'|'\r')* ('\r'? '\n')?;

terminal WS         : (' '|'\t'|'\r'|'\n')+;

terminal ANY_OTHER: .;
person Christian Dietrich    schedule 05.01.2017
comment
Спасибо за ответ. - person user7377306; 05.01.2017
comment
Я попытался добавить следующее в код. терминал ML_COMMENT: '%'-›'%'; Тогда работает собственный комментарий. Но я хочу добавить как собственный комментарий, так и ML_COMMENT. например: /** @var var1 *@property property1 *@property property2 */ / множественный комментарий может быть любым / / * множественный комментарий */ - person user7377306; 05.01.2017
comment
Это невозможно, вы должны обработать это в своем правиле - person Christian Dietrich; 05.01.2017
comment
Можете ли вы подробнее рассказать о своем прецеденте - person Christian Dietrich; 05.01.2017
comment
Вы можете поиграть с xtextcasts.org/episodes/18-model-optimization ( последний рабочий процесс xtext не поддерживает постпроцессор _> вам нужна ручная метсмодель или неназванная линейка) - person Christian Dietrich; 05.01.2017