constructor(str, options) {
    var self = this;
    options = options || {};
    Parser.cache = Parser.cache || Parser.getCache(options);
    this.hash = Parser.cache.key(str, options);
    this.lexer = {};
    if (!Parser.cache.has(this.hash)) {
      this.lexer = new Lexer(str, options);
    }
    this.prefix = options.prefix || '';
    this.root = options.root || new nodes.Root;
    this.state = ['root'];
    this.stash = [];
    this.parens = 0;
    this.css = 0;
    this.state.pop = function () {
      self.prevState = [].pop.call(this);
    };
  }
Initialize a new `Parser` with the given `str` and `options`.

@param {String} str
@param {Object} options
@api private