# File lib/rexical/generator.rb, line 77
    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