module TDParser

Constants

VERSION

Public Class Methods

define(*_args, &) click to toggle source
# File lib/tdparser.rb, line 131
def self.define(*_args, &)
  klass = Class.new(Grammar)
  g = klass.new
  begin
    if defined?(g.instance_exec)
      g.instance_exec(g, &)
    else
      g.instance_eval(&)
    end
  end
  g
end

Public Instance Methods

any()
Alias for: any_rule
any_rule() click to toggle source
# File lib/tdparser.rb, line 69
def any_rule
  AnyParser.new
end
Also aliased as: any
back_ref(x, eqsym = :===) click to toggle source
# File lib/tdparser.rb, line 48
def back_ref(x, eqsym = :===)
  BackrefParser.new(x, eqsym)
end
Also aliased as: backref
backref(x, eqsym = :===)
Alias for: back_ref
chain_left(base, *infixes, &) click to toggle source
# File lib/tdparser.rb, line 115
def chain_left(base, *infixes, &)
  infixes.inject(base) do |acc, r|
    leftrec(acc, r - acc, &)
  end
end
Also aliased as: chainl
chain_right(base, *infixes, &) click to toggle source
# File lib/tdparser.rb, line 123
def chain_right(base, *infixes, &)
  infixes.inject(base) do |acc, r|
    rightrec(acc - r, acc, &)
  end
end
Also aliased as: chainr
chainl(base, *infixes, &)
Alias for: chain_left
chainr(base, *infixes, &)
Alias for: chain_right
condition(&)
Alias for: condition_rule
condition_rule(&) click to toggle source
# File lib/tdparser.rb, line 84
def condition_rule(&)
  ConditionParser.new(&)
end
Also aliased as: condition
empty(&)
Alias for: empty_rule
empty_rule(&) click to toggle source
# File lib/tdparser.rb, line 64
def empty_rule(&)
  EmptyParser.new(&)
end
Also aliased as: empty
fail()
Alias for: fail_rule
fail_rule() click to toggle source
# File lib/tdparser.rb, line 79
def fail_rule
  FailParser.new
end
Also aliased as: fail
left_rec(*rules, &act) click to toggle source
# File lib/tdparser.rb, line 89
def left_rec(*rules, &act)
  f = proc do |x|
    x[1].inject(x[0]) do |acc, y|
      act.call(Sequence[acc, *y])
    end
  end
  base = rules.shift
  rules.collect { |r| (base - (r * 0)) >> f }.inject(fail) { |acc, r| r | acc }
end
Also aliased as: leftrec
leftrec(*rules, &act)
Alias for: left_rec
none()
Alias for: none_rule
none_rule() click to toggle source
# File lib/tdparser.rb, line 74
def none_rule
  NoneParser.new
end
Also aliased as: none
right_rec(*rules, &act) click to toggle source
# File lib/tdparser.rb, line 101
def right_rec(*rules, &act)
  f = proc do |x|
    x[0].reverse.inject(x[1]) do |acc, y|
      ys = y.dup
      ys.push(acc)
      act.call(Sequence[*ys])
    end
  end
  base = rules.pop
  rules.collect { |r| ((r * 0) - base) >> f }.inject(fail) { |acc, r| r | acc }
end
Also aliased as: rightrec
rightrec(*rules, &act)
Alias for: right_rec
rule(sym, *opts) click to toggle source
# File lib/tdparser.rb, line 40
def rule(sym, *opts)
  NonTerminalParser.new(self, sym, *opts)
end
stack_ref(stack, eqsym = :===) click to toggle source
# File lib/tdparser.rb, line 54
def stack_ref(stack, eqsym = :===)
  StackrefParser.new(stack, eqsym)
end
Also aliased as: stackref
stackref(stack, eqsym = :===)
Alias for: stack_ref
state(s) click to toggle source
# File lib/tdparser.rb, line 60
def state(s)
  StateParser.new(s)
end
token(x, eqsym = :===) click to toggle source
# File lib/tdparser.rb, line 44
def token(x, eqsym = :===)
  TerminalParser.new(x, eqsym)
end