Pardon if this has already come up. I only found one prior reference in
my search.

There's a section in S5 about "Matching against non-strings", but it
really only addresses matching against strings that are retrieved
dynamically from tied values.

Some operations in a rule operate on string values, so:

        rx{a}

does a character match, but much of a rule is about grouping, repeating,
recursing and backtracking. These operations are universal. Also,
closures can perform a match against any kind of data.

So, if rules matched against strings only as a special case, and more
generically against any object which implements a role that defines a
set of access methods, then we *could* match against anything.

This moves us up a layer of abstraction and allows efficient matches
against data like piddles, databases, web sites and other such
abstractions that might occasionally CONTAIN strings, but have a higher
level against which to match more efficiently (and without costly string
conversion).

The role might look like:

        role rx_tok_class {
                method init(rx_tok [EMAIL PROTECTED]) {...}
                multi sub infix:in(rx_tok $item, rx_tok_class $set) {...}
        }
        role rx_tok {
                multi method compare(rx_tok $other) {...}
                multi method compare(rx_tok_class $other) {...}
        }
        role matchable {
                method index(int $n) returns (rx_tok) {...}
                method length() returns(int) {...}
        }

Of course strings will be special-cased and would bypass much of this
abstraction as an optimization.

Another way of saying this is: if rules are a grammar, then it might be
nice to be able to build a separate (very light, given that rules can
contain regexes) scanner.

-- 
â 781-324-3772
â [EMAIL PROTECTED]
â http://www.ajs.com/~ajs

Reply via email to