class Sthx::Ahead

Overview

Forward declaration of a rule.

Included Modules

Defined in:

synthax/rule.cr

Constructors

Instance Method Summary

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?

Constructor Detail

def self.new(*, __file = __FILE__, __line = __LINE__) : Ahead #

[View source]

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]
def 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

[View source]