docs: function(symbol){
  
              var self = this,
              firsts = [];
  
              if(_.isString(symbol)){
                  if(_.indexOf(self.terminals,symbol) !== -1){
                      firsts.push(symbol);
                      return firsts;
                  }
                  if(self.nonterminals[symbol]){
                      return self.nonterminals[symbol].firsts;
                  }
              }else if(_.isArray(symbol)){
                  var rhs = symbol;
  
                  for(var i=0; symbol=rhs[i]; i++){
                      firsts = _.union(firsts, self._first(symbol));
                      if(self.nonterminals[symbol] && !self.nonterminals[symbol].nullable || _.indexOf(self.terminals,symbol) !== -1){
                          return firsts;
                      }
                  }
              }
              return firsts;
          }