验证由Grammar文件生成的xtext编辑器内容

时间:2017-12-12 11:22:15

标签: java eclipse dsl xtext xtend

我知道

假设我们必须验证我们必须在@check内部编写".xtend"方法从模型获取数据然后我们可以验证。

但是从语法打印的内容怎么能验证那个

考虑遵循语法

IniDCommand: 
    {IniDCommand}
    '@D'(value=ANSS1TERM)?
;IniDCommand: 
    {IniDCommand}
    '@D'(value=ANSS1TERM)?
;

在上面的语法中,我可以在xtend中验证"(value=ANSS1TERM)"这个部分,这个数据在模型中是可用的。但是如何验证'@D'这个数据在Model中是不可用的,我们从语法中打印出来。

  

我们如何阅读或验证我们在Xtext Editor上打印的xtend内的内容    语法(.xtext)文件。

为了更清楚,我将添加以下示例

考虑以下示例

IniC0_61: 
    {IniC0_61}
    '@C0,61,'
    ;
编辑中的

我可以看到这样的

@C0,61

现在有人在编辑器中输入或更改上面的行

@@C0,61
  

在上面的行中,用户添加了额外的“@”休息,我正在从语法打印。   这应该通过说“@@”不允许来引发错误。

这是我的语法部分(.xtext)看起来像

grammar com.herzog.pmide.RoutingLineINI with org.eclipse.xtext.common.Terminals 

import "platform:/resource/com.herzog.pmide.routingline.xtext.model/model/pmrouting.ecore" 
import "http://www.eclipse.org/emf/2002/Ecore" as ecore

IniRoutingLineProject:
    {IniRoutingLineProject}
        (iniRoutingConfig=IniRoutingConfiguration)?
    ;

IniRoutingConfiguration:    
    {IniRoutingConfiguration}
    (iniRoutingSectConfig=IniRoutingLogicSection)

;

IniRoutingLogicSection:
    {IniRoutingLogicSection}
    '[Routing]'('\r\n')*
    (routingLines+=IniRoutingLine)*('\r\n')*
;

terminal ALPHA :('a'..'z'|'A'..'Z');

terminal NUM:('0'..'9')+;

terminal SYMBOL : ('.'|','|'('|')'|'{'|'}'|'<'|'>'|'+'|'-'|'*'|'%'|'!'|'"'|':'|'|'|'?'|'#'|'_'|' '|'=');

terminal SYMBOL1 : ('['|']')*;

terminal SYMBOL2 : ('/'|';')* ;

terminal ANS : (ALPHA|NUM|SYMBOL)* SYMBOL2;

terminal SL_COMMENT : '//-' !('\n'|'\r')* ('\r'? '\n')?;

terminal ML_COMMENT : '//*' -> '*//';

ANSTERM : ANS;

ANSS1TERM : (ANS|SYMBOL1)+;

GRPCOMMENT_STR_END : SYMBOL2("===========================================================================================================================================================================") ;

GRPCOMMENT : 
    (GRPCOMMENT_STR_END)('\r\n')*
    SYMBOL2(ANSS1TERM)('\r\n')*
    (GRPCOMMENT_STR_END)('\r\n')*
;

IniDCommand: 
    {IniDCommand}
    '@D'(value=ANSS1TERM)?
;

LINECOMMENT : 
//  (LINECOMMENT_STR_END)('\r\n')*
//  (ANSS1TERM|LINECOMMENT)('\r\n')*
//  (LINECOMMENT_STR_END)?('\r\n')*;
    (('/*'('\r\n')*
    (ANSS1TERM)('\r\n')*
    (LINECOMMENT)?('\r\n')*
     '*/'?('\r\n')*)|GENCOMMENT)
;

GENCOMMENT : 
    SYMBOL2(ANSS1TERM)('\r\n')*
    (GENCOMMENT)?
;

IniCommand:
    (IniDCommand)
;

IniRoutingLine: 
    (groupComment=GRPCOMMENT)?('\r\n')*
    (comment=LINECOMMENT)?('\r\n')*
    (unitPositionSampleTypeWay=('Warning_Rate='|'Busy_Rate='|'MaxRecursionConcurence='|'WS_Speed='|'ReactivationTime='|'WaitTime_WS_Reuse='|ANSTERM))(commands+=IniCommand)*('\r\n')*
//(unitPositionSampleTypeWay=ANS1TERM)'='(commands+=IniCommand)*('\r\n')*
;

0 个答案:

没有答案