void addNewRule(vector<SPExpression> symbolAndExpr) { auto oldCount = countRules(); auto newRule = makeExpression(ruleSymbol, std::move(symbolAndExpr)); assert(symbolAndExpr.empty()); auto ruleset = getAndDetachEachSubexpressionAndDeallocate(std::move(rules)); ruleset.push_back(std::move(newRule)); rules = makeExpression(rulesSymbol, std::move(ruleset)); assert(ruleset.empty()); assert(countRules() == oldCount + 1); store(); }
void init() { assert(!rules); if (!(rules = fileDepersist(rulesFilename))) { rules = makeExpression(rulesSymbol); assert(!countRules()); } validateRules(); }
Rule* processRuleFile(Arguments *args) { int rules_number; Rule *rules; rules_number = countRules(args->input_file); rules = malloc(sizeof(Rule)*rules_number); initPass(args->input_file, rules, rules_number); finalPass(args->input_file, rules, rules_number); fclose(args->input_file); return rules; }
void validateRules() { assert(countRules() >= 0); for (const auto& rule : rules->subexpressions) { validateRule(rule); } }