1 add rules
Avagyan Ashot edited this page 2017-02-18 20:52:24 +03:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Для добавления новых условий необходимо изменить файлы Rules.h и Rules.cpp.

Необходимо создать класс, унаследовавшись от базового класса Rule. Необходимо переопределить конструктор с параметрами string и size_t, где строка является аргументом получаемым из файла с правилами, а число - номером правила. Также необходимо переопределить метод std::string check(RuleTarget). Этот метод будет заключать в себе логику правила. На вход поступает текущая лексема со всей доступной информацией о ней. На выход необходимо вернуть результат прохождения правила: строка ошибки или пустая строка, в случае успеха.

Рассмотрим пример: Создадим правило проверяющее количество пробелов после лексемы. Для этого в файле Rules.h создаем класс

class RuleSpacesAfter : public Rule {
        std::string spaces_count; 
		size_t rule_num;
public:	
    RuleSpacesAfter(std::string spaces_count, size_t num) : spaces_count(spaces_count), rule_num(num) {};

    std::string check(RuleTarget target); 
};

В файле Rules.cpp определяем функцию check

string RuleSpacesAfter::check(RuleTarget target)
{
	if (to_string(target.lexema.spaces_after()) != spaces_count)
		return "Incorrect spaces count after lexema (" + to_string(target.lexema.spaces_after()) +
		", but expected " + spaces_count + ')';
	else
		return "";
}