Sthx::Ahead
Inherits Sthx::Rule < Reference < Object
Forward declaration of a rule.
Constructors
new(*, __file = __FILE__, __line = __LINE__) : Ahead
SourceInstance methods
advance(cursor : Cursor, data : TreeData, *, collect : Collect) : Advance::Result
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.
put(rule : Rule) : self
Assigns rule, should be called when its definition becomes available.
expr = ahead
expr.put('(' & maybe(expr) & ')')
expr.apply?("(((())))") # => Tree
expr.apply?("((())") # => nil