Exemplo n.º 1
0
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();
}
Exemplo n.º 2
0
void init() {
    assert(!rules);
    if (!(rules = fileDepersist(rulesFilename))) {
        rules = makeExpression(rulesSymbol);
        assert(!countRules());
    }
    validateRules();
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
void validateRules() {
    assert(countRules() >= 0);
    for (const auto& rule : rules->subexpressions) {
        validateRule(rule);
    }
}