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”)*
;
我不明白这个问题。你能重新措辞吗?我添加了额外的示例,以便更清楚一些。我仍然不明白。这(语法错误)将在不执行任何检查的情况下给出一个错误。我没有得到那个错误。这就是我想要检查的原因。请给出一个完整的最小语法和显示问题的示例模型