Java 验证语法文件生成的xtext编辑器内容

Java 验证语法文件生成的xtext编辑器内容,java,eclipse,dsl,xtext,xtend,Java,Eclipse,Dsl,Xtext,Xtend,这我知道 假设我们必须验证,我们必须在“.xtend”中编写@check方法,从模型中获取数据,然后我们才能验证 但是,我们从语法中打印出来的内容,我们如何验证呢 考虑下面的语法 IniDCommand: {IniDCommand} '@D'(value=ANSS1TERM)? ;IniDCommand: {IniDCommand} '@D'(value=ANSS1TERM)? ; 在上面的语法中,我可以验证XTE中的该部分,并且该数据在模型中可用。但是如何

这我知道

假设我们必须验证,我们必须在
“.xtend”
中编写
@check
方法,从模型中获取数据,然后我们才能验证

但是,我们从语法中打印出来的内容,我们如何验证呢

考虑下面的语法

IniDCommand: 
    {IniDCommand}
    '@D'(value=ANSS1TERM)?
;IniDCommand: 
    {IniDCommand}
    '@D'(value=ANSS1TERM)?
;
在上面的语法中,我可以验证XTE中的该部分,并且该数据在模型中可用。但是如何验证
'@D'
这个数据在我们从语法打印的模型中是不可用的

如何读取或验证xtend中的内容,这些内容是从 语法(.xtext)文件

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

考虑下面的例子

IniC0_61: 
    {IniC0_61}
    '@C0,61,'
    ;
在编辑器中,我可以看到这样的情况

@C0,61
现在有人在编辑器中键入或更改上面的行,如下所示

@@C0,61
在上面一行中,用户添加了额外的“@”rest,我正在从语法打印。 这会抛出一个错误,说“@@”是不允许的

这就是我的语法部分(.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')*
;
语法com.herzog.pmide.RoutingLineINI和org.eclipse.xtext.common.Terminals 导入“平台:/resource/com.herzog.pmide.routingline.xtext.model/model/pmrouting.ecore” 进口”http://www.eclipse.org/emf/2002/Ecore“作为ecore InRoutingLine项目: {InRoutingLineProject} (iniRoutingConfig=IniRoutingConfiguration)? ; InRouting配置: {InRoutingConfiguration} (InIroutingSectionConfig=IniRoutingLogicSection) ; InRoutingLogic部分: {InRoutingLogicSection} “[路由]”(“\r\n”)* (routingLines+=InRoutingLine)*(“\r\n”)* ; 终端α:('a'..'z'|'a'..'z'); 端子编号:('0'..'9')+; 端子符号:('.'.'.'.'.'.'('.'.')'.''.''.'''.''.'''.''.'''.''.'''.'.'.''.'.''.''.''.''.''.''.'.'.''.'.''.''.''.''.''.'''.'.''.'.'''.''.''.''.'''.''.''.''.''.'''.'.'.'''.''''.'''.'''''.''''; 端子符号1:(“[”|“]”)*; 端子符号2:(“/”|“;”)*; 终端ANS:(ALPHA | NUM | SYMBOL)*SYMBOL2; 终端SL_注释:'/-'!('\n'|'\r')*('\r'?'\n')?; 终端ML_注释:'/*'->'*/'; 术语:ANS; ANSS1术语:(ANS | SYMBOL1)+; GRPCOMMENT街端:SYMBOL2(============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================; GRP建议: (GRPCOMMENT\u STR\u END)(“\r\n”)* SYMBOL2(ANSS1TERM)(“\r\n”)* (GRPCOMMENT\u STR\u END)(“\r\n”)* ; IniDCommand: {IniDCommand} “@D”(value=ANSS1TERM)? ; 行注释: //(LINECOMMENT\u STR\u END)(“\r\n”)* //(ANSS1TERM | LINECOMMENT)(“\r\n”)* //(LINECOMMENT_STR_END)?('\r\n')*; (“/*”(“\r\n”)* (ANSS1TERM)(“\r\n”)* (LINECOMMENT)?(“\r\n”)* “*/”?(“\r\n')*)| GENCOMENT) ; GENCOMENT: SYMBOL2(ANSS1TERM)(“\r\n”)* (紧急通知)? ; INI命令: (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)“=”(命令+=INICOMAND)*(“\r\n”)* ;
我不明白这个问题。你能重新措辞吗?我添加了额外的示例,以便更清楚一些。我仍然不明白。这(语法错误)将在不执行任何检查的情况下给出一个错误。我没有得到那个错误。这就是我想要检查的原因。请给出一个完整的最小语法和显示问题的示例模型