code: function parseText(source, delimiters) {
      delimiters = delimiters || ['{{', '}}'];
  
      var regCacheKey = delimiters[0] + '>..<' + delimiters[1];
      var exprStartReg = delimRegCache[regCacheKey];
      if (!exprStartReg) {
          exprStartReg = new RegExp(
              regexpLiteral(delimiters[0])
                  + '\\s*([\\s\\S]+?)\\s*'
                  + regexpLiteral(delimiters[1]),
              'g'
          );
          delimRegCache[regCacheKey] = exprStartReg;
      }
  
      var exprMatch;
  
      var walker = new Walker(source);
      var beforeIndex = 0;
  
      var expr = {
          type: ExprType.TEXT,
          segs: []
      };
  
      function pushStringToSeg(text) {
          text && expr.segs.push({
              type: ExprType.STRING,
              literal: text,
              value: decodeHTMLEntity(text)
          });
      }
  
      var delimEndLen = delimiters[1].length;
      while ((exprMatch = walker.match(exprStartReg)) != null) {
          var interpSource = exprMatch[1];
          var interpLen = exprMatch[0].length;
          if (walker.cut(walker.index + 1 - delimEndLen, walker.index + 1) === delimiters[1]) {
              interpSource += walker.cut(walker.index, walker.index + 1);
              walker.go(1);
              interpLen++;
          }
  
          pushStringToSeg(walker.cut(
              beforeIndex,
              walker.index - interpLen
          ));
  
          var interp = parseInterp(interpSource);
          expr.original = expr.original || interp.original;
          expr.segs.push(interp);
  
          beforeIndex = walker.index;
      }
  
      pushStringToSeg(walker.cut(beforeIndex));
  
  
  
      if (expr.segs.length === 1 && expr.segs[0].type === ExprType.STRING) {
          expr.value = expr.segs[0].value;
      }
  
      return expr;
  }
docs: 解析文本
  
  @param {string} source 源码
  @param {Array?} delimiters 分隔符。默认为 ['{{', '}}']
  @return {Object}