在Xtext中更改多行注释字符

时间:2013-06-29 03:40:30

标签: eclipse dsl xtext

我想要一个允许我以这种方式编写MIME媒体类型的Xtext语法:

mediaType application/atom+xml 
specURL "http://www.rfc-editor.org/rfc/rfc4287.txt",

这不是问题,但以下是:

mediaType application/* 
specURL "http://www.iana.org/assignments/media-types/application",

您可以通过定义多行注释的/*字符来猜测前方的麻烦。它的终端在Xtext提供的默认终端中定义,更具体地说,在ML_COMMENT终端中定义:

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

我通过将默认终端复制到我自己的新终端来定制它,其中ML_COMMENT终端以这种方式定义:

terminal ML_COMMENT : '"""' -> '"""';

这产生了一种更多的Python方式来进行多行注释。它在生成的DSL中工作正常。但是,当我尝试为/*定义媒体类型时,application/*字符仍会出现问题,如上所示。我收到不匹配输入'/ *'期待'}'的错误消息(}字符将指定媒体类型列表的结尾)。

更令人不安的是,当我输入一个(假设过时的)*/组合字符时,Xtext编辑器的内容辅助仍会自动填充结束/*多行注释字符。当我覆盖多行评论终端时,我想知道为什么自动完成仍然与较旧的ML_COMMENT定义调情。我是否需要覆盖其他内容?

以下是媒体类型语法的一些片段:

MediaType returns restapi::MediaType:
{restapi::MediaType}
'mediaType' name=MediaTypeQualifier ('specURL' specURL=EString)?;

MediaTypeQualifier:
    MediaTypeFragment ('/' MediaTypeFragment)?(';' MediaTypeFragment'='MediaTypeFragment)*; 

MediaTypeFragment:
    (ID ( ('-'|'+'|'.') ID )* ) | '*'

我在Eclipse 4.2.2中使用Xtext版本2.3.1。有没有人有覆盖多行评论终端的经验?有没有我错过的东西?

1 个答案:

答案 0 :(得分:0)

很难从你提供的语法片段中看出来,但在我看来你的语法中仍然有一个关键词/*