scope ai_gazelle_analyzeStatementsForRule. sclass #Data { Set possibleVars, usedVars, unusedVars, varsUsedInGood, varsUsedInBad, varsUsedInGoodOnly, varsUsedInBadOnly; Set unclearVars; // used in good and bad mappings MultiMap goodMappings, badMappings, alwaysGoodMappings, alwaysBadMappings; } static Data ai_gazelle_analyzeStatementsForRule(LS l) { Set possibleVars = asCISet(matchAny_firstGroups("possible variable *", l)); Set usedVars = asCISet(matchX_any_firstGroups("... variable * was used", l)); Set unusedVars = asCISet(listMinusSet(possibleVars, usedVars)); Set varsUsedInGood = asCISet(matchX_any_firstGroups("in a good mapping, variable * was used", l)); Set varsUsedInBad = asCISet(matchX_any_firstGroups("in a bad mapping, variable * was used", l)); Set unclearVars = setIntersection(varsUsedInGood, varsUsedInBad); MultiMap goodMappings = pairsToMultiMap(matchX_any_firstAndSecondGroups("in a good mapping, variable * was mapped to *", l)); MultiMap badMappings = pairsToMultiMap(matchX_any_firstAndSecondGroups("in a bad mapping, variable * was mapped to *", l)); MultiMap alwaysGoodMappings = multiMapDiff(goodMappings, badMappings); MultiMap alwaysBadMappings = multiMapDiff(badMappings, goodMappings); ret nu(Data, +possibleVars, +usedVars, +unusedVars, +varsUsedInGood, +varsUsedInBad, +unclearVars, varsUsedInGoodOnly := setDiff(varsUsedInGood, varsUsedInBad), varsUsedInBadOnly := setDiff(varsUsedInBad, varsUsedInGood), +goodMappings, +badMappings, +alwaysGoodMappings, +alwaysBadMappings); } end scope