1

我想要一个允许我以这种方式编写 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。有没有人有覆盖多行评论终端的经验?有什么我错过的吗?

4

1 回答 1

0

从您提供的语法片段中很难分辨,但在我看来,/*您的语法中仍然有一个关键字。

于 2014-10-02T08:02:01.623 回答