Module: BBSexp::Dialect::ClassMethods

Defined in:
lib/bbsexp/dialect.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(level, sym, args = {}) ⇒ Object



37
38
39
# File 'lib/bbsexp/dialect.rb', line 37

def method_missing(level, sym, args={})
  exp(sym, level, args)
end

Instance Attribute Details

#brackets(brackets = nil) ⇒ Object

Returns the value of attribute brackets.



4
5
6
# File 'lib/bbsexp/dialect.rb', line 4

def brackets
  @brackets
end

#end_exp(exp = nil) ⇒ Object

Returns the value of attribute end_exp.



4
5
6
# File 'lib/bbsexp/dialect.rb', line 4

def end_exp
  @end_exp
end

#expsObject

Returns the value of attribute exps.



4
5
6
# File 'lib/bbsexp/dialect.rb', line 4

def exps
  @exps
end

#no_parseObject

Returns the value of attribute no_parse.



4
5
6
# File 'lib/bbsexp/dialect.rb', line 4

def no_parse
  @no_parse
end

#regexpObject (readonly)

Returns the value of attribute regexp.



5
6
7
# File 'lib/bbsexp/dialect.rb', line 5

def regexp
  @regexp
end

Class Method Details

.extended(by) ⇒ Object



7
8
9
10
11
# File 'lib/bbsexp/dialect.rb', line 7

def self.extended(by)
  by.instance_exec do
    @exps = {}
  end
end

Instance Method Details

#exp(sym, state, args = {}) ⇒ Object



41
42
43
44
45
# File 'lib/bbsexp/dialect.rb', line 41

def exp(sym, state, args={})
  sym = sym.to_s
  @no_parse = sym if state == :noparse
  @exps[sym] = Expression.new(sym, state, args)
end

#initializeObject



13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/bbsexp/dialect.rb', line 13

def initialize
  @brackets ||= '[]'
  @no_parse ||= '`'
  @end_exp ||= '|'
  exps = [  @brackets[0],
            @exps.keys.join,
            @end_exp,
            @no_parse,
            @brackets[1] ].map {|v| Regexp.escape(v) }

  regexp = "%s([%s]+|%s+(%s)?)%s" % exps
  @regexp = Regexp.new(regexp)
  @initialized = true
end

#parse(text) ⇒ Object



47
48
49
50
# File 'lib/bbsexp/dialect.rb', line 47

def parse(text)
  initialize unless @initialized
  Compiler.new(self, text).build
end