SyntaxErrorMessageProvider

SyntaxErrorMessageProvider

我定义了一个无序的组,它的工作方式与我预期的一样。我唯一要更改的是错误msg,该错误在尚未建模无序组的元素时出现。有没有简单的方法来解决这个问题?我已经尝试过自定义检查,但是出现了意外的行为。

遵循我对无序组和错误msg的规则:

Element:
    (name=ConfigurationName) &
    (description=Description)? &
    (tool=Tool) &
    (model=Model) &
    (interfaces=Interfaces)? &
    (paramaters=Parameters)? &
    (paramfile=ParamFile)?
;

rule ruleElement failed predicate: {getUnorderedGroupHelper().canLeave(grammarAccess.getElementAccess().getUnorderedGroup())}?

我想将此错误消息更改为类似的内容:“配置中需要以下元素:...。”

最佳答案

Xtext具有一项称为SyntaxErrorMessageProvider的服务,该服务用于重新编写解析器错误消息。您必须在解析器级别定义消息(因此将没有EMF模型可以使用),但是可以获取原始错误消息和上下文,遍历它们并提供您自己的错误消息。

要注册它,请打开«YourLanguage»RuntimeModule类,并添加以下方法:

public Class<? extends ISyntaxErrorMessageProvider> bindISyntaxErrorMessageProvider() {
    return «YourLanguage»SyntaxErrorMessageProvider.class;
}

其中«YourLanguage«SyntaxErrorMessageProvider是您引入的类,扩展了SyntaxErrorMessageProvider类,您可以在其中实现自定义功能。

09-06 19:07