sclass PartialAttractor implements Runnable { VF1 action; LS tok; IntRange matchedRange; public abstract bool find(); // uses tok public void run { callF(action, this); } toString { ret standard_toString(this); } bool acceptFull() { matchedRange = intRange(0, tok); true; } } // attracts everything sclass PDefaultAttractor > Attractor { public abstract bool find() { ret acceptFull(); } } // uses find3 sclass PFind3Attractor > Attractor { S pattern; *(S *pattern) {} public abstract bool find() { matchedRange = find2_range(pattern, s); ret matchedRange != null; } }