** (Advanced) 
** Handed to 'Rule' classes during the matching process. 
mixin RuleCtx {
    ** Call to process a sub-rule. Returns 'true' if it matched successfully.
    abstract Bool process(Rule rule)
    ** Consumes 1 character from the underlying input stream.
    abstract Int readChar()

    ** Peeks a character relative to the current position
    ** (Does not consume any characters).
    ** For example:
    **  - 'peekChar(2)'  - returns char at 'currentPos + 2'
    **  - 'peekChar(-1)' - returns char at 'currentPos - 1' 
    ** Returns 'null' if out of bounds.
    abstract Int? peekChar(Int offset := 0)

    ** Returns the current position in the underlying input stream.
    abstract Int currentPos()
    ** Rolls back the underlying input stream to the given position. 
    abstract Void rollbackToPos(Int pos)

    ** Returns 'true' if at the Start-Of-Stream. 
    abstract Bool sos()

    ** Returns 'true' if at the End-Of-Stream. 
    abstract Bool eos()

    ** Logs the given message to debug. It is formatted to be the same as the other Pegger debug messages. 
    abstract Void log(Str msg)

    ** Returns a PEG specific 'ParseErr' to be thrown.
    abstract PegParseErr parseErr(Str errMsg)

    ** Returns the string we are matching against. 
    abstract Str str()