struct Sthx::LongestOf

Overview

The rule with most progress into the source string wins. This mode doesn't depend on initialization order, only on the content of the source string itself. So e.g. in "x" | "xx" and the source string "xx" the rule "xx" will match, and if the source string is "x" the rule "x" will match.

The slower option between FirstOf and LongestOf, as all branches must run for the winner to be determined.

Included Modules

Defined in:

synthax/rule.cr

Instance Method Summary

Instance methods inherited from module Sthx::RuleCollection

with(rule : Rule) : self with

Constructor methods inherited from module Sthx::RuleCollection

new(rules : Array(Rule)) new

Instance methods inherited from module Sthx::Rule

advance(cursor : Cursor, data : TreeData, *, collect : Collect) : Advance::Result advance, apply(source : String, *, offset : Int = 0, exact : Bool = true, root : String = "root") : Apply::Result apply, apply!(source : String, **kwargs) apply!, apply?(source : String, **kwargs) apply?

Instance Method Detail

def advance(cursor : Cursor, data : TreeData, *, collect : Collect) : Advance::Result #
Description copied from module Sthx::Rule

Performs cursor motion and returns the result, one of Advance::Result: success Advance::Ok or failure Advance::Err.

data is the TreeData object built so far.

To implementors of this method: in case of failure to commit, cursor must be rolled back to its state before calling this method. In other words, #advance is implemented in a "transaction" kind of way. Intermediate results and changes must never be available to the caller. This method either succeeds and mutates the cursor; or it fails and leaves the cursor intact.


[View source]