Для добавления новых условий необходимо изменить файлы 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 "";
}