module Temple::Mixins::GrammarDSL

@api private

Public Instance Methods

===(exp)
Alias for: match?
=~(exp)
Alias for: match?
Rule(rule) click to toggle source
# File lib/temple/mixins/grammar_dsl.rb, line 136
def Rule(rule)
  case rule
  when Rule
    rule
  when Symbol, Class, true, false, nil
    Value(rule)
  when Array
    start = Or.new(self)
    curr = [start]
    rule.each do |elem|
      if elem =~ /^(.*)(\*|\?|\+)$/
        elem = Element.new(self, const_get($1))
        curr.each {|c| c << elem }
        elem << elem if $2 != '?'
        curr = $2 == '+' ? [elem] : (curr << elem)
      else
        elem = Element.new(self, elem)
        curr.each {|c| c << elem }
        curr = [elem]
      end
    end
    elem = Value([])
    curr.each {|c| c << elem }
    start
  else
    raise ArgumentError, "Invalid grammar rule '#{rule.inspect}'"
  end
end
Value(value) click to toggle source
# File lib/temple/mixins/grammar_dsl.rb, line 132
def Value(value)
  Value.new(self, value)
end
const_missing(name) click to toggle source
# File lib/temple/mixins/grammar_dsl.rb, line 165
def const_missing(name)
  const_set(name, Root.new(self, name))
end
extended(mod) click to toggle source
# File lib/temple/mixins/grammar_dsl.rb, line 115
def extended(mod)
  mod.extend GrammarDSL
  constants.each do |name|
    const_get(name).copy_to(mod) if Rule === const_get(name)
  end
end
match?(exp) click to toggle source
# File lib/temple/mixins/grammar_dsl.rb, line 122
def match?(exp)
  const_get(:Expression).match?(exp)
end
Also aliased as: ===, =~
validate!(exp) click to toggle source
# File lib/temple/mixins/grammar_dsl.rb, line 128
def validate!(exp)
  const_get(:Expression).validate!(exp)
end