30 lines
841 B
JavaScript
30 lines
841 B
JavaScript
'use strict';
|
|
|
|
module.exports = TokenStream;
|
|
function TokenStream(tokens) {
|
|
if (!Array.isArray(tokens)) {
|
|
throw new TypeError('tokens must be passed to TokenStream as an array.');
|
|
}
|
|
this._tokens = tokens;
|
|
}
|
|
TokenStream.prototype.lookahead = function (index) {
|
|
if (this._tokens.length <= index) {
|
|
throw new Error('Cannot read past the end of a stream');
|
|
}
|
|
return this._tokens[index];
|
|
};
|
|
TokenStream.prototype.peek = function () {
|
|
if (this._tokens.length === 0) {
|
|
throw new Error('Cannot read past the end of a stream');
|
|
}
|
|
return this._tokens[0];
|
|
};
|
|
TokenStream.prototype.advance = function () {
|
|
if (this._tokens.length === 0) {
|
|
throw new Error('Cannot read past the end of a stream');
|
|
}
|
|
return this._tokens.shift();
|
|
};
|
|
TokenStream.prototype.defer = function (token) {
|
|
this._tokens.unshift(token);
|
|
};
|