struct Sthx::LongestOf
- Sthx::LongestOf
- Struct
- Value
- Object
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.crInstance Method Summary
-
#advance(cursor : Cursor, data : TreeData, *, collect : Collect) : Advance::Result
Performs cursor motion and returns the result, one of
Advance::Result
: successAdvance::Ok
or failureAdvance::Err
.
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
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.