检查输入的文本在Xtext

时间:2015-08-13 06:29:11

标签: xtext

我们可以说我们有这样的语法。

Model:
    greeting+=Greeting*;

Greeting:
    'Hello' name=ID '!';

我想检查文本中的文字是否是有效文本。 所有有效单词都保存在一个数组中。 此外,数组应填充给定文件中的单词。

所以可以在运行时检查这个,也可以用这个词作为建议。

由于

1 个答案:

答案 0 :(得分:0)

为此,您可以使用验证器 有关它的简单视频教程可以找到here

在您的情况下,验证器中的函数可能如下所示:

public static val INVALID_NAME = "greeting_InvalidName"

@Check
def nameIsValid(Greeting grt) {
    val name = grt.getName() //or just grt.Name
    val validNames = NewArrayList
    //add all valid names to this list

    if (!validNames.contains(name)) {
        val errorMsg = "Name is not valid"
        error(errorMsg, GreetingsPackage.eINSTANCE.Greeting_name, INVALID_NAME)
    }
}

您可能需要更换" GreetingsPackage"如果您的DSL没有被命名为Greetings 传递给error-method的静态String用于识别错误。当你想要实现Quickfixes时,这很重要,这是你要求的第二件事,因为它们可以为程序员提供一些如何实际解决这个特定问题的想法。
因为我没有自己实施快速修正的经验,所以我可以给你this作为参考。