# File lib/rexical/generator.rb, line 109
    def add_rule( rule_state, rule_expr, rule_action=nil )
      st = rule_expr.dup
      @macro.each_pair do |k, e|
        rule_expr.gsub!(k) { |m| e }
      end
      if rule_state.to_s[1,1] =~ /[A-Z]/
        @exclusive_states << rule_state  unless @exclusive_states.include?(rule_state)
        exclusive_state = rule_state
        start_state = nil
      else
        exclusive_state = nil
        start_state = rule_state
      end
      rule = [exclusive_state, start_state, rule_expr, rule_action]
      @rules << rule
    rescue
      raise ParseError, "parse error in add_rule:'#{st}'"
    end