scope gazelle_addVarDiscriminators. sclass #VarDiscriminator { S var; O discriminator; bool debug; *() {} *(S *var, O *discriminator, bool *debug) {} SS get(SS map, LS tokC, LS tokI, RuleEngine2_MatchedRule matched) { if (map == null) null; S value = map.get(var); if (value != null && !isTrue(callAndMake_orF1(discriminator, value))) { if (debug) print("Rejecting var: " + var + " -> " + value + " because of " + discriminator); null; } ret map; } } svoid gazelle_addVarDiscriminators(RuleEngine2 engine, O... _) { bool debug = boolPar debug(_); for (final RuleEngine2.Rule r : engine.rules) { for (Matches m : getJMatches_all("var * should satisfy *", r.comments)) { S var = $1, discriminator = $2; if (debug) print("Made discriminator for: " + var); r.addMapMassager(new VarDiscriminator(var, discriminator, debug)); } for (Matches m : getJMatches_all("* has to be between * and *", r.comments)) { S var = $1; double min = parseDouble($2), max = parseDouble($3); if (debug) print("Made discriminator for: " + var); r.addMapMassager(new VarDiscriminator(var, func(S value) -> bool { isBetween_double(parseDouble(or(value, var)), min, max) }, debug)); } } end scope