code: function(){
                  /*
                   * media_query
                   *   : [ONLY | NOT]? S* media_type S* [ AND S* expression ]*
                   *   | expression [ AND S* expression ]*
                   *   ;
                   */
                  var tokenStream = this._tokenStream,
                      type        = null,
                      ident       = null,
                      token       = null,
                      expressions = [];
                  if (tokenStream.match(Tokens.IDENT)){
                      ident = tokenStream.token().value.toLowerCase();
  
                      //since there's no custom tokens for these, need to manually check
                      if (ident !== "only" && ident !== "not"){
                          tokenStream.unget();
                          ident = null;
                      } else {
                          token = tokenStream.token();
                      }
                  }
                 
                  this._readWhitespace();
  
                  if (tokenStream.peek() === Tokens.IDENT){
                      type = this._media_type();
                      if (token === null){
                          token = tokenStream.token();
                      }
                  } else if (tokenStream.peek() === Tokens.LPAREN){
                      if (token === null){
                          token = tokenStream.LT(1);
                      }
                      expressions.push(this._media_expression());
                  }
  
                  if (type === null && expressions.length === 0){
                      return null;
                  } else {
                      this._readWhitespace();
                      while (tokenStream.match(Tokens.IDENT)){
                          if (tokenStream.token().value.toLowerCase() !== "and"){
                              this._unexpectedToken(tokenStream.token());
                          }
                          this._readWhitespace();
                          expressions.push(this._media_expression());
                      }
                  }
                  return new MediaQuery(ident, type, expressions, token.startLine, token.startCol);
              }
docs: /*
  Note: "expression" in the grammar maps to the _media_expression
  method.