docs: function(){
              var self = this,
              lltable = this.lltable = {};
  
              var conflict = {}, isConflict;
  
              _.each(self.productions, function(p){
                  var symbol = lltable[p.symbol] = lltable[p.symbol] || {};
  
                  _.each(p.firsts, function(token){
                      symbol[token] = symbol[token] || [];
                      symbol[token].push(p.id);
                      if(symbol[token].length > 1){
                          conflict[p.symbol] = token;
                          isConflict = true;
                      }
                  });
  
                  if(p.nullable){
                      _.each(self.nonterminals[p.symbol].follows, function(token){
                          symbol[token] = symbol[token] || [];
                          symbol[token].push(p.id);
                          if(symbol[token].length > 1){
                              conflict[p.symbol] = token;
                              isConflict = true;
                          }
                      });
                  }
              });
  
              if (isConflict) {
                  var conflicts = [];
                  _.forIn(conflict, function(token, symbol){
                      conflicts[conflicts.length] = {
                          symbol: symbol,
                          token: token,
                          productions: _.map(lltable[symbol][token],function(pid){return self.productions[pid].srhs})
                      };
                  });
                  this.conflict = conflicts;
              }
  
              return lltable;
          }