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