class Rexical::Generator

def add_macro( st )

def add_macro( st )
  ss  =  StringScanner.new(st)
  ss.scan(/\s+/)
  key = ss.scan(/\S+/)
  ss.scan(/\s+/)
  st = ss.post_match
  len  =  st.size
  ndx  =  0
  while ndx <= len
    c  =  st[ndx,1]
    ndx  +=  1
    case  c
    when '\\'
      ndx  +=  1
      next
    when '#', ' '
      ndx  -=  1
      break
    end
  end
  expr = st[0,ndx]
  expr.gsub!('\ ', ' ')
  key  =  '{' + key + '}'
  @macro.each_pair do |k, e|
    expr.gsub!(k) { |m| e }
  end
  @macro[key]  =  expr
rescue
  raise ParseError, "parse error in add_macro:'#{st}'"
end