code: function advance(sExpectedTokenId) {
  			var oToken = aTokens[iNextToken];
  
  			if (sExpectedTokenId) {
  				if (!oToken) {
  					error("Expected " + sExpectedTokenId + " but instead saw end of input",
  						sInput);
  				} else if (oToken.id !== sExpectedTokenId) {
  					error("Expected " + sExpectedTokenId + " but instead saw "
  							+ sInput.slice(oToken.start, oToken.end),
  						sInput,
  						oToken.start + 1);
  				}
  			}
  			iNextToken += 1;
  			return oToken;
  		}
docs: Returns the next token in the array of tokens and advances the index in this array.
  Throws an error if the next token's ID is not equal to the optional
  <code>sExpectedTokenId</code>.
  @param {string} [sExpectedTokenId] - the expected id of the next token
  @returns {object} - the next token or undefined if all tokens have been read