1

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

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

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

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

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

4

3 回答 3

2

Xtext 有一个名为 SyntaxErrorMessageProvider 的服务,用于改写解析器错误消息。您必须在解析器级别定义消息(因此不会使用 EMF 模型),但可以获取原始错误消息和上下文,遍历它并提供您自己的错误消息。

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

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

where«YourLanguage«SyntaxErrorMessageProvider是您介绍的类,扩展类SyntaxErrorMessageProvider,您可以在其中实现自定义功能。

于 2013-01-25T23:23:07.473 回答
0

我工作自动验证自定义,我创建公共类 MyDslLanguageSyntaxErrorMessageProvider 扩展 SyntaxErrorMessageProvider { }

我在 MyDslRuntimeModule 中注册它: public Class bindISyntaxErrorMessageProvider() { return MyDslLanguageSyntaxErrorMessageProvider.class;}

但我的问题是哪个包用于此自定义。我使用 org.xtext.example.mydsl.validation 包创建 java 类。我也使用 xtend 类进行此自定义。我在互联网上找不到足够的源:(

于 2013-02-13T14:29:45.700 回答
0

您可以使用 Java 编写此 Custom SyntaxErrorMessageProvider 类,但要绑定它,您可以在 Runtime Module 类中绑定。你也可以使用任何包来声明这个类,但是在你有 Runtime 类的同一个包中声明这个类是有意义的

于 2014-02-21T10:18:34.317 回答