2015-08-13 2 views
1

позволяет сказать, что у нас есть какая-то грамматика.Убедитесь, что введенный текст действителен в Xtext

Model: 
    greeting+=Greeting*; 

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

Я хотел бы проверить, является ли текст, набранный в тексте по имени, действительным текстом. Все допустимые слова сохраняются в массиве. Также массив должен быть заполнен словами из заданного файла.

Так можно проверить это во время выполнения и, возможно, также использовать эти слова в качестве предложений.

С благодарностью

ответ

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 ISN» t по имени Приветствия.
Статическая строка, переданная методу error, служит для идентификации ошибки. Это становится важным, когда вы хотите внедрить Quickfixes, что является второй вещью, о которой вы просили, поскольку они предоставляют возможность дать программисту несколько идей, как реально исправить эту конкретную проблему.
Поскольку у меня нет опыта в реализации быстрых исправлений, я могу просто дать вам this в качестве ссылки.

Смежные вопросы