Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# token-stream
Take an array of token and produce a more useful API to give to a parser.
[](https://travis-ci.org/jadejs/token-stream)
[](https://gemnasium.com/jadejs/token-stream)
[](https://www.npmjs.org/package/token-stream)
## Installation
npm install token-stream
## Usage
```js
var TokenStream = require('token-stream');
var stream = new TokenStream([
'a',
'b',
'c',
'd'
]);
assert(stream.peek() === 'a');
assert(stream.lookahead(0) == 'a');
assert(stream.lookahead(1) == 'b');
assert(stream.advance() === 'a');
assert(stream.peek() === 'b');
assert(stream.lookahead(0) == 'b');
assert(stream.lookahead(1) == 'c');
stream.defer('z');
assert(stream.peek() === 'z');
assert(stream.lookahead(0) == 'z');
assert(stream.lookahead(1) == 'b');
assert(stream.advance() === 'z');
assert(stream.advance() === 'b');
assert(stream.advance() === 'c');
assert(stream.advance() === 'd');
// an error is thrown if you try and advance beyond the end of the stream
assert.throws(function () {
stream.adavance();
});
```
## API
### stream.peek()
Gets and returns the next item in the stream without advancing the stream's position.
### stream.advance()
Returns the next item in the stream and advances the stream by one item.
### stream.defer(token)
Put a token on the start of the stream (useful if you need to back track after calling advance.
### stream.lookahead(index)
Return the item at `index` position from the start of the stream, but don't advance the stream. `stream.lookahead(0)` is equivalent to `stream.peek()`.
## License
MIT