我知道
假设我们必须验证我们必须在@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')*
;