代码之家  ›  专栏  ›  技术社区  ›  user281874

检查输入的文本在Xtext中是否有效

  •  2
  • user281874  · 技术社区  · 9 年前

    假设我们有这样的语法。

    Model:
        greeting+=Greeting*;
    
    Greeting:
        'Hello' name=ID '!';
    

    我想检查在名称中写入的文本是否为有效文本。 所有有效单词都保存在数组中。 此外,数组中应填充给定文件中的单词。

    因此,是否可以在运行时检查这一点,也可以使用这个词作为建议。

    谢谢

    1 回复  |  直到 9 年前
        1
  •  1
  •   Raven Bill Karwin    9 年前

    为此,您可以使用验证器。
    可以找到一个关于它的简单视频教程 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)
        }
    }
    

    如果DSL未命名为Greetings,则可能需要替换“GreetingsPack”。
    传递给错误方法的静态字符串用于识别错误。当你想要实现快速修复时,这一点就变得很重要了,这是你所要求的第二件事,因为它们为程序员提供了一些解决这个问题的方法。
    因为我自己没有实施快速修复的经验,我可以给你 this 作为参考。