2017-01-05 5 views
1

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

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

  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 работает и собственный комментарий не работает.

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

+0

Так же, как примечание стороны: ваша StartComment есть/** не/*, что означает, что вы соответствие с "/** ... */" – Har

ответ

0

вы можете переопределить ML_COMMENT к чему-то "другое"

например

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: .; 
+0

Спасибо за ваш ответ. – user7377306

+0

Я попытался добавить в код следующее. терминал ML_COMMENT: '%' -> '%'; Тогда собственный комментарий работает. Но я хочу добавить как «собственный комментарий», так и «ML_COMMENT». , например: /** * @ вар var1 * @ свойство property1 * @ недвижимость свойство2 */ /* множественный комментарий может ничем */ /* * множественный комментарий */ – user7377306

+0

Невозможно, чтобы вы справились с этим в своем правиле –

Смежные вопросы